diff --git a/.opensource/project.json b/.opensource/project.json
index b756e295a..ab51045f5 100644
--- a/.opensource/project.json
+++ b/.opensource/project.json
@@ -20,7 +20,8 @@
"storage/README.md",
"firestore/README.md",
"docs/upgrade-to-2.0.md",
- "docs/upgrade-to-3.0.md"
+ "docs/upgrade-to-3.0.md",
+ "docs/upgrade-to-4.0.md"
],
// Related projects on Github, in the format $owner/$repo[/$subproject]
diff --git a/README.md b/README.md
index ae5145744..00ca87bdd 100644
--- a/README.md
+++ b/README.md
@@ -47,16 +47,16 @@ libraries.
```groovy
dependencies {
// FirebaseUI for Firebase Realtime Database
- implementation 'com.firebaseui:firebase-ui-database:3.3.1'
+ implementation 'com.firebaseui:firebase-ui-database:4.0.0'
// FirebaseUI for Cloud Firestore
- implementation 'com.firebaseui:firebase-ui-firestore:3.3.1'
+ implementation 'com.firebaseui:firebase-ui-firestore:4.0.0'
// FirebaseUI for Firebase Auth
- implementation 'com.firebaseui:firebase-ui-auth:3.3.1'
+ implementation 'com.firebaseui:firebase-ui-auth:4.0.0'
// FirebaseUI for Cloud Storage
- implementation 'com.firebaseui:firebase-ui-storage:3.3.1'
+ implementation 'com.firebaseui:firebase-ui-storage:4.0.0'
}
```
@@ -70,6 +70,7 @@ After the project is synchronized, we're ready to start using Firebase functiona
If you are using an old version of FirebaseUI and upgrading, please see the appropriate
migration guide:
+* [Upgrade from 3.3.1 to 4.x.x](./docs/upgrade-to-4.0.md)
* [Upgrade from 2.3.0 to 3.x.x](./docs/upgrade-to-3.0.md)
* [Upgrade from 1.2.0 to 2.x.x](./docs/upgrade-to-2.0.md)
@@ -93,24 +94,20 @@ firebase-ui-storage
|--- com.google.firebase:firebase-storage
```
-Each version of FirebaseUI has dependency on a fixed version of these libraries, defined as the variable `firebase_version`
-in `common/constants.gradle`. If you are using any dependencies in your app of the form
-`implementation 'com.google.firebase:firebase-*:x.y.z'` or
-`implementation 'com.google.android.gms:play-services-*:x.y.z'`
-you need to make sure that you use the same version that your chosen version of FirebaseUI requires.
+As of version `15.0.0`, Firebase and Google Play services libraries have independent, semantic
+versions. This means that FirebaseUI has independent dependencies on each of the libraries above.
+For best results, your app should depend on a version of each dependency with the same major
+version number as the version used by FirebaseUI.
-For convenience, here are some recent examples:
-
-| FirebaseUI Version | Firebase/Play Services Version |
-|--------------------|--------------------------------|
-| 3.3.1 | 15.0.0 |
-| 3.3.0 | 12.0.1 |
-| 3.2.2 | 11.8.0 |
-| 3.1.3 | 11.8.0 |
-| 3.0.0 | 11.4.2 |
-| 2.4.0 | 11.4.0 |
-| 1.1.1 | 10.0.0 or 10.0.1 |
+As of version `4.0.0`, FirebaseUI has the following dependency versions:
+| Library | Version |
+|----------------------|--------------------------------|
+| `firebase-auth` | 15.1.0 |
+| `play-services-auth` | 15.0.1 |
+| `firebase-database` | 15.0.1 |
+| `firebase-firestore` | 16.0.0 |
+| `firebase-storage` | 15.0.2 |
### Upgrading dependencies
diff --git a/app/build.gradle b/app/build.gradle
index 8ec70a284..1dfc16e00 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -36,7 +36,7 @@ android {
}
dependencies {
- implementation "com.google.firebase:firebase-core:$firebaseVersion"
+ implementation "com.google.firebase:firebase-core:$coreVersion"
implementation "com.android.support:design:$supportLibraryVersion"
implementation 'com.android.support:multidex:1.0.3'
@@ -45,14 +45,17 @@ dependencies {
implementation project(path: ':database')
implementation project(path: ':storage')
- implementation 'com.facebook.android:facebook-login:4.31.0'
+ implementation 'com.facebook.android:facebook-login:4.32.0'
// Needed to override Facebook
implementation "com.android.support:cardview-v7:$supportLibraryVersion"
implementation "com.android.support:customtabs:$supportLibraryVersion"
implementation("com.twitter.sdk.android:twitter-core:3.1.1@aar") { transitive = true }
- implementation 'com.github.bumptech.glide:glide:4.6.1'
- annotationProcessor 'com.github.bumptech.glide:compiler:4.6.1'
+ implementation 'com.github.bumptech.glide:glide:4.7.1'
+ annotationProcessor 'com.github.bumptech.glide:compiler:4.7.1'
+
+ // Used for FirestorePagingActivity
+ implementation "android.arch.paging:runtime:$pagingVersion"
// The following dependencies are not required to use the Firebase UI library.
// They are used to make some aspects of the demo app implementation simpler for
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78baf88a5..0a381a18c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -43,6 +43,11 @@
android:name=".database.firestore.FirestoreChatActivity"
android:label="@string/title_firestore_activity" />
+
+
+
() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ startSignedInActivity(null);
+ } else {
+ showSnackbar(R.string.sign_in_failed);
+ }
+ }
+ });
+ }
+
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
diff --git a/app/src/main/java/com/firebase/uidemo/database/firestore/FirestorePagingActivity.java b/app/src/main/java/com/firebase/uidemo/database/firestore/FirestorePagingActivity.java
new file mode 100644
index 000000000..f3f92fe34
--- /dev/null
+++ b/app/src/main/java/com/firebase/uidemo/database/firestore/FirestorePagingActivity.java
@@ -0,0 +1,197 @@
+package com.firebase.uidemo.database.firestore;
+
+import android.arch.paging.PagedList;
+import android.os.Bundle;
+import android.support.annotation.NonNull;
+import android.support.v7.app.AppCompatActivity;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.firebase.ui.firestore.paging.FirestorePagingAdapter;
+import com.firebase.ui.firestore.paging.FirestorePagingOptions;
+import com.firebase.ui.firestore.paging.LoadingState;
+import com.firebase.uidemo.R;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.firestore.CollectionReference;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.Query;
+import com.google.firebase.firestore.WriteBatch;
+
+import java.util.Locale;
+
+import butterknife.BindView;
+import butterknife.ButterKnife;
+
+public class FirestorePagingActivity extends AppCompatActivity {
+
+ private static final String TAG = "FirestorePagingActivity";
+
+ @BindView(R.id.paging_recycler)
+ RecyclerView mRecycler;
+
+ @BindView(R.id.paging_loading)
+ ProgressBar mProgressBar;
+
+ private FirebaseFirestore mFirestore;
+ private CollectionReference mItemsCollection;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_firestore_paging);
+ ButterKnife.bind(this);
+
+ mFirestore = FirebaseFirestore.getInstance();
+ mItemsCollection = mFirestore.collection("items");
+
+ setUpAdapter();
+ }
+
+ private void setUpAdapter() {
+ Query baseQuery = mItemsCollection.orderBy("value", Query.Direction.ASCENDING);
+
+ PagedList.Config config = new PagedList.Config.Builder()
+ .setEnablePlaceholders(false)
+ .setPrefetchDistance(10)
+ .setPageSize(20)
+ .build();
+
+ FirestorePagingOptions options = new FirestorePagingOptions.Builder()
+ .setLifecycleOwner(this)
+ .setQuery(baseQuery, config, Item.class)
+ .build();
+
+ FirestorePagingAdapter adapter =
+ new FirestorePagingAdapter(options) {
+ @NonNull
+ @Override
+ public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent,
+ int viewType) {
+ View view = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.item_item, parent, false);
+ return new ItemViewHolder(view);
+ }
+
+ @Override
+ protected void onBindViewHolder(@NonNull ItemViewHolder holder,
+ int position,
+ Item model) {
+ holder.bind(model);
+ }
+
+ @Override
+ protected void onLoadingStateChanged(@NonNull LoadingState state) {
+ switch (state) {
+ case LOADING_INITIAL:
+ case LOADING_MORE:
+ mProgressBar.setVisibility(View.VISIBLE);
+ break;
+ case LOADED:
+ mProgressBar.setVisibility(View.GONE);
+ break;
+ case FINISHED:
+ mProgressBar.setVisibility(View.GONE);
+ showToast("Reached end of data set.");
+ break;
+ case ERROR:
+ showToast("An error occurred.");
+ retry();
+ break;
+ }
+ }
+ };
+
+ mRecycler.setLayoutManager(new LinearLayoutManager(this));
+ mRecycler.setAdapter(adapter);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.menu_firestore_paging, menu);
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ if (item.getItemId() == R.id.item_add_data) {
+ showToast("Adding data...");
+ createItems().addOnCompleteListener(this, new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ showToast("Data added.");
+ } else {
+ Log.w(TAG, "addData", task.getException());
+ showToast("Error adding data.");
+ }
+ }
+ });
+
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
+ private Task createItems() {
+ WriteBatch writeBatch = mFirestore.batch();
+
+ for (int i = 0; i < 250; i++) {
+ String title = "Item " + i;
+
+ String id = String.format(Locale.getDefault(), "item_%03d", i);
+ Item item = new Item(title, i);
+
+ writeBatch.set(mItemsCollection.document(id), item);
+ }
+
+ return writeBatch.commit();
+ }
+
+ private void showToast(String message) {
+ Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
+ }
+
+ public static class Item {
+
+ public String text;
+ public int value;
+
+ public Item() {}
+
+ public Item(String text, int value) {
+ this.text = text;
+ this.value = value;
+ }
+
+ }
+
+ public static class ItemViewHolder extends RecyclerView.ViewHolder {
+
+ @BindView(R.id.item_text)
+ TextView mTextView;
+
+ @BindView(R.id.item_value)
+ TextView mValueView;
+
+ ItemViewHolder(View itemView) {
+ super(itemView);
+ ButterKnife.bind(this, itemView);
+ }
+
+ void bind(Item item) {
+ mTextView.setText(item.text);
+ mValueView.setText(String.valueOf(item.value));
+ }
+ }
+
+}
diff --git a/app/src/main/res/layout/activity_firestore_paging.xml b/app/src/main/res/layout/activity_firestore_paging.xml
new file mode 100644
index 000000000..0febad887
--- /dev/null
+++ b/app/src/main/res/layout/activity_firestore_paging.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/auth_ui_layout.xml b/app/src/main/res/layout/auth_ui_layout.xml
index f04e55725..18e092837 100644
--- a/app/src/main/res/layout/auth_ui_layout.xml
+++ b/app/src/main/res/layout/auth_ui_layout.xml
@@ -35,9 +35,18 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:layout_margin="16dp"
+ android:layout_marginTop="16dp"
android:text="@string/sign_in_start" />
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/menu/menu_firestore_paging.xml b/app/src/main/res/menu/menu_firestore_paging.xml
new file mode 100644
index 000000000..b2f2da4cb
--- /dev/null
+++ b/app/src/main/res/menu/menu_firestore_paging.xml
@@ -0,0 +1,11 @@
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 40e3bdce4..c8ad6e691 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -4,17 +4,20 @@
Auth UI demoCloud Firestore Demo
+ Cloud Firestore Paging DemoReal-time database demoStorage Image DemoDemonstrates the Firebase Auth UI flow, with customization options.Demonstrates using a FirestoreRecyclerAdapter to load data from Cloud Firestore into a RecyclerView for a basic chat app.
+ Demonstrates using a FirestorePagingAdapter to load/infinite scroll paged data from Cloud Firestore.Demonstrates using a FirebaseRecyclerAdapter to load data from Firebase Database into a RecyclerView for a basic chat app.Demonstrates displaying an image from Cloud Storage using Glide.FirebaseUI Auth DemoStart
+ Sign in silentlyAuth providersGoogle
@@ -70,6 +73,7 @@
Sign outDelete account
+ Sign in failedSign out failedDelete account failed
@@ -97,5 +101,7 @@
Make sure your device is online and that Anonymous Auth is configured in your Firebase project
(https://console.firebase.google.com/project/_/authentication/providers)
+
+ Add DataSay something…
diff --git a/auth/README.md b/auth/README.md
index dafc1e9c2..c86672f38 100644
--- a/auth/README.md
+++ b/auth/README.md
@@ -33,8 +33,9 @@ and [Web](https://github.com/firebase/firebaseui-web/).
1. [Configuration](#configuration)
1. [Provider config](#identity-provider-configuration)
1. [Usage instructions](#using-firebaseui-for-authentication)
- 1. [Sign in](#sign-in)
+ 1. [AuthUI sign-in](#authui-sign-in)
1. [Handling responses](#handling-the-sign-in-response)
+ 1. [Silent sign-in](#silent-sign-in)
1. [Sign out](#sign-out)
1. [Account deletion](#deleting-accounts)
1. [Auth flow chart](#authentication-flow-chart)
@@ -62,7 +63,7 @@ Gradle, add the dependency:
```groovy
dependencies {
// ...
- implementation 'com.firebaseui:firebase-ui-auth:3.3.1'
+ implementation 'com.firebaseui:firebase-ui-auth:4.0.0'
// Required only if Facebook login support is required
// Find the latest Facebook SDK releases here: https://goo.gl/Ce5L94
@@ -169,7 +170,7 @@ If an alternative app instance is required, call
`AuthUI.getInstance(app)` instead, passing the appropriate `FirebaseApp`
instance.
-### Sign in
+### AuthUI sign-in
If a user is not currently signed in, as can be determined by checking
`auth.getCurrentUser() != null` (where `auth` is the `FirebaseAuth` instance
@@ -352,7 +353,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
showSnackbar(R.string.no_internet_connection);
return;
}
-
+
showSnackbar(R.string.unknown_error);
Log.e(TAG, "Sign-in error: ", response.getError());
}
@@ -365,7 +366,9 @@ see the Firebase Auth documentation to
[get the currently signed-in user](https://firebase.google.com/docs/auth/android/manage-users#get_the_currently_signed-in_user)
and [register an AuthStateListener](https://firebase.google.com/docs/reference/android/com/google/firebase/auth/FirebaseAuth.html#addAuthStateListener(com.google.firebase.auth.FirebaseAuth.AuthStateListener)).
-Note: if you choose to use an `AuthStateListener`, make sure to unregister it before launching the FirebaseUI flow and re-register it after the flow returns. FirebaseUI performs auth operations internally which may trigger the listener before the flow is complete.
+Note: if you choose to use an `AuthStateListener`, make sure to unregister it before launching
+the FirebaseUI flow and re-register it after the flow returns. FirebaseUI performs auth operations
+internally which may trigger the listener before the flow is complete.
#### ID tokens
@@ -401,6 +404,40 @@ if (metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp()) {
}
```
+### Silent sign-in
+
+If a user is not currently signed in, then a silent sign-in process can be started first before
+displaying any UI to provide a seamless experience. Silent sign-in uses saved Smart Lock credentials
+and returns a successful `Task` only if the user has been fully signed in with Firebase.
+
+Here's an example of how you could use silent sign-in paired with Firebase anonymous sign-in to get
+your users up and running as fast as possible:
+
+```java
+List providers = getSelectedProviders();
+AuthUI.getInstance().silentSignIn(this, providers)
+ .continueWithTask(this, new Continuation>() {
+ @Override
+ public Task then(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ return task;
+ } else {
+ // Ignore any exceptions since we don't care about credential fetch errors.
+ return FirebaseAuth.getInstance().signInAnonymously();
+ }
+ }
+}).addOnCompleteListener(this, new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ // Signed in! Start loading data
+ } else {
+ // Uh oh, show error message
+ }
+ }
+});
+```
+
### Sign out
With the integrations provided by AuthUI, signing out a user is a multi-stage process:
diff --git a/auth/auth-proguard.pro b/auth/auth-proguard.pro
index 966e54245..b358de6c6 100644
--- a/auth/auth-proguard.pro
+++ b/auth/auth-proguard.pro
@@ -1,6 +1,9 @@
# Twitter and Facebook are optional
-dontwarn com.facebook.**
-dontwarn com.twitter.**
+# Keep the class names used to check for availablility
+-keepnames class com.facebook.login.LoginManager
+-keepnames class com.twitter.sdk.android.core.identity.TwitterAuthClient
# Don't note a bunch of dynamically referenced classes
-dontnote com.google.**
diff --git a/auth/build.gradle b/auth/build.gradle
index 271ef4ff4..0bdb789a4 100644
--- a/auth/build.gradle
+++ b/auth/build.gradle
@@ -36,25 +36,28 @@ android {
dependencies {
implementation "com.android.support:design:$supportLibraryVersion"
implementation "com.android.support:customtabs:$supportLibraryVersion"
- implementation 'com.android.support.constraint:constraint-layout:1.1.0-beta6'
+ implementation "com.android.support.constraint:constraint-layout:$constraintVersion"
implementation "android.arch.lifecycle:extensions:$architectureVersion"
annotationProcessor "android.arch.lifecycle:compiler:$architectureVersion"
- api "com.google.firebase:firebase-auth:$firebaseVersion"
- api "com.google.android.gms:play-services-auth:$firebaseVersion"
+ api "com.google.firebase:firebase-auth:$authVersion"
+ api "com.google.android.gms:play-services-auth:$playAuthVersion"
- compileOnly 'com.facebook.android:facebook-login:4.31.0'
+ compileOnly 'com.facebook.android:facebook-login:4.32.0'
// Needed to override Facebook
implementation "com.android.support:cardview-v7:$supportLibraryVersion"
implementation "com.android.support:customtabs:$supportLibraryVersion"
compileOnly("com.twitter.sdk.android:twitter-core:3.1.1@aar") { transitive = true }
+ // Material progress bar for loading indicators
+ implementation 'me.zhanghai.android.materialprogressbar:library:1.4.2'
+
testImplementation 'junit:junit:4.12'
//noinspection GradleDynamicVersion
- testImplementation 'org.mockito:mockito-core:2.15.+'
+ testImplementation 'org.mockito:mockito-core:2.18.3'
testImplementation 'org.robolectric:robolectric:3.7'
- testImplementation 'com.facebook.android:facebook-login:4.31.0'
+ testImplementation 'com.facebook.android:facebook-login:4.32.0'
testImplementation("com.twitter.sdk.android:twitter-core:3.1.1@aar") { transitive = true }
debugImplementation project(':internal:lintchecks')
diff --git a/auth/src/main/java/com/firebase/ui/auth/AuthUI.java b/auth/src/main/java/com/firebase/ui/auth/AuthUI.java
index 1f8fab3a9..f99d0c721 100644
--- a/auth/src/main/java/com/firebase/ui/auth/AuthUI.java
+++ b/auth/src/main/java/com/firebase/ui/auth/AuthUI.java
@@ -26,12 +26,12 @@
import android.support.annotation.RestrictTo;
import android.support.annotation.StringDef;
import android.support.annotation.StyleRes;
+import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Log;
import com.facebook.login.LoginManager;
import com.firebase.ui.auth.data.model.FlowParameters;
-import com.firebase.ui.auth.data.remote.FacebookSignInHandler;
import com.firebase.ui.auth.data.remote.TwitterSignInHandler;
import com.firebase.ui.auth.ui.idp.AuthMethodPickerActivity;
import com.firebase.ui.auth.util.CredentialUtils;
@@ -39,10 +39,14 @@
import com.firebase.ui.auth.util.GoogleApiUtils;
import com.firebase.ui.auth.util.Preconditions;
import com.firebase.ui.auth.util.data.PhoneNumberUtils;
+import com.firebase.ui.auth.util.data.ProviderAvailability;
import com.firebase.ui.auth.util.data.ProviderUtils;
import com.google.android.gms.auth.api.credentials.Credential;
+import com.google.android.gms.auth.api.credentials.CredentialRequest;
+import com.google.android.gms.auth.api.credentials.CredentialRequestResponse;
import com.google.android.gms.auth.api.credentials.CredentialsClient;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
+import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.common.api.CommonStatusCodes;
@@ -51,6 +55,8 @@
import com.google.android.gms.tasks.Task;
import com.google.android.gms.tasks.Tasks;
import com.google.firebase.FirebaseApp;
+import com.google.firebase.auth.AuthCredential;
+import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.EmailAuthProvider;
import com.google.firebase.auth.FacebookAuthProvider;
import com.google.firebase.auth.FirebaseAuth;
@@ -83,9 +89,13 @@
* See the README
* for examples on how to get started with FirebaseUI Auth.
*/
-public class AuthUI {
+public final class AuthUI {
- private static final String TAG = "AuthUI";
+ @VisibleForTesting
+ protected static FirebaseAuth sDefaultAuth;
+
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public static final String TAG = "AuthUI";
@StringDef({
EmailAuthProvider.PROVIDER_ID,
@@ -97,79 +107,6 @@ public class AuthUI {
@Retention(RetentionPolicy.SOURCE)
public @interface SupportedProvider {}
- /**
- * Provider identifier for email and password credentials, for use with {@link
- * SignInIntentBuilder#setAvailableProviders(List)}.
- *
- * @deprecated this constant is no longer needed, use the {@link IdpConfig.EmailBuilder}
- * directly or {@link EmailAuthProvider#PROVIDER_ID} if needed.
- */
- @Deprecated
- public static final String EMAIL_PROVIDER = EmailAuthProvider.PROVIDER_ID;
-
- /**
- * Provider identifier for Google, for use with {@link SignInIntentBuilder#setAvailableProviders(List)}.
- *
- * @deprecated this constant is no longer needed, use the {@link IdpConfig.GoogleBuilder}
- * directly or {@link GoogleAuthProvider#PROVIDER_ID} if needed.
- */
- @Deprecated
- public static final String GOOGLE_PROVIDER = GoogleAuthProvider.PROVIDER_ID;
-
- /**
- * Provider identifier for Facebook, for use with {@link SignInIntentBuilder#setAvailableProviders(List)}.
- *
- * @deprecated this constant is no longer needed, use the {@link IdpConfig.FacebookBuilder}
- * directly or {@link FacebookAuthProvider#PROVIDER_ID} if needed.
- */
- @Deprecated
- public static final String FACEBOOK_PROVIDER = FacebookAuthProvider.PROVIDER_ID;
-
- /**
- * Provider identifier for Twitter, for use with {@link SignInIntentBuilder#setAvailableProviders(List)}.
- *
- * @deprecated this constant is no longer needed, use the {@link IdpConfig.TwitterBuilder}
- * directly or {@link TwitterAuthProvider#PROVIDER_ID} if needed.
- */
- @Deprecated
- public static final String TWITTER_PROVIDER = TwitterAuthProvider.PROVIDER_ID;
-
- /**
- * Provider identifier for Phone, for use with {@link SignInIntentBuilder#setAvailableProviders(List)}.
- *
- * @deprecated this constant is no longer needed, use the {@link IdpConfig.PhoneBuilder}
- * directly or {@link PhoneAuthProvider#PROVIDER_ID} if needed.
- */
- @Deprecated
- public static final String PHONE_VERIFICATION_PROVIDER = PhoneAuthProvider.PROVIDER_ID;
-
- /**
- * Bundle key for the default full phone number parameter.
- *
- * @deprecated this constant is no longer needed, use {@link IdpConfig.PhoneBuilder#setDefaultNumber(String)}
- * instead.
- */
- @Deprecated
- public static final String EXTRA_DEFAULT_PHONE_NUMBER = ExtraConstants.PHONE;
-
- /**
- * Bundle key for the default phone country code parameter.
- *
- * @deprecated this constant is no longer needed, use {@link IdpConfig.PhoneBuilder#setDefaultNumber(String,
- * String)} instead.
- */
- @Deprecated
- public static final String EXTRA_DEFAULT_COUNTRY_CODE = ExtraConstants.COUNTRY_ISO;
-
- /**
- * Bundle key for the default national phone number parameter.
- *
- * @deprecated this constant is no longer needed, use {@link IdpConfig.PhoneBuilder#setDefaultNumber(String,
- * String)} instead.
- */
- @Deprecated
- public static final String EXTRA_DEFAULT_NATIONAL_NUMBER = ExtraConstants.NATIONAL_NUMBER;
-
/**
* Default value for logo resource, omits the logo from the {@link AuthMethodPickerActivity}.
*/
@@ -209,7 +146,13 @@ public class AuthUI {
private AuthUI(FirebaseApp app) {
mApp = app;
- mAuth = FirebaseAuth.getInstance(mApp);
+
+ // TODO: This is a bad testing hack
+ if (sDefaultAuth != null) {
+ mAuth = sDefaultAuth;
+ } else {
+ mAuth = FirebaseAuth.getInstance(mApp);
+ }
try {
mAuth.setFirebaseUIVersion(BuildConfig.VERSION_NAME);
@@ -267,6 +210,85 @@ public static int getDefaultTheme() {
return R.style.FirebaseUI;
}
+ /**
+ * Signs the user in without any UI if possible. If this operation fails, you can safely start a
+ * UI-based sign-in flow knowing it is required.
+ *
+ * @param context requesting the user be signed in
+ * @param configs to use for silent sign in. Only Google and email are currently
+ * supported, the rest will be ignored.
+ * @return a task which indicates whether or not the user was successfully signed in.
+ */
+ @NonNull
+ public Task silentSignIn(@NonNull Context context,
+ @NonNull List configs) {
+ if (mAuth.getCurrentUser() != null) {
+ throw new IllegalArgumentException("User already signed in!");
+ }
+
+ final Context appContext = context.getApplicationContext();
+ final IdpConfig google =
+ ProviderUtils.getConfigFromIdps(configs, GoogleAuthProvider.PROVIDER_ID);
+ final IdpConfig email =
+ ProviderUtils.getConfigFromIdps(configs, EmailAuthProvider.PROVIDER_ID);
+
+ if (google == null && email == null) {
+ throw new IllegalArgumentException("No supported providers were supplied. " +
+ "Add either Google or email support.");
+ }
+
+ final GoogleSignInOptions googleOptions;
+ if (google == null) {
+ googleOptions = null;
+ } else {
+ GoogleSignInAccount last = GoogleSignIn.getLastSignedInAccount(appContext);
+ if (last != null && last.getIdToken() != null) {
+ return mAuth.signInWithCredential(GoogleAuthProvider.getCredential(
+ last.getIdToken(), null));
+ }
+
+ googleOptions = google.getParams()
+ .getParcelable(ExtraConstants.GOOGLE_SIGN_IN_OPTIONS);
+ }
+
+ return GoogleApiUtils.getCredentialsClient(context)
+ .request(new CredentialRequest.Builder()
+ // We can support both email and Google at the same time here because they
+ // are mutually exclusive. If a user signs in with Google, their email
+ // account will automatically be upgraded (a.k.a. replaced) with the Google
+ // one, meaning Smart Lock won't have to show the picker UI.
+ .setPasswordLoginSupported(email != null)
+ .setAccountTypes(google == null ? null :
+ ProviderUtils.providerIdToAccountType(GoogleAuthProvider.PROVIDER_ID))
+ .build())
+ .continueWithTask(new Continuation>() {
+ @Override
+ public Task then(@NonNull Task task) {
+ Credential credential = task.getResult().getCredential();
+ String email = credential.getId();
+ String password = credential.getPassword();
+
+ if (TextUtils.isEmpty(password)) {
+ return GoogleSignIn.getClient(appContext,
+ new GoogleSignInOptions.Builder(googleOptions)
+ .setAccountName(email)
+ .build())
+ .silentSignIn()
+ .continueWithTask(new Continuation>() {
+ @Override
+ public Task then(@NonNull Task task) {
+ AuthCredential authCredential = GoogleAuthProvider.getCredential(
+ task.getResult().getIdToken(), null);
+ return mAuth.signInWithCredential(authCredential);
+ }
+ });
+ } else {
+ return mAuth.signInWithEmailAndPassword(email, password);
+ }
+ }
+ });
+ }
+
/**
* Signs the current user out, if one is signed in.
*
@@ -368,10 +390,11 @@ public Task then(@NonNull Task task) {
}
private Task signOutIdps(@NonNull Context context) {
- if (FacebookSignInHandler.IS_AVAILABLE) {
+ if (ProviderAvailability.IS_FACEBOOK_AVAILABLE) {
LoginManager.getInstance().logOut();
}
- if (TwitterSignInHandler.IS_AVAILABLE) {
+ if (ProviderAvailability.IS_TWITTER_AVAILABLE) {
+ TwitterSignInHandler.initializeTwitter();
TwitterCore.getInstance().getSessionManager().clearActiveSession();
}
return GoogleSignIn.getClient(context, GoogleSignInOptions.DEFAULT_SIGN_IN).signOut();
@@ -417,7 +440,7 @@ public SignInIntentBuilder createSignInIntentBuilder() {
/**
* Configuration for an identity provider.
*/
- public static class IdpConfig implements Parcelable {
+ public static final class IdpConfig implements Parcelable {
public static final Creator CREATOR = new Creator() {
@Override
public IdpConfig createFromParcel(Parcel in) {
@@ -451,32 +474,6 @@ public String getProviderId() {
return mProviderId;
}
- /**
- * @deprecated use the lists of scopes you passed in directly, or get a provider-specific
- * implementation from {@link #getParams()}.
- */
- @Deprecated
- @NonNull
- public List getScopes() {
- List permissions;
- if (mProviderId.equals(GoogleAuthProvider.PROVIDER_ID)) {
- Scope[] array = ((GoogleSignInOptions)
- mParams.getParcelable(ExtraConstants.GOOGLE_SIGN_IN_OPTIONS))
- .getScopeArray();
-
- List scopes = new ArrayList<>();
- for (Scope scope : array) {
- scopes.add(scope.toString());
- }
- permissions = scopes;
- } else if (mProviderId.equals(FacebookAuthProvider.PROVIDER_ID)) {
- permissions = mParams.getStringArrayList(ExtraConstants.FACEBOOK_PERMISSIONS);
- } else {
- permissions = null;
- }
- return permissions == null ? Collections.emptyList() : permissions;
- }
-
/**
* @return provider-specific options
*/
@@ -528,16 +525,7 @@ public static class Builder {
@SupportedProvider private final String mProviderId;
private final Bundle mParams = new Bundle();
- /**
- * Builds the configuration parameters for an identity provider.
- *
- * @param providerId An ID of one of the supported identity providers. e.g. {@link
- * AuthUI#GOOGLE_PROVIDER}. See {@link AuthUI#SUPPORTED_PROVIDERS} for
- * the complete list of supported Identity providers
- * @deprecated use the provider's specific builder, for example, {@link GoogleBuilder}
- */
- @Deprecated
- public Builder(@SupportedProvider @NonNull String providerId) {
+ protected Builder(@SupportedProvider @NonNull String providerId) {
if (!SUPPORTED_PROVIDERS.contains(providerId)) {
throw new IllegalArgumentException("Unknown provider: " + providerId);
}
@@ -546,69 +534,13 @@ public Builder(@SupportedProvider @NonNull String providerId) {
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
@NonNull
- protected Bundle getParams() {
+ protected final Bundle getParams() {
return mParams;
}
- /**
- * @deprecated additional phone verification options are now available on the phone
- * builder: {@link PhoneBuilder#setDefaultNumber(String, String)}.
- */
- @NonNull
- @Deprecated
- public Builder setParams(@Nullable Bundle params) {
- mParams.clear();
- mParams.putAll(params == null ? new Bundle() : params);
- return this;
- }
-
- /**
- * Specifies the additional permissions that the application will request for this
- * identity provider.
- *
- * For Google permissions see:
- * https://developers.google.com/identity/protocols/googlescopes
- *
- * Twitter permissions are only configurable through the
- * Twitter developer console.
- *
- * @deprecated use the provider's specific builder. For Google, use {@link
- * GoogleBuilder#setScopes(List)}. For Facebook, use {@link FacebookBuilder#setPermissions(List)}.
- */
- @NonNull
- @Deprecated
- public Builder setPermissions(@Nullable List permissions) {
- if (permissions == null) {
- mParams.clear();
- return this;
- }
-
- Bundle params;
- if (mProviderId.equals(GOOGLE_PROVIDER)) {
- params = new GoogleBuilder().setScopes(permissions).build().getParams();
- } else if (mProviderId.equals(FACEBOOK_PROVIDER)) {
- params = new FacebookBuilder().setPermissions(permissions).build().getParams();
- } else {
- params = new Bundle();
- }
- setParams(params);
- return this;
- }
-
@CallSuper
@NonNull
public IdpConfig build() {
- // Ensures deprecated Google provider builder backcompat
- if (mProviderId.equals(GoogleAuthProvider.PROVIDER_ID)
- && getClass() == Builder.class
- && mParams.isEmpty()) {
- return new GoogleBuilder().build();
- }
-
return new IdpConfig(mProviderId, mParams);
}
}
@@ -618,7 +550,6 @@ && getClass() == Builder.class
*/
public static final class EmailBuilder extends Builder {
public EmailBuilder() {
- //noinspection deprecation taking a hit for the backcompat team
super(EmailAuthProvider.PROVIDER_ID);
}
@@ -651,7 +582,6 @@ public EmailBuilder setRequireName(boolean requireName) {
*/
public static final class PhoneBuilder extends Builder {
public PhoneBuilder() {
- //noinspection deprecation taking a hit for the backcompat team
super(PhoneAuthProvider.PROVIDER_ID);
}
@@ -724,7 +654,6 @@ public PhoneBuilder setDefaultCountryIso(@NonNull String iso) {
*/
public static final class GoogleBuilder extends Builder {
public GoogleBuilder() {
- //noinspection deprecation taking a hit for the backcompat team
super(GoogleAuthProvider.PROVIDER_ID);
Preconditions.checkConfigured(getApplicationContext(),
"Check your google-services plugin configuration, the" +
@@ -788,9 +717,8 @@ public static final class FacebookBuilder extends Builder {
private static final String TAG = "FacebookBuilder";
public FacebookBuilder() {
- //noinspection deprecation taking a hit for the backcompat team
super(FacebookAuthProvider.PROVIDER_ID);
- if (!FacebookSignInHandler.IS_AVAILABLE) {
+ if (!ProviderAvailability.IS_FACEBOOK_AVAILABLE) {
throw new RuntimeException(
"Facebook provider cannot be configured " +
"without dependency. Did you forget to add " +
@@ -812,7 +740,6 @@ public FacebookBuilder() {
* Facebook Login SDK. Available permissions can be found here.
*/
- @SuppressWarnings({"deprecation", "NullableProblems"}) // For backcompat
@NonNull
public FacebookBuilder setPermissions(@NonNull List permissions) {
getParams().putStringArrayList(
@@ -826,9 +753,8 @@ public FacebookBuilder setPermissions(@NonNull List permissions) {
*/
public static final class TwitterBuilder extends Builder {
public TwitterBuilder() {
- //noinspection deprecation taking a hit for the backcompat team
super(TwitterAuthProvider.PROVIDER_ID);
- if (!TwitterSignInHandler.IS_AVAILABLE) {
+ if (!ProviderAvailability.IS_TWITTER_AVAILABLE) {
throw new RuntimeException(
"Twitter provider cannot be configured " +
"without dependency. Did you forget to add " +
@@ -857,8 +783,6 @@ private abstract class AuthIntentBuilder {
boolean mEnableCredentials = true;
boolean mEnableHints = true;
- private AuthIntentBuilder() {}
-
/**
* Specifies the theme to use for the application flow. If no theme is specified, a default
* theme will be used.
@@ -928,34 +852,6 @@ public T setAvailableProviders(@NonNull List idpConfigs) {
return (T) this;
}
- /**
- * Specified the set of supported authentication providers. At least one provider must be
- * specified. There may only be one instance of each provider.
- *
- *
If no providers are explicitly specified by calling this method, then the email
- * provider is the default supported provider.
- *
- * @param idpConfigs a list of {@link IdpConfig}s, where each {@link IdpConfig} contains the
- * configuration parameters for the IDP.
- * @see IdpConfig
- * @deprecated because the order in which providers were displayed was the inverse of the
- * order in which they were supplied. Use {@link #setAvailableProviders(List)} to display
- * the providers in the order in which they were supplied.
- */
- @Deprecated
- public T setProviders(@NonNull List idpConfigs) {
- setAvailableProviders(idpConfigs);
-
- // Ensure email provider is at the bottom to keep backwards compatibility
- int emailProviderIndex = mProviders.indexOf(new IdpConfig.Builder(EMAIL_PROVIDER).build());
- if (emailProviderIndex != -1) {
- mProviders.add(0, mProviders.remove(emailProviderIndex));
- }
- Collections.reverse(mProviders);
-
- return (T) this;
- }
-
/**
* Enables or disables the use of Smart Lock for Passwords in the sign in flow. To
* (en)disable hint selector and credential selector independently use {@link
@@ -1003,45 +899,10 @@ public Intent build() {
* Builder for the intent to start the user authentication flow.
*/
public final class SignInIntentBuilder extends AuthIntentBuilder {
- private Boolean mAllowNewEmailAccounts;
-
private SignInIntentBuilder() {
super();
}
- /**
- * Enables or disables creating new accounts in the email sign in flow.
- *
- *
Account creation is enabled by default.
- *
- * @deprecated set this option directly on the email builder: {@link
- * IdpConfig.EmailBuilder#setAllowNewAccounts(boolean)}.
- */
- @NonNull
- @Deprecated
- public SignInIntentBuilder setAllowNewEmailAccounts(boolean enabled) {
- mAllowNewEmailAccounts = enabled;
- return this;
- }
-
- @NonNull
- @Override
- public Intent build() {
- if (mAllowNewEmailAccounts != null) {
- // To ensure setAllowNewEmailAccounts backcompat
- for (int i = 0; i < mProviders.size(); i++) {
- if (mProviders.get(i).getProviderId().equals(EmailAuthProvider.PROVIDER_ID)) {
- mProviders.set(i, new IdpConfig.EmailBuilder()
- .setAllowNewAccounts(mAllowNewEmailAccounts)
- .build());
- break;
- }
- }
- }
-
- return super.build();
- }
-
@Override
protected FlowParameters getFlowParams() {
return new FlowParameters(
diff --git a/auth/src/main/java/com/firebase/ui/auth/IdpResponse.java b/auth/src/main/java/com/firebase/ui/auth/IdpResponse.java
index 83e8fcb5b..509eed06e 100644
--- a/auth/src/main/java/com/firebase/ui/auth/IdpResponse.java
+++ b/auth/src/main/java/com/firebase/ui/auth/IdpResponse.java
@@ -14,7 +14,6 @@
package com.firebase.ui.auth;
-import android.app.Activity;
import android.content.Intent;
import android.os.Parcel;
import android.os.Parcelable;
@@ -172,20 +171,6 @@ public String getIdpSecret() {
return mSecret;
}
- /**
- * Get the error code for a failed sign in
- *
- * @deprecated use {@link #getError()} instead
- */
- @Deprecated
- public int getErrorCode() {
- if (isSuccessful()) {
- return Activity.RESULT_OK;
- } else {
- return mException.getErrorCode();
- }
- }
-
/**
* Get the error for a failed sign in.
*/
diff --git a/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java b/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java
index d91a22dc0..27438e7c3 100644
--- a/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java
+++ b/auth/src/main/java/com/firebase/ui/auth/KickoffActivity.java
@@ -12,14 +12,14 @@
import com.firebase.ui.auth.data.model.FlowParameters;
import com.firebase.ui.auth.data.model.UserCancellationException;
import com.firebase.ui.auth.data.remote.SignInKickstarter;
-import com.firebase.ui.auth.ui.HelperActivityBase;
+import com.firebase.ui.auth.ui.InvisibleActivityBase;
import com.firebase.ui.auth.viewmodel.ResourceObserver;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class KickoffActivity extends HelperActivityBase {
+public class KickoffActivity extends InvisibleActivityBase {
private SignInKickstarter mKickstarter;
public static Intent createIntent(Context context, FlowParameters flowParams) {
@@ -31,8 +31,7 @@ protected void onCreate(@Nullable final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mKickstarter = ViewModelProviders.of(this).get(SignInKickstarter.class);
mKickstarter.init(getFlowParams());
- mKickstarter.getOperation().observe(this, new ResourceObserver(
- this, R.string.fui_progress_dialog_loading) {
+ mKickstarter.getOperation().observe(this, new ResourceObserver(this) {
@Override
protected void onSuccess(@NonNull IdpResponse response) {
finish(RESULT_OK, response.toIntent());
diff --git a/auth/src/main/java/com/firebase/ui/auth/ResultCodes.java b/auth/src/main/java/com/firebase/ui/auth/ResultCodes.java
deleted file mode 100644
index 0b3522be9..000000000
--- a/auth/src/main/java/com/firebase/ui/auth/ResultCodes.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package com.firebase.ui.auth;
-
-import android.app.Activity;
-
-/**
- * Result codes returned when using {@link AuthUI.SignInIntentBuilder#build()} with {@code
- * startActivityForResult}.
- *
- * @deprecated Check for {@link Activity#RESULT_OK} and {@link Activity#RESULT_CANCELED} instead.
- */
-@Deprecated
-public final class ResultCodes {
- /**
- * Sign in succeeded
- **/
- public static final int OK = Activity.RESULT_OK;
-
- /**
- * Sign in canceled by user
- **/
- public static final int CANCELED = Activity.RESULT_CANCELED;
-
- private ResultCodes() {
- // no instance
- }
-}
diff --git a/auth/src/main/java/com/firebase/ui/auth/data/model/CountryInfo.java b/auth/src/main/java/com/firebase/ui/auth/data/model/CountryInfo.java
index a731c788c..a834e5bae 100644
--- a/auth/src/main/java/com/firebase/ui/auth/data/model/CountryInfo.java
+++ b/auth/src/main/java/com/firebase/ui/auth/data/model/CountryInfo.java
@@ -18,13 +18,28 @@
*/
package com.firebase.ui.auth.data.model;
+import android.os.Parcel;
+import android.os.Parcelable;
import android.support.annotation.RestrictTo;
import java.text.Collator;
import java.util.Locale;
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public final class CountryInfo implements Comparable {
+public final class CountryInfo implements Comparable, Parcelable {
+
+ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
+ @Override
+ public CountryInfo createFromParcel(Parcel source) {
+ return new CountryInfo(source);
+ }
+
+ @Override
+ public CountryInfo[] newArray(int size) {
+ return new CountryInfo[size];
+ }
+ };
+
private final Collator mCollator;
private final Locale mLocale;
private final int mCountryCode;
@@ -36,6 +51,14 @@ public CountryInfo(Locale locale, int countryCode) {
mCountryCode = countryCode;
}
+ protected CountryInfo(Parcel in) {
+ mCollator = Collator.getInstance(Locale.getDefault());
+ mCollator.setStrength(Collator.PRIMARY);
+
+ mLocale = (Locale) in.readSerializable();
+ mCountryCode = in.readInt();
+ }
+
public static String localeToEmoji(Locale locale) {
String countryCode = locale.getCountry();
// 0x41 is Letter A
@@ -85,4 +108,15 @@ public String toString() {
public int compareTo(CountryInfo info) {
return mCollator.compare(mLocale.getDisplayCountry(), info.mLocale.getDisplayCountry());
}
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeSerializable(mLocale);
+ dest.writeInt(mCountryCode);
+ }
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/data/model/FlowParameters.java b/auth/src/main/java/com/firebase/ui/auth/data/model/FlowParameters.java
index 6593c00fd..be4063b69 100644
--- a/auth/src/main/java/com/firebase/ui/auth/data/model/FlowParameters.java
+++ b/auth/src/main/java/com/firebase/ui/auth/data/model/FlowParameters.java
@@ -21,6 +21,7 @@
import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
import android.support.annotation.StyleRes;
+import android.text.TextUtils;
import com.firebase.ui.auth.AuthUI.IdpConfig;
import com.firebase.ui.auth.util.ExtraConstants;
@@ -128,4 +129,16 @@ public FlowParameters[] newArray(int size) {
return new FlowParameters[size];
}
};
+
+ public boolean isSingleProviderFlow() {
+ return providerInfo.size() == 1;
+ }
+
+ public boolean isTermsOfServiceUrlProvided() {
+ return !TextUtils.isEmpty(termsOfServiceUrl);
+ }
+
+ public boolean isPrivacyPolicyUrlProvided() {
+ return !TextUtils.isEmpty(privacyPolicyUrl);
+ }
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/data/remote/FacebookSignInHandler.java b/auth/src/main/java/com/firebase/ui/auth/data/remote/FacebookSignInHandler.java
index 8108dfa1d..5e2d0f366 100644
--- a/auth/src/main/java/com/firebase/ui/auth/data/remote/FacebookSignInHandler.java
+++ b/auth/src/main/java/com/firebase/ui/auth/data/remote/FacebookSignInHandler.java
@@ -37,19 +37,6 @@
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class FacebookSignInHandler extends ProviderSignInBase {
- public static final boolean IS_AVAILABLE;
-
- static {
- boolean available;
- try {
- Class.forName("com.facebook.login.LoginManager");
- available = true;
- } catch (ClassNotFoundException e) {
- available = false;
- }
- IS_AVAILABLE = available;
- }
-
private static final String EMAIL = "email";
private static final String PUBLIC_PROFILE = "public_profile";
diff --git a/auth/src/main/java/com/firebase/ui/auth/data/remote/SignInKickstarter.java b/auth/src/main/java/com/firebase/ui/auth/data/remote/SignInKickstarter.java
index 63023c3bf..e8925c76a 100644
--- a/auth/src/main/java/com/firebase/ui/auth/data/remote/SignInKickstarter.java
+++ b/auth/src/main/java/com/firebase/ui/auth/data/remote/SignInKickstarter.java
@@ -91,11 +91,9 @@ public void onComplete(@NonNull Task task) {
}
private void startAuthMethodChoice() {
- List idpConfigs = getArguments().providerInfo;
-
// If there is only one provider selected, launch the flow directly
- if (idpConfigs.size() == 1) {
- AuthUI.IdpConfig firstIdpConfig = idpConfigs.get(0);
+ if (getArguments().isSingleProviderFlow()) {
+ AuthUI.IdpConfig firstIdpConfig = getArguments().providerInfo.get(0);
String firstProvider = firstIdpConfig.getProviderId();
switch (firstProvider) {
case EmailAuthProvider.PROVIDER_ID:
diff --git a/auth/src/main/java/com/firebase/ui/auth/data/remote/TwitterSignInHandler.java b/auth/src/main/java/com/firebase/ui/auth/data/remote/TwitterSignInHandler.java
index 78b84f6bb..b64e09c5f 100644
--- a/auth/src/main/java/com/firebase/ui/auth/data/remote/TwitterSignInHandler.java
+++ b/auth/src/main/java/com/firebase/ui/auth/data/remote/TwitterSignInHandler.java
@@ -16,6 +16,7 @@
import com.firebase.ui.auth.data.model.Resource;
import com.firebase.ui.auth.data.model.User;
import com.firebase.ui.auth.ui.HelperActivityBase;
+import com.firebase.ui.auth.util.data.ProviderAvailability;
import com.firebase.ui.auth.viewmodel.idp.ProviderSignInBase;
import com.google.firebase.auth.TwitterAuthProvider;
import com.twitter.sdk.android.core.Callback;
@@ -30,19 +31,8 @@
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class TwitterSignInHandler extends ProviderSignInBase {
- public static final boolean IS_AVAILABLE;
-
static {
- boolean available;
- try {
- Class.forName("com.twitter.sdk.android.core.identity.TwitterAuthClient");
- available = true;
- } catch (ClassNotFoundException e) {
- available = false;
- }
- IS_AVAILABLE = available;
-
- if (IS_AVAILABLE) {
+ if (ProviderAvailability.IS_TWITTER_AVAILABLE) {
Context context = AuthUI.getApplicationContext();
Twitter.initialize(new TwitterConfig.Builder(context)
.twitterAuthConfig(new TwitterAuthConfig(
@@ -60,6 +50,14 @@ public TwitterSignInHandler(Application application) {
mClient = new TwitterAuthClient();
}
+ public static void initializeTwitter() {
+ // This method is intentionally empty, but calling it forces the static {} block of this
+ // class to be executed (if it wasn't already).
+ //
+ // Even though it's currently safe to initialize Twitter more than once, this protects
+ // against a future behavior change and gives a small efficiency gain.
+ }
+
private static IdpResponse createIdpResponse(
TwitterSession session, String email, String name, Uri photoUri) {
return new IdpResponse.Builder(
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java
index 208ca31fc..3247b66df 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/FragmentBase.java
@@ -11,7 +11,7 @@
import com.google.firebase.auth.FirebaseUser;
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class FragmentBase extends Fragment {
+public class FragmentBase extends Fragment implements ProgressView {
private HelperActivityBase mActivity;
private ProgressDialogHolder mProgressDialogHolder;
@@ -44,4 +44,14 @@ public void startSaveCredentials(
@Nullable String password) {
mActivity.startSaveCredentials(firebaseUser, response, password);
}
+
+ @Override
+ public void showProgress(int message) {
+ mActivity.showProgress(message);
+ }
+
+ @Override
+ public void hideProgress() {
+ mActivity.hideProgress();
+ }
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java
index 28ef4949f..f87a0153e 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/HelperActivityBase.java
@@ -7,6 +7,7 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RestrictTo;
+import android.support.annotation.StringRes;
import android.support.v7.app.AppCompatActivity;
import com.firebase.ui.auth.IdpResponse;
@@ -24,7 +25,7 @@
@SuppressWarnings("Registered")
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class HelperActivityBase extends AppCompatActivity {
+public class HelperActivityBase extends AppCompatActivity implements ProgressView {
private FlowParameters mParams;
private AuthHelper mAuthHelper;
@@ -74,10 +75,6 @@ public AuthHelper getAuthHelper() {
return mAuthHelper;
}
- public ProgressDialogHolder getDialogHolder() {
- return mProgressDialogHolder;
- }
-
public void finish(int resultCode, @Nullable Intent intent) {
setResult(resultCode, intent);
finish();
@@ -97,4 +94,18 @@ public void startSaveCredentials(
this, getFlowParams(), credential, response);
startActivityForResult(intent, RequestCodes.CRED_SAVE_FLOW);
}
+
+ @Override
+ public void showProgress(@StringRes int message) {
+ getDialogHolder().showLoadingDialog(message);
+ }
+
+ @Override
+ public void hideProgress() {
+ getDialogHolder().dismissDialog();
+ }
+
+ protected ProgressDialogHolder getDialogHolder() {
+ return mProgressDialogHolder;
+ }
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/InvisibleActivityBase.java b/auth/src/main/java/com/firebase/ui/auth/ui/InvisibleActivityBase.java
new file mode 100644
index 000000000..f4ba884e3
--- /dev/null
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/InvisibleActivityBase.java
@@ -0,0 +1,104 @@
+package com.firebase.ui.auth.ui;
+
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+import android.view.ContextThemeWrapper;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.FrameLayout;
+
+import com.firebase.ui.auth.R;
+
+import me.zhanghai.android.materialprogressbar.MaterialProgressBar;
+
+/**
+ * Base classes for activities that are just simple overlays.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class InvisibleActivityBase extends HelperActivityBase {
+
+ // Minimum time that the spinner will stay on screen, once it is shown.
+ private static final long MIN_SPINNER_MS = 750;
+
+ private Handler mHandler = new Handler();
+ private MaterialProgressBar mProgressBar;
+
+ // Last time that the progress bar was actually shown
+ private long mLastShownTime = 0;
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.fui_activity_invisible);
+
+ // Create an indeterminate, circular progress bar in the app's theme
+ mProgressBar = new MaterialProgressBar(new ContextThemeWrapper(this, getFlowParams().themeId));
+ mProgressBar.setIndeterminate(true);
+ mProgressBar.setVisibility(View.GONE);
+
+ // Set bar to float in the center
+ FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
+ params.gravity = Gravity.CENTER;
+
+ // Add to the container
+ FrameLayout container = findViewById(R.id.invisible_frame);
+ container.addView(mProgressBar, params);
+ }
+
+ @Override
+ public void showProgress(int message) {
+ if (mProgressBar.getVisibility() == View.VISIBLE) {
+ mHandler.removeCallbacksAndMessages(null);
+ return;
+ }
+
+ mLastShownTime = System.currentTimeMillis();
+ mProgressBar.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void hideProgress() {
+ doAfterTimeout(new Runnable() {
+ @Override
+ public void run() {
+ mLastShownTime = 0;
+ mProgressBar.setVisibility(View.GONE);
+ }
+ });
+ }
+
+ @Override
+ public void finish(int resultCode, @Nullable Intent intent) {
+ setResult(resultCode, intent);
+ doAfterTimeout(new Runnable() {
+ @Override
+ public void run() {
+ finish();
+ }
+ });
+ }
+
+ /**
+ * For certain actions (like finishing or hiding the progress dialog) we want to make sure
+ * that we have shown the progress state for at least MIN_SPINNER_MS to prevent flickering.
+ *
+ * This method performs some action after the window has passed, or immediately if we have
+ * already waited longer than that.
+ */
+ private void doAfterTimeout(Runnable runnable) {
+ long currentTime = System.currentTimeMillis();
+ long diff = currentTime - mLastShownTime;
+
+ // 'diff' is how long it's been since we showed the spinner, so in the
+ // case where diff is greater than our minimum spinner duration then our
+ // remaining wait time is 0.
+ long remaining = Math.max(MIN_SPINNER_MS - diff, 0);
+
+ mHandler.postDelayed(runnable, remaining);
+ }
+}
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/ProgressDialogHolder.java b/auth/src/main/java/com/firebase/ui/auth/ui/ProgressDialogHolder.java
index 1b6ff9d8e..c4d7d4e83 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/ProgressDialogHolder.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/ProgressDialogHolder.java
@@ -18,7 +18,6 @@ public ProgressDialogHolder(Context context) {
private void showLoadingDialog(String message) {
dismissDialog();
-
if (mProgressDialog == null) {
mProgressDialog = new ProgressDialog(mContext);
mProgressDialog.setIndeterminate(true);
@@ -34,10 +33,11 @@ public void showLoadingDialog(@StringRes int stringResource) {
}
public void dismissDialog() {
- if (mProgressDialog != null) {
+ if (isProgressDialogShowing()) {
mProgressDialog.dismiss();
- mProgressDialog = null;
}
+
+ mProgressDialog = null;
}
public boolean isProgressDialogShowing() {
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/ProgressView.java b/auth/src/main/java/com/firebase/ui/auth/ui/ProgressView.java
new file mode 100644
index 000000000..ba5dd96ae
--- /dev/null
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/ProgressView.java
@@ -0,0 +1,16 @@
+package com.firebase.ui.auth.ui;
+
+import android.support.annotation.RestrictTo;
+import android.support.annotation.StringRes;
+
+/**
+ * View (Activity or Fragment, normally) that can respond to progress events.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public interface ProgressView {
+
+ void showProgress(@StringRes int message);
+
+ void hideProgress();
+
+}
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/credentials/CredentialSaveActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/credentials/CredentialSaveActivity.java
index 2a359c44a..ef6258cba 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/credentials/CredentialSaveActivity.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/credentials/CredentialSaveActivity.java
@@ -9,10 +9,9 @@
import android.util.Log;
import com.firebase.ui.auth.IdpResponse;
-import com.firebase.ui.auth.R;
import com.firebase.ui.auth.data.model.FlowParameters;
import com.firebase.ui.auth.data.model.Resource;
-import com.firebase.ui.auth.ui.HelperActivityBase;
+import com.firebase.ui.auth.ui.InvisibleActivityBase;
import com.firebase.ui.auth.util.ExtraConstants;
import com.firebase.ui.auth.viewmodel.ResourceObserver;
import com.firebase.ui.auth.viewmodel.smartlock.SmartLockHandler;
@@ -21,7 +20,7 @@
/**
* Invisible Activity used for saving credentials to SmartLock.
*/
-public class CredentialSaveActivity extends HelperActivityBase {
+public class CredentialSaveActivity extends InvisibleActivityBase {
private static final String TAG = "CredentialSaveActivity";
private SmartLockHandler mHandler;
@@ -47,8 +46,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
mHandler.init(getFlowParams());
mHandler.setResponse(response);
- mHandler.getOperation().observe(this, new ResourceObserver(
- this, R.string.fui_progress_dialog_loading) {
+ mHandler.getOperation().observe(this, new ResourceObserver(this) {
@Override
protected void onSuccess(@NonNull IdpResponse response) {
finish(RESULT_OK, response.toIntent());
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java
index 42de36f32..3002f7be5 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/CheckEmailFragment.java
@@ -12,12 +12,17 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
import android.widget.EditText;
+import android.widget.ProgressBar;
+import android.widget.TextView;
import com.firebase.ui.auth.R;
+import com.firebase.ui.auth.data.model.FlowParameters;
import com.firebase.ui.auth.data.model.User;
import com.firebase.ui.auth.ui.FragmentBase;
import com.firebase.ui.auth.util.ExtraConstants;
+import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
import com.firebase.ui.auth.util.ui.ImeHelper;
import com.firebase.ui.auth.util.ui.fieldvalidators.EmailFieldValidator;
import com.firebase.ui.auth.viewmodel.ResourceObserver;
@@ -59,6 +64,9 @@ interface CheckEmailListener {
private CheckEmailHandler mHandler;
+ private Button mNextButton;
+ private ProgressBar mProgressBar;
+
private EditText mEmailEditText;
private TextInputLayout mEmailLayout;
@@ -82,6 +90,9 @@ public View onCreateView(@NonNull LayoutInflater inflater,
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ mNextButton = view.findViewById(R.id.button_next);
+ mProgressBar = view.findViewById(R.id.top_progress_bar);
+
// Email field and validator
mEmailLayout = view.findViewById(R.id.email_layout);
mEmailEditText = view.findViewById(R.id.email);
@@ -95,7 +106,22 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
mEmailEditText.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);
}
- view.findViewById(R.id.button_next).setOnClickListener(this);
+ mNextButton.setOnClickListener(this);
+
+ TextView termsText = view.findViewById(R.id.email_tos_and_pp_text);
+ TextView footerText = view.findViewById(R.id.email_footer_tos_and_pp_text);
+ FlowParameters flowParameters = getFlowParams();
+
+ if (flowParameters.isSingleProviderFlow()) {
+ PrivacyDisclosureUtils.setupTermsOfServiceAndPrivacyPolicyText(getContext(),
+ flowParameters,
+ termsText);
+ } else {
+ termsText.setVisibility(View.GONE);
+ PrivacyDisclosureUtils.setupTermsOfServiceFooter(getContext(),
+ flowParameters,
+ footerText);
+ }
}
@Override
@@ -175,4 +201,16 @@ private void validateAndProceed() {
mHandler.fetchProvider(email);
}
}
+
+ @Override
+ public void showProgress(int message) {
+ mNextButton.setEnabled(false);
+ mProgressBar.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void hideProgress() {
+ mNextButton.setEnabled(true);
+ mProgressBar.setVisibility(View.INVISIBLE);
+ }
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java
index c7c90895e..590ca1928 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RecoverPasswordActivity.java
@@ -26,11 +26,13 @@
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.widget.EditText;
+import android.widget.TextView;
import com.firebase.ui.auth.R;
import com.firebase.ui.auth.data.model.FlowParameters;
import com.firebase.ui.auth.ui.AppCompatBase;
import com.firebase.ui.auth.util.ExtraConstants;
+import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
import com.firebase.ui.auth.util.ui.ImeHelper;
import com.firebase.ui.auth.util.ui.fieldvalidators.EmailFieldValidator;
import com.firebase.ui.auth.viewmodel.ResourceObserver;
@@ -94,6 +96,9 @@ protected void onFailure(@NonNull Exception e) {
ImeHelper.setImeOnDoneListener(mEmailEditText, this);
findViewById(R.id.button_done).setOnClickListener(this);
+
+ TextView footerText = findViewById(R.id.email_footer_tos_and_pp_text);
+ PrivacyDisclosureUtils.setupTermsOfServiceFooter(this, getFlowParams(), footerText);
}
@Override
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java
index ffbeeb38b..03188f2b0 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/RegisterEmailFragment.java
@@ -11,7 +11,9 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
import android.widget.EditText;
+import android.widget.ProgressBar;
import android.widget.TextView;
import com.firebase.ui.auth.AuthUI;
@@ -20,9 +22,9 @@
import com.firebase.ui.auth.data.model.User;
import com.firebase.ui.auth.ui.FragmentBase;
import com.firebase.ui.auth.util.ExtraConstants;
+import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
import com.firebase.ui.auth.util.data.ProviderUtils;
import com.firebase.ui.auth.util.ui.ImeHelper;
-import com.firebase.ui.auth.util.ui.PreambleHandler;
import com.firebase.ui.auth.util.ui.fieldvalidators.BaseValidator;
import com.firebase.ui.auth.util.ui.fieldvalidators.EmailFieldValidator;
import com.firebase.ui.auth.util.ui.fieldvalidators.NoOpValidator;
@@ -44,6 +46,9 @@ public class RegisterEmailFragment extends FragmentBase implements
private EmailProviderResponseHandler mHandler;
+ private Button mNextButton;
+ private ProgressBar mProgressBar;
+
private EditText mEmailEditText;
private EditText mNameEditText;
private EditText mPasswordEditText;
@@ -80,7 +85,9 @@ public void onCreate(@Nullable Bundle savedInstanceState) {
@Override
protected void onSuccess(@NonNull IdpResponse response) {
startSaveCredentials(
- mHandler.getCurrentUser(), response, mPasswordEditText.getText().toString());
+ mHandler.getCurrentUser(),
+ response,
+ mPasswordEditText.getText().toString());
}
@Override
@@ -110,6 +117,9 @@ public View onCreateView(@NonNull LayoutInflater inflater,
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ mNextButton = view.findViewById(R.id.button_create);
+ mProgressBar = view.findViewById(R.id.top_progress_bar);
+
mEmailEditText = view.findViewById(R.id.email);
mNameEditText = view.findViewById(R.id.name);
mPasswordEditText = view.findViewById(R.id.password);
@@ -135,21 +145,22 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
mEmailEditText.setOnFocusChangeListener(this);
mNameEditText.setOnFocusChangeListener(this);
mPasswordEditText.setOnFocusChangeListener(this);
- view.findViewById(R.id.button_create).setOnClickListener(this);
+ mNextButton.setOnClickListener(this);
// Only show the name field if required
nameInput.setVisibility(requireName ? View.VISIBLE : View.GONE);
- PreambleHandler.setup(
- getContext(),
- getFlowParams(),
- R.string.fui_button_text_save,
- view.findViewById(R.id.create_account_text));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && getFlowParams().enableCredentials) {
mEmailEditText.setImportantForAutofill(View.IMPORTANT_FOR_AUTOFILL_NO);
}
- if (savedInstanceState != null) { return; }
+ TextView footerText = view.findViewById(R.id.email_footer_tos_and_pp_text);
+ PrivacyDisclosureUtils.setupTermsOfServiceFooter(getContext(), getFlowParams(), footerText);
+
+ // WARNING: Nothing below this line will be executed on rotation
+ if (savedInstanceState != null) {
+ return;
+ }
// If email is passed in, fill in the field and move down to the name field.
String email = mUser.getEmail();
@@ -223,6 +234,18 @@ public void onDonePressed() {
validateAndRegisterUser();
}
+ @Override
+ public void showProgress(int message) {
+ mNextButton.setEnabled(false);
+ mProgressBar.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void hideProgress() {
+ mNextButton.setEnabled(true);
+ mProgressBar.setVisibility(View.INVISIBLE);
+ }
+
private void validateAndRegisterUser() {
String email = mEmailEditText.getText().toString();
String password = mPasswordEditText.getText().toString();
@@ -233,11 +256,11 @@ private void validateAndRegisterUser() {
boolean nameValid = mNameValidator.validate(name);
if (emailValid && passwordValid && nameValid) {
mHandler.startSignIn(new IdpResponse.Builder(
- new User.Builder(EmailAuthProvider.PROVIDER_ID, email)
- .setName(name)
- .setPhotoUri(mUser.getPhotoUri())
- .build())
- .build(),
+ new User.Builder(EmailAuthProvider.PROVIDER_ID, email)
+ .setName(name)
+ .setPhotoUri(mUser.getPhotoUri())
+ .build())
+ .build(),
password);
}
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPrompt.java
index ebac08959..2c2ace31e 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPrompt.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/email/WelcomeBackPasswordPrompt.java
@@ -30,7 +30,9 @@
import android.text.style.StyleSpan;
import android.view.View;
import android.view.WindowManager;
+import android.widget.Button;
import android.widget.EditText;
+import android.widget.ProgressBar;
import android.widget.TextView;
import com.firebase.ui.auth.IdpResponse;
@@ -38,6 +40,7 @@
import com.firebase.ui.auth.data.model.FlowParameters;
import com.firebase.ui.auth.ui.AppCompatBase;
import com.firebase.ui.auth.util.ExtraConstants;
+import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
import com.firebase.ui.auth.util.data.ProviderUtils;
import com.firebase.ui.auth.util.ui.ImeHelper;
import com.firebase.ui.auth.viewmodel.ResourceObserver;
@@ -55,6 +58,8 @@ public class WelcomeBackPasswordPrompt extends AppCompatBase
private IdpResponse mIdpResponse;
private WelcomeBackPasswordHandler mHandler;
+ private Button mDoneButton;
+ private ProgressBar mProgressBar;
private TextInputLayout mPasswordLayout;
private EditText mPasswordField;
@@ -75,6 +80,8 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
mIdpResponse = IdpResponse.fromResultIntent(getIntent());
String email = mIdpResponse.getEmail();
+ mDoneButton = findViewById(R.id.button_done);
+ mProgressBar = findViewById(R.id.top_progress_bar);
mPasswordLayout = findViewById(R.id.password_layout);
mPasswordField = findViewById(R.id.password);
@@ -95,7 +102,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
bodyTextView.setText(spannableStringBuilder);
// Click listeners
- findViewById(R.id.button_done).setOnClickListener(this);
+ mDoneButton.setOnClickListener(this);
findViewById(R.id.trouble_signing_in).setOnClickListener(this);
// Initialize ViewModel with arguments
@@ -116,6 +123,9 @@ protected void onFailure(@NonNull Exception e) {
mPasswordLayout.setError(getString(getErrorMessage(e)));
}
});
+
+ TextView footerText = findViewById(R.id.email_footer_tos_and_pp_text);
+ PrivacyDisclosureUtils.setupTermsOfServiceFooter(this, getFlowParams(), footerText);
}
@StringRes
@@ -165,4 +175,16 @@ public void onClick(View view) {
onForgotPasswordClicked();
}
}
+
+ @Override
+ public void showProgress(int message) {
+ mDoneButton.setEnabled(false);
+ mProgressBar.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void hideProgress() {
+ mDoneButton.setEnabled(true);
+ mProgressBar.setVisibility(View.INVISIBLE);
+ }
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java
index 66488dda1..48e15cfe2 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/AuthMethodPickerActivity.java
@@ -28,6 +28,8 @@
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
+import android.widget.ProgressBar;
+import android.widget.TextView;
import android.widget.Toast;
import com.firebase.ui.auth.AuthUI;
@@ -42,6 +44,7 @@
import com.firebase.ui.auth.data.remote.PhoneSignInHandler;
import com.firebase.ui.auth.data.remote.TwitterSignInHandler;
import com.firebase.ui.auth.ui.AppCompatBase;
+import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
import com.firebase.ui.auth.viewmodel.ResourceObserver;
import com.firebase.ui.auth.viewmodel.idp.ProviderSignInBase;
import com.firebase.ui.auth.viewmodel.idp.SocialProviderResponseHandler;
@@ -57,9 +60,13 @@
/** Presents the list of authentication options for this app to the user. */
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class AuthMethodPickerActivity extends AppCompatBase {
+
private SocialProviderResponseHandler mHandler;
private List> mProviders;
+ private ProgressBar mProgressBar;
+ private ViewGroup mProviderHolder;
+
public static Intent createIntent(Context context, FlowParameters flowParams) {
return createBaseIntent(context, AuthMethodPickerActivity.class, flowParams);
}
@@ -69,6 +76,9 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fui_auth_method_picker_layout);
+ mProgressBar = findViewById(R.id.top_progress_bar);
+ mProviderHolder = findViewById(R.id.btn_holder);
+
FlowParameters params = getFlowParams();
mHandler = ViewModelProviders.of(this).get(SocialProviderResponseHandler.class);
mHandler.init(params);
@@ -106,18 +116,24 @@ protected void onFailure(@NonNull Exception e) {
}
}
});
+
+ TextView termsText = findViewById(R.id.main_tos_and_pp);
+ PrivacyDisclosureUtils.setupTermsOfServiceAndPrivacyPolicyText(this,
+ getFlowParams(),
+ termsText);
}
private void populateIdpList(List providerConfigs,
final SocialProviderResponseHandler handler) {
ViewModelProvider supplier = ViewModelProviders.of(this);
- ViewGroup providerHolder = findViewById(R.id.btn_holder);
mProviders = new ArrayList<>();
for (IdpConfig idpConfig : providerConfigs) {
final ProviderSignInBase> provider;
@LayoutRes int buttonLayout;
- switch (idpConfig.getProviderId()) {
+
+ final String providerId = idpConfig.getProviderId();
+ switch (providerId) {
case GoogleAuthProvider.PROVIDER_ID:
GoogleSignInHandler google = supplier.get(GoogleSignInHandler.class);
google.init(new GoogleSignInHandler.Params(idpConfig));
@@ -154,12 +170,11 @@ private void populateIdpList(List providerConfigs,
buttonLayout = R.layout.fui_provider_button_phone;
break;
default:
- throw new IllegalStateException("Unknown provider: " + idpConfig.getProviderId());
+ throw new IllegalStateException("Unknown provider: " + providerId);
}
mProviders.add(provider);
- provider.getOperation().observe(this, new ResourceObserver(
- this, R.string.fui_progress_dialog_loading) {
+ provider.getOperation().observe(this, new ResourceObserver(this) {
@Override
protected void onSuccess(@NonNull IdpResponse response) {
handleResponse(response);
@@ -175,7 +190,12 @@ private void handleResponse(@NonNull IdpResponse response) {
// We have no idea what provider this error stemmed from so just forward
// this along to the handler.
handler.startSignIn(response);
- } else if (AuthUI.SOCIAL_PROVIDERS.contains(response.getProviderType())) {
+ } else if (AuthUI.SOCIAL_PROVIDERS.contains(providerId)) {
+ // Don't use the response's provider since it can be different than the one
+ // that launched the sign-in attempt. Ex: the email flow is started, but
+ // ends up turning into a Google sign-in because that account already
+ // existed. In the previous example, an extra sign-in would incorrectly
+ // started.
handler.startSignIn(response);
} else {
// Email or phone: the credentials should have already been saved so simply
@@ -186,14 +206,14 @@ private void handleResponse(@NonNull IdpResponse response) {
}
});
- View loginButton = getLayoutInflater().inflate(buttonLayout, providerHolder, false);
+ View loginButton = getLayoutInflater().inflate(buttonLayout, mProviderHolder, false);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
provider.startSignIn(AuthMethodPickerActivity.this);
}
});
- providerHolder.addView(loginButton);
+ mProviderHolder.addView(loginButton);
}
}
@@ -205,4 +225,24 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
provider.onActivityResult(requestCode, resultCode, data);
}
}
+
+ @Override
+ public void showProgress(int message) {
+ mProgressBar.setVisibility(View.VISIBLE);
+ for (int i = 0; i < mProviderHolder.getChildCount(); i++) {
+ View child = mProviderHolder.getChildAt(i);
+ child.setEnabled(false);
+ child.setAlpha(0.75f);
+ }
+ }
+
+ @Override
+ public void hideProgress() {
+ mProgressBar.setVisibility(View.INVISIBLE);
+ for (int i = 0; i < mProviderHolder.getChildCount(); i++) {
+ View child = mProviderHolder.getChildAt(i);
+ child.setEnabled(true);
+ child.setAlpha(1.0f);
+ }
+ }
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/SingleSignInActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/SingleSignInActivity.java
index 136f22c45..8f97b0e9a 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/SingleSignInActivity.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/SingleSignInActivity.java
@@ -7,6 +7,7 @@
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
import com.firebase.ui.auth.AuthUI;
import com.firebase.ui.auth.ErrorCodes;
@@ -18,7 +19,7 @@
import com.firebase.ui.auth.data.remote.FacebookSignInHandler;
import com.firebase.ui.auth.data.remote.GoogleSignInHandler;
import com.firebase.ui.auth.data.remote.TwitterSignInHandler;
-import com.firebase.ui.auth.ui.HelperActivityBase;
+import com.firebase.ui.auth.ui.InvisibleActivityBase;
import com.firebase.ui.auth.util.ExtraConstants;
import com.firebase.ui.auth.util.data.ProviderUtils;
import com.firebase.ui.auth.viewmodel.ResourceObserver;
@@ -28,7 +29,8 @@
import com.google.firebase.auth.GoogleAuthProvider;
import com.google.firebase.auth.TwitterAuthProvider;
-public class SingleSignInActivity extends HelperActivityBase {
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class SingleSignInActivity extends InvisibleActivityBase {
private SocialProviderResponseHandler mHandler;
private ProviderSignInBase> mProvider;
@@ -77,8 +79,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
throw new IllegalStateException("Invalid provider id: " + provider);
}
- mProvider.getOperation().observe(this, new ResourceObserver(
- this, R.string.fui_progress_dialog_loading) {
+ mProvider.getOperation().observe(this, new ResourceObserver(this) {
@Override
protected void onSuccess(@NonNull IdpResponse response) {
mHandler.startSignIn(response);
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java b/auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java
index cc41c8d89..5128496cd 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/idp/WelcomeBackIdpPrompt.java
@@ -25,6 +25,8 @@
import android.support.annotation.StringRes;
import android.view.View;
import android.view.View.OnClickListener;
+import android.widget.Button;
+import android.widget.ProgressBar;
import android.widget.TextView;
import com.firebase.ui.auth.AuthUI;
@@ -39,6 +41,7 @@
import com.firebase.ui.auth.data.remote.TwitterSignInHandler;
import com.firebase.ui.auth.ui.AppCompatBase;
import com.firebase.ui.auth.util.ExtraConstants;
+import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
import com.firebase.ui.auth.util.data.ProviderUtils;
import com.firebase.ui.auth.viewmodel.ResourceObserver;
import com.firebase.ui.auth.viewmodel.idp.LinkingSocialProviderResponseHandler;
@@ -51,6 +54,9 @@
public class WelcomeBackIdpPrompt extends AppCompatBase {
private ProviderSignInBase> mProvider;
+ private Button mDoneButton;
+ private ProgressBar mProgressBar;
+
public static Intent createIntent(
Context context, FlowParameters flowParams, User existingUser) {
return createIntent(context, flowParams, existingUser, null);
@@ -71,6 +77,9 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fui_welcome_back_idp_prompt_layout);
+ mDoneButton = findViewById(R.id.welcome_back_idp_button);
+ mProgressBar = findViewById(R.id.top_progress_bar);
+
User existingUser = User.getUser(getIntent());
IdpResponse requestedUserResponse = IdpResponse.fromResultIntent(getIntent());
ViewModelProvider supplier = ViewModelProviders.of(this);
@@ -122,8 +131,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
throw new IllegalStateException("Invalid provider id: " + providerId);
}
- mProvider.getOperation().observe(this, new ResourceObserver(
- this, R.string.fui_progress_dialog_loading) {
+ mProvider.getOperation().observe(this, new ResourceObserver(this) {
@Override
protected void onSuccess(@NonNull IdpResponse response) {
handler.startSignIn(response);
@@ -140,15 +148,14 @@ protected void onFailure(@NonNull Exception e) {
existingUser.getEmail(),
getString(providerName)));
- findViewById(R.id.welcome_back_idp_button).setOnClickListener(new OnClickListener() {
+ mDoneButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
mProvider.startSignIn(WelcomeBackIdpPrompt.this);
}
});
- handler.getOperation().observe(this, new ResourceObserver(
- this, R.string.fui_progress_dialog_loading) {
+ handler.getOperation().observe(this, new ResourceObserver(this) {
@Override
protected void onSuccess(@NonNull IdpResponse response) {
finish(RESULT_OK, response.toIntent());
@@ -159,6 +166,9 @@ protected void onFailure(@NonNull Exception e) {
finish(RESULT_CANCELED, IdpResponse.getErrorIntent(e));
}
});
+
+ TextView footerText = findViewById(R.id.email_footer_tos_and_pp_text);
+ PrivacyDisclosureUtils.setupTermsOfServiceFooter(this, getFlowParams(), footerText);
}
@Override
@@ -166,4 +176,16 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mProvider.onActivityResult(requestCode, resultCode, data);
}
+
+ @Override
+ public void showProgress(int message) {
+ mDoneButton.setEnabled(false);
+ mProgressBar.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void hideProgress() {
+ mDoneButton.setEnabled(true);
+ mProgressBar.setVisibility(View.INVISIBLE);
+ }
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/CompletableProgressDialog.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/CompletableProgressDialog.java
index 72ace5cd1..26d347de5 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/CompletableProgressDialog.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/CompletableProgressDialog.java
@@ -60,7 +60,7 @@ public void showAllowingStateLoss(FragmentManager manager, String tag) {
public Dialog onCreateDialog(Bundle savedInstanceState) {
View rootView = View.inflate(getContext(), R.layout.fui_phone_progress_dialog, null);
- mProgress = rootView.findViewById(R.id.progress_bar);
+ mProgress = rootView.findViewById(R.id.top_progress_bar);
mMessageView = rootView.findViewById(R.id.progress_msg);
mSuccessImage = rootView.findViewById(R.id.progress_success_imaage);
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/CountryListSpinner.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/CountryListSpinner.java
index d18c8c383..5d80c5de1 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/CountryListSpinner.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/CountryListSpinner.java
@@ -21,6 +21,8 @@
import android.content.Context;
import android.content.DialogInterface;
import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Parcelable;
import android.support.v7.widget.AppCompatEditText;
import android.text.TextUtils;
import android.util.AttributeSet;
@@ -37,11 +39,16 @@
public final class CountryListSpinner extends AppCompatEditText implements
View.OnClickListener, CountryListLoadTask.Listener {
+
+ private static final String KEY_SUPER_STATE = "KEY_SUPER_STATE";
+ private static final String KEY_COUNTRY_INFO = "KEY_COUNTRY_INFO";
+
private final String mTextFormat;
private final DialogPopup mDialogPopup;
private final CountryListAdapter mCountryListAdapter;
private OnClickListener mListener;
private String mSelectedCountryName;
+ private CountryInfo mSelectedCountryInfo;
public CountryListSpinner(Context context) {
this(context, null, android.R.attr.spinnerStyle);
@@ -60,7 +67,32 @@ public CountryListSpinner(Context context, AttributeSet attrs, int defStyle) {
mTextFormat = "%1$s +%2$d";
mSelectedCountryName = "";
CountryInfo countryInfo = PhoneNumberUtils.getCurrentCountryInfo(getContext());
- setSpinnerText(countryInfo.getCountryCode(), countryInfo.getLocale());
+ setSelectedForCountry(countryInfo.getCountryCode(), countryInfo.getLocale());
+ }
+
+ @Override
+ public Parcelable onSaveInstanceState() {
+ Parcelable superState = super.onSaveInstanceState();
+
+ Bundle bundle = new Bundle();
+ bundle.putParcelable(KEY_SUPER_STATE, superState);
+ bundle.putParcelable(KEY_COUNTRY_INFO, mSelectedCountryInfo);
+
+ return bundle;
+ }
+
+ @Override
+ public void onRestoreInstanceState(Parcelable state) {
+ if (!(state instanceof Bundle)) {
+ super.onRestoreInstanceState(state);
+ return;
+ }
+
+ Bundle bundle = (Bundle) state;
+ Parcelable superState = bundle.getParcelable(KEY_SUPER_STATE);
+ mSelectedCountryInfo = bundle.getParcelable(KEY_COUNTRY_INFO);
+
+ super.onRestoreInstanceState(superState);
}
private static void hideKeyboard(Context context, View view) {
@@ -70,19 +102,23 @@ private static void hideKeyboard(Context context, View view) {
}
}
- private void setSpinnerText(int countryCode, Locale locale) {
+ private void setSelectedForCountry(int countryCode, Locale locale) {
setText(String.format(mTextFormat, CountryInfo.localeToEmoji(locale), countryCode));
- setTag(new CountryInfo(locale, countryCode));
+ mSelectedCountryInfo = new CountryInfo(locale, countryCode);
}
public void setSelectedForCountry(final Locale locale, String countryCode) {
final String countryName = locale.getDisplayName();
if (!TextUtils.isEmpty(countryName) && !TextUtils.isEmpty(countryCode)) {
mSelectedCountryName = countryName;
- setSpinnerText(Integer.parseInt(countryCode), locale);
+ setSelectedForCountry(Integer.parseInt(countryCode), locale);
}
}
+ public CountryInfo getSelectedCountryInfo() {
+ return mSelectedCountryInfo;
+ }
+
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
@@ -169,7 +205,7 @@ public void run() {
public void onClick(DialogInterface dialog, int which) {
final CountryInfo countryInfo = listAdapter.getItem(which);
mSelectedCountryName = countryInfo.getLocale().getDisplayCountry();
- setSpinnerText(countryInfo.getCountryCode(), countryInfo.getLocale());
+ setSelectedForCountry(countryInfo.getCountryCode(), countryInfo.getLocale());
dismiss();
}
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneActivity.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneActivity.java
index 40e439937..774936122 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneActivity.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/PhoneActivity.java
@@ -91,7 +91,8 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
mPhoneNumber = savedInstanceState.getString(KEY_VERIFICATION_PHONE);
if (savedInstanceState.getSerializable(KEY_STATE) != null) {
- mVerificationState = (VerificationState) savedInstanceState.getSerializable(KEY_STATE);
+ mVerificationState = (VerificationState) savedInstanceState.getSerializable(
+ KEY_STATE);
}
return;
}
@@ -165,7 +166,8 @@ public void submitConfirmationCode(@NonNull String confirmationCode) {
// See: https://github.com/firebase/FirebaseUI-Android/issues/922
Log.w(PHONE_VERIFICATION_LOG_TAG,
String.format("submitConfirmationCode: mVerificationId is %s ; " +
- "confirmationCode is %s", TextUtils.isEmpty(mVerificationId) ? "empty" : "not empty",
+ "confirmationCode is %s",
+ TextUtils.isEmpty(mVerificationId) ? "empty" : "not empty",
TextUtils.isEmpty(confirmationCode) ? "empty" : "not empty"));
return;
}
@@ -311,7 +313,8 @@ private void showAlertDialog(@StringRes int messageId,
String s = getString(messageId);
mAlertDialog = new AlertDialog.Builder(this)
.setMessage(s)
- .setPositiveButton(R.string.fui_incorrect_code_dialog_positive_button_text, onClickListener)
+ .setPositiveButton(R.string.fui_incorrect_code_dialog_positive_button_text,
+ onClickListener)
.show();
}
@@ -351,7 +354,8 @@ public void onFailure(@NonNull Exception e) {
R.string.fui_incorrect_code_dialog_body,
new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int which) {
+ public void onClick(DialogInterface dialog,
+ int which) {
getSubmitConfirmationCodeFragment()
.setConfirmationCode("");
}
@@ -362,7 +366,8 @@ public void onClick(DialogInterface dialog, int which) {
R.string.fui_error_session_expired,
new DialogInterface.OnClickListener() {
@Override
- public void onClick(DialogInterface dialog, int which) {
+ public void onClick(DialogInterface dialog,
+ int which) {
getSubmitConfirmationCodeFragment()
.setConfirmationCode("");
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/SubmitConfirmationCodeFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/SubmitConfirmationCodeFragment.java
index 1d110ed32..4b0e20f25 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/SubmitConfirmationCodeFragment.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/SubmitConfirmationCodeFragment.java
@@ -34,9 +34,9 @@
import com.firebase.ui.auth.ui.FragmentBase;
import com.firebase.ui.auth.util.CustomCountDownTimer;
import com.firebase.ui.auth.util.ExtraConstants;
+import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
import com.firebase.ui.auth.util.ui.BucketedTextChangeListener;
import com.firebase.ui.auth.util.ui.ImeHelper;
-import com.firebase.ui.auth.util.ui.PreambleHandler;
/**
* Display confirmation code to verify phone numbers input in {{@link VerifyPhoneNumberFragment}}
@@ -56,7 +56,6 @@ public class SubmitConfirmationCodeFragment extends FragmentBase {
private Button mSubmitConfirmationButton;
private CustomCountDownTimer mCountdownTimer;
private PhoneActivity mVerifier;
- private TextView mAgreementText;
private long mMillisUntilFinished;
public static SubmitConfirmationCodeFragment newInstance(FlowParameters flowParameters,
@@ -73,8 +72,9 @@ public static SubmitConfirmationCodeFragment newInstance(FlowParameters flowPara
@Nullable
@Override
- public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable
- Bundle savedInstanceState) {
+ public View onCreateView(@NonNull LayoutInflater inflater,
+ @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fui_confirmation_code_layout, container, false);
FragmentActivity parentActivity = getActivity();
@@ -83,7 +83,6 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
mResendCodeTextView = v.findViewById(R.id.resend_code);
mConfirmationCodeEditText = v.findViewById(R.id.confirmation_code);
mSubmitConfirmationButton = v.findViewById(R.id.submit_confirmation_code);
- mAgreementText = v.findViewById(R.id.create_account_tos);
final String phoneNumber = getArguments().getString(ExtraConstants.PHONE);
@@ -93,10 +92,16 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup c
setupCountDown(RESEND_WAIT_MILLIS);
setupSubmitConfirmationCodeButton();
setupResendConfirmationCodeTextView(phoneNumber);
- setUpTermsOfService();
return v;
}
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ TextView footerText = view.findViewById(R.id.email_footer_tos_and_pp_text);
+ PrivacyDisclosureUtils.setupTermsOfServiceFooter(getContext(), getFlowParams(), footerText);
+ }
+
@Override
public void onStart() {
super.onStart();
@@ -221,13 +226,6 @@ private void cancelTimer() {
}
}
- private void setUpTermsOfService() {
- PreambleHandler.setup(getContext(),
- getFlowParams(),
- R.string.fui_continue_phone_login,
- mAgreementText);
- }
-
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
CustomCountDownTimer getCountdownTimer() {
return mCountdownTimer;
diff --git a/auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java b/auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java
index 9abe3dfc9..721632025 100644
--- a/auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java
+++ b/auth/src/main/java/com/firebase/ui/auth/ui/phone/VerifyPhoneNumberFragment.java
@@ -41,6 +41,7 @@
import com.firebase.ui.auth.util.ExtraConstants;
import com.firebase.ui.auth.util.GoogleApiUtils;
import com.firebase.ui.auth.util.data.PhoneNumberUtils;
+import com.firebase.ui.auth.util.data.PrivacyDisclosureUtils;
import com.firebase.ui.auth.util.ui.ImeHelper;
import com.firebase.ui.auth.viewmodel.RequestCodes;
import com.google.android.gms.auth.api.credentials.Credential;
@@ -55,7 +56,6 @@
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public class VerifyPhoneNumberFragment extends FragmentBase implements View.OnClickListener {
public static final String TAG = "VerifyPhoneFragment";
-
private Context mAppContext;
private CountryListSpinner mCountryListSpinner;
@@ -107,15 +107,14 @@ public void onDonePressed() {
parentActivity.setTitle(getString(R.string.fui_verify_phone_number_title));
setupCountrySpinner();
setupSendCodeButton();
- setupTerms();
-
return v;
}
- private void setupTerms() {
- final String verifyPhoneButtonText = getString(R.string.fui_verify_phone_number);
- final String terms = getString(R.string.fui_sms_terms_of_service, verifyPhoneButtonText);
- mSmsTermsText.setText(terms);
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ TextView footerText = view.findViewById(R.id.email_footer_tos_and_pp_text);
+ setupPrivacyDisclosures(footerText);
}
@Override
@@ -202,13 +201,14 @@ private void onNext() {
if (phoneNumber == null) {
mPhoneInputLayout.setError(getString(R.string.fui_invalid_phone_number));
} else {
+ mPhoneInputLayout.setError(null);
mVerifier.verifyPhoneNumber(phoneNumber, false);
}
}
@Nullable
private String getPseudoValidPhoneNumber() {
- final CountryInfo countryInfo = (CountryInfo) mCountryListSpinner.getTag();
+ final CountryInfo countryInfo = mCountryListSpinner.getSelectedCountryInfo();
final String everythingElse = mPhoneEditText.getText().toString();
if (TextUtils.isEmpty(everythingElse)) {
@@ -272,6 +272,24 @@ private void setCountryCode(PhoneNumber phoneNumber) {
}
}
+ private void setupPrivacyDisclosures(TextView footerText) {
+ final String verifyPhoneButtonText = getString(R.string.fui_verify_phone_number);
+ final String multipleProviderFlowText = getString(R.string.fui_sms_terms_of_service,
+ verifyPhoneButtonText);
+ FlowParameters flowParameters = getFlowParams();
+
+ if (flowParameters.isSingleProviderFlow()) {
+ PrivacyDisclosureUtils.setupTermsOfServiceAndPrivacyPolicySmsText(getContext(),
+ flowParameters,
+ mSmsTermsText);
+ } else {
+ PrivacyDisclosureUtils.setupTermsOfServiceFooter(getContext(),
+ flowParameters,
+ footerText);
+ mSmsTermsText.setText(multipleProviderFlowText);
+ }
+ }
+
void showError(String e) {
mPhoneInputLayout.setError(e);
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/util/PlayServicesHelper.java b/auth/src/main/java/com/firebase/ui/auth/util/PlayServicesHelper.java
deleted file mode 100644
index 3c72b1520..000000000
--- a/auth/src/main/java/com/firebase/ui/auth/util/PlayServicesHelper.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.firebase.ui.auth.util;
-
-import android.app.Activity;
-import android.app.Dialog;
-import android.content.DialogInterface;
-
-import com.google.android.gms.common.GoogleApiAvailability;
-
-/**
- * Helper class wrapping {@link GoogleApiAvailability}. Used internally but can also be used by
- * client application
- *
- * @deprecated use {@link GoogleApiAvailability} instead
- */
-@Deprecated
-public class PlayServicesHelper {
- /**
- * @deprecated use {@link GoogleApiAvailability#getInstance()} instead
- */
- @Deprecated
- public static GoogleApiAvailability getGoogleApiAvailability() {
- return GoogleApiAvailability.getInstance();
- }
-
- /**
- * @param activity The Activity that will host necessary dialogs.
- * @param requestCode A request code to be used to return results to the Activity.
- * @param cancelListener A Dialog listener if the user cancels the recommended action.
- * @return true if play services is available, false otherwise.
- * @deprecated use {@link GoogleApiAvailability#makeGooglePlayServicesAvailable(Activity)}
- * instead.
- */
- @Deprecated
- public static boolean makePlayServicesAvailable(Activity activity,
- int requestCode,
- DialogInterface.OnCancelListener cancelListener) {
- Dialog errorDialog = GoogleApiAvailability.getInstance().getErrorDialog(
- activity,
- GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(activity),
- requestCode,
- cancelListener);
-
- // The error dialog will be null if isGooglePlayServicesAvailable returned SUCCESS
- if (errorDialog == null) {
- return true;
- } else {
- errorDialog.show();
- return false;
- }
- }
-}
diff --git a/auth/src/main/java/com/firebase/ui/auth/util/data/PrivacyDisclosureUtils.java b/auth/src/main/java/com/firebase/ui/auth/util/data/PrivacyDisclosureUtils.java
new file mode 100644
index 000000000..4855c0690
--- /dev/null
+++ b/auth/src/main/java/com/firebase/ui/auth/util/data/PrivacyDisclosureUtils.java
@@ -0,0 +1,92 @@
+package com.firebase.ui.auth.util.data;
+
+import android.content.Context;
+import android.support.annotation.RestrictTo;
+import android.support.annotation.StringRes;
+import android.widget.TextView;
+
+import com.firebase.ui.auth.R;
+import com.firebase.ui.auth.data.model.FlowParameters;
+import com.firebase.ui.auth.util.ui.PreambleHandler;
+
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class PrivacyDisclosureUtils {
+
+ private static final int NO_TOS_OR_PP = -1;
+
+ public static void setupTermsOfServiceAndPrivacyPolicyText(Context context,
+ FlowParameters flowParameters,
+ TextView termsText) {
+ PreambleHandler.setup(context,
+ flowParameters,
+ getGlobalTermsStringResource(flowParameters),
+ termsText);
+ }
+
+ public static void setupTermsOfServiceFooter(Context context,
+ FlowParameters flowParameters,
+ TextView footerText) {
+ PreambleHandler.setup(context,
+ flowParameters,
+ getGlobalTermsFooterStringResource(flowParameters),
+ footerText);
+ }
+
+ public static void setupTermsOfServiceAndPrivacyPolicySmsText(Context context,
+ FlowParameters flowParameters,
+ TextView termsText) {
+ PreambleHandler.setup(context,
+ flowParameters,
+ R.string.fui_verify_phone_number,
+ getTermsSmsStringResource(flowParameters),
+ termsText);
+ }
+
+ @StringRes
+ private static int getGlobalTermsStringResource(FlowParameters flowParameters) {
+ boolean termsOfServiceUrlProvided = flowParameters.isTermsOfServiceUrlProvided();
+ boolean privacyPolicyUrlProvided = flowParameters.isPrivacyPolicyUrlProvided();
+
+ if (termsOfServiceUrlProvided && privacyPolicyUrlProvided) {
+ return R.string.fui_tos_and_pp;
+ } else if (termsOfServiceUrlProvided) {
+ return R.string.fui_tos_only;
+ } else if (privacyPolicyUrlProvided) {
+ return R.string.fui_pp_only;
+ }
+
+ return NO_TOS_OR_PP;
+ }
+
+ @StringRes
+ private static int getGlobalTermsFooterStringResource(FlowParameters flowParameters) {
+ boolean termsOfServiceUrlProvided = flowParameters.isTermsOfServiceUrlProvided();
+ boolean privacyPolicyUrlProvided = flowParameters.isPrivacyPolicyUrlProvided();
+
+ if (termsOfServiceUrlProvided && privacyPolicyUrlProvided) {
+ return R.string.fui_tos_and_pp_footer;
+ } else if (termsOfServiceUrlProvided) {
+ return R.string.fui_tos_footer;
+ } else if (privacyPolicyUrlProvided) {
+ return R.string.fui_pp_footer;
+ }
+
+ return NO_TOS_OR_PP;
+ }
+
+ @StringRes
+ private static int getTermsSmsStringResource(FlowParameters flowParameters) {
+ boolean termsOfServiceUrlProvided = flowParameters.isTermsOfServiceUrlProvided();
+ boolean privacyPolicyUrlProvided = flowParameters.isPrivacyPolicyUrlProvided();
+
+ if (termsOfServiceUrlProvided && privacyPolicyUrlProvided) {
+ return R.string.fui_sms_terms_of_service_and_privacy_policy_extended;
+ } else if (termsOfServiceUrlProvided) {
+ return R.string.fui_sms_terms_of_service_only_extended;
+ } else if (privacyPolicyUrlProvided) {
+ return R.string.fui_sms_privacy_policy_only_extended;
+ }
+
+ return NO_TOS_OR_PP;
+ }
+}
diff --git a/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderAvailability.java b/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderAvailability.java
new file mode 100644
index 000000000..540cb4979
--- /dev/null
+++ b/auth/src/main/java/com/firebase/ui/auth/util/data/ProviderAvailability.java
@@ -0,0 +1,26 @@
+package com.firebase.ui.auth.util.data;
+
+import android.support.annotation.RestrictTo;
+
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public final class ProviderAvailability {
+ public static final boolean IS_FACEBOOK_AVAILABLE =
+ exists("com.facebook.login.LoginManager");
+ public static final boolean IS_TWITTER_AVAILABLE =
+ exists("com.twitter.sdk.android.core.identity.TwitterAuthClient");
+
+ private ProviderAvailability() {
+ throw new AssertionError("No instance for you!");
+ }
+
+ private static boolean exists(String name) {
+ boolean exists;
+ try {
+ Class.forName(name);
+ exists = true;
+ } catch (ClassNotFoundException e) {
+ exists = false;
+ }
+ return exists;
+ }
+}
diff --git a/auth/src/main/java/com/firebase/ui/auth/util/ui/PreambleHandler.java b/auth/src/main/java/com/firebase/ui/auth/util/ui/PreambleHandler.java
index 3cea8459b..635e9f576 100644
--- a/auth/src/main/java/com/firebase/ui/auth/util/ui/PreambleHandler.java
+++ b/auth/src/main/java/com/firebase/ui/auth/util/ui/PreambleHandler.java
@@ -25,6 +25,7 @@ public class PreambleHandler {
private static final String BTN_TARGET = "%BTN%";
private static final String TOS_TARGET = "%TOS%";
private static final String PP_TARGET = "%PP%";
+ private static final int NO_BUTTON = -1;
private final Context mContext;
private final FlowParameters mFlowParameters;
@@ -41,12 +42,20 @@ private PreambleHandler(Context context, FlowParameters parameters, @StringRes i
R.color.fui_linkColor));
}
+ public static void setup(Context context,
+ FlowParameters parameters,
+ @StringRes int textViewText,
+ TextView textView) {
+ setup(context, parameters, NO_BUTTON, textViewText, textView);
+ }
+
public static void setup(Context context,
FlowParameters parameters,
@StringRes int buttonText,
+ @StringRes int textViewText,
TextView textView) {
PreambleHandler handler = new PreambleHandler(context, parameters, buttonText);
- handler.setupCreateAccountPreamble();
+ handler.initPreamble(textViewText);
handler.setPreamble(textView);
}
@@ -55,8 +64,8 @@ private void setPreamble(TextView textView) {
textView.setText(mBuilder);
}
- private void setupCreateAccountPreamble() {
- String withTargets = getPreambleStringWithTargets();
+ private void initPreamble(@StringRes int textViewText) {
+ String withTargets = getPreambleStringWithTargets(textViewText, mButtonText != NO_BUTTON);
if (withTargets == null) {
return;
}
@@ -92,24 +101,44 @@ private void replaceUrlTarget(String target, @StringRes int replacementRes, Stri
}
@Nullable
- private String getPreambleStringWithTargets() {
+ private String getPreambleStringWithTargets(@StringRes int textViewText, boolean hasButton) {
+ boolean termsOfServiceUrlProvided = !TextUtils.isEmpty(mFlowParameters.termsOfServiceUrl);
+ boolean privacyPolicyUrlProvided = !TextUtils.isEmpty(mFlowParameters.privacyPolicyUrl);
+ if (termsOfServiceUrlProvided && privacyPolicyUrlProvided) {
+ Object[] targets = hasButton ?
+ new Object[]{BTN_TARGET, TOS_TARGET, PP_TARGET}
+ : new Object[]{TOS_TARGET, PP_TARGET};
+ return mContext.getString(textViewText, targets);
+ } else if (termsOfServiceUrlProvided) {
+ Object[] targets = hasButton ?
+ new Object[]{BTN_TARGET, TOS_TARGET} : new Object[]{TOS_TARGET};
+ return mContext.getString(textViewText, targets);
+ } else if (privacyPolicyUrlProvided) {
+ Object[] targets = hasButton ?
+ new Object[]{BTN_TARGET, PP_TARGET} : new Object[]{PP_TARGET};
+ return mContext.getString(textViewText, targets);
+ }
+ return null;
+ }
+
+ @Nullable
+ private String getPreambleStringWithTargetsNoButton(@StringRes int textViewText) {
boolean hasTos = !TextUtils.isEmpty(mFlowParameters.termsOfServiceUrl);
boolean hasPp = !TextUtils.isEmpty(mFlowParameters.privacyPolicyUrl);
-
if (hasTos && hasPp) {
- return mContext.getString(R.string.fui_create_account_preamble_tos_and_pp,
- BTN_TARGET, TOS_TARGET, PP_TARGET);
+ return mContext.getString(textViewText,
+ TOS_TARGET, PP_TARGET);
} else if (hasTos) {
- return mContext.getString(R.string.fui_create_account_preamble_tos_only,
- BTN_TARGET, TOS_TARGET);
+ return mContext.getString(textViewText,
+ TOS_TARGET);
} else if (hasPp) {
- return mContext.getString(R.string.fui_create_account_preamble_pp_only,
- BTN_TARGET, PP_TARGET);
- } else {
- return null;
+ return mContext.getString(textViewText,
+ PP_TARGET);
}
+ return null;
}
+
private class CustomTabsSpan extends ClickableSpan {
private final String mUrl;
private final CustomTabsIntent mCustomTabsIntent;
diff --git a/auth/src/main/java/com/firebase/ui/auth/viewmodel/ResourceObserver.java b/auth/src/main/java/com/firebase/ui/auth/viewmodel/ResourceObserver.java
index ce438002c..b5d822ba8 100644
--- a/auth/src/main/java/com/firebase/ui/auth/viewmodel/ResourceObserver.java
+++ b/auth/src/main/java/com/firebase/ui/auth/viewmodel/ResourceObserver.java
@@ -4,40 +4,59 @@
import android.support.annotation.NonNull;
import android.support.annotation.RestrictTo;
import android.support.annotation.StringRes;
+import android.util.Log;
+import com.firebase.ui.auth.R;
+import com.firebase.ui.auth.AuthUI;
import com.firebase.ui.auth.data.model.Resource;
import com.firebase.ui.auth.data.model.State;
import com.firebase.ui.auth.ui.FragmentBase;
import com.firebase.ui.auth.ui.HelperActivityBase;
+import com.firebase.ui.auth.ui.ProgressView;
import com.firebase.ui.auth.util.ui.FlowUtils;
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
public abstract class ResourceObserver implements Observer> {
+
+ private final ProgressView mProgressView;
private final HelperActivityBase mActivity;
private final FragmentBase mFragment;
private final int mLoadingMessage;
+ protected ResourceObserver(@NonNull HelperActivityBase activity) {
+ this(activity, null, activity, R.string.fui_progress_dialog_loading);
+ }
+
protected ResourceObserver(@NonNull HelperActivityBase activity, @StringRes int message) {
- this(activity, null, message);
+ this(activity, null, activity, message);
}
protected ResourceObserver(@NonNull FragmentBase fragment, @StringRes int message) {
- this((HelperActivityBase) fragment.getActivity(), fragment, message);
+ this(null, fragment, fragment, message);
}
- private ResourceObserver(HelperActivityBase activity, FragmentBase fragment, int message) {
+ private ResourceObserver(HelperActivityBase activity,
+ FragmentBase fragment,
+ ProgressView progressView,
+ int message) {
mActivity = activity;
mFragment = fragment;
+
+ if (mActivity == null && mFragment == null) {
+ throw new IllegalStateException("ResourceObserver must be attached to an Activity or a Fragment");
+ }
+
+ mProgressView = progressView;
mLoadingMessage = message;
}
@Override
public final void onChanged(Resource resource) {
if (resource.getState() == State.LOADING) {
- mActivity.getDialogHolder().showLoadingDialog(mLoadingMessage);
+ mProgressView.showProgress(mLoadingMessage);
return;
}
- mActivity.getDialogHolder().dismissDialog();
+ mProgressView.hideProgress();
if (resource.isUsed()) { return; }
@@ -51,7 +70,10 @@ public final void onChanged(Resource resource) {
} else {
unhandled = FlowUtils.unhandled(mFragment, e);
}
- if (unhandled) { onFailure(e); }
+ if (unhandled) {
+ Log.e(AuthUI.TAG, "A sign-in error occurred.", e);
+ onFailure(e);
+ }
}
}
diff --git a/auth/src/main/java/com/firebase/ui/auth/viewmodel/ViewModelBase.java b/auth/src/main/java/com/firebase/ui/auth/viewmodel/ViewModelBase.java
index 73ab859ca..05ae22c50 100644
--- a/auth/src/main/java/com/firebase/ui/auth/viewmodel/ViewModelBase.java
+++ b/auth/src/main/java/com/firebase/ui/auth/viewmodel/ViewModelBase.java
@@ -39,6 +39,5 @@ protected void setArguments(T arguments) {
@Override
protected void onCleared() {
mIsInitialized.set(false);
- mArguments = null;
}
}
diff --git a/auth/src/main/res/layout-land/fui_auth_method_picker_layout.xml b/auth/src/main/res/layout-land/fui_auth_method_picker_layout.xml
index c1fbdecf5..d16b06b3f 100644
--- a/auth/src/main/res/layout-land/fui_auth_method_picker_layout.xml
+++ b/auth/src/main/res/layout-land/fui_auth_method_picker_layout.xml
@@ -9,6 +9,12 @@
android:clipChildren="false"
android:clipToPadding="false">
+
+
+
diff --git a/auth/src/main/res/layout/fui_activity_invisible.xml b/auth/src/main/res/layout/fui_activity_invisible.xml
new file mode 100644
index 000000000..44542a0fe
--- /dev/null
+++ b/auth/src/main/res/layout/fui_activity_invisible.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/auth/src/main/res/layout/fui_activity_register_email.xml b/auth/src/main/res/layout/fui_activity_register_email.xml
index 0eedf347a..4132aabc7 100644
--- a/auth/src/main/res/layout/fui_activity_register_email.xml
+++ b/auth/src/main/res/layout/fui_activity_register_email.xml
@@ -5,4 +5,6 @@
android:id="@+id/fragment_register_email"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:ignore="MergeRootFrame" />
+ tools:ignore="MergeRootFrame">
+
+
diff --git a/auth/src/main/res/layout/fui_activity_register_phone.xml b/auth/src/main/res/layout/fui_activity_register_phone.xml
index 06b711ba3..2704b5124 100644
--- a/auth/src/main/res/layout/fui_activity_register_phone.xml
+++ b/auth/src/main/res/layout/fui_activity_register_phone.xml
@@ -5,4 +5,6 @@
android:id="@+id/fragment_verify_phone"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:ignore="MergeRootFrame" />
+ tools:ignore="MergeRootFrame">
+
+
diff --git a/auth/src/main/res/layout/fui_auth_method_picker_layout.xml b/auth/src/main/res/layout/fui_auth_method_picker_layout.xml
index f9888672e..f35e77b2f 100644
--- a/auth/src/main/res/layout/fui_auth_method_picker_layout.xml
+++ b/auth/src/main/res/layout/fui_auth_method_picker_layout.xml
@@ -9,9 +9,17 @@
android:clipChildren="false"
android:clipToPadding="false">
+
+
+ app:layout_constraintBottom_toTopOf="@id/main_tos_and_pp"
+ app:layout_constraintVertical_bias="0.7">
+
+
diff --git a/auth/src/main/res/layout/fui_check_email_layout.xml b/auth/src/main/res/layout/fui_check_email_layout.xml
index 90e1c431f..f80f6933d 100644
--- a/auth/src/main/res/layout/fui_check_email_layout.xml
+++ b/auth/src/main/res/layout/fui_check_email_layout.xml
@@ -1,38 +1,69 @@
-
+ android:layout_height="match_parent"
+ android:orientation="vertical">
-
+
-
+
+
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
-
+
+
+
-
+
+
+
-
+
-
+
-
+
diff --git a/auth/src/main/res/layout/fui_confirmation_code_layout.xml b/auth/src/main/res/layout/fui_confirmation_code_layout.xml
index 888a95ba3..53c0270d7 100644
--- a/auth/src/main/res/layout/fui_confirmation_code_layout.xml
+++ b/auth/src/main/res/layout/fui_confirmation_code_layout.xml
@@ -1,111 +1,112 @@
-
-
+
-
+
-
+
-
+
-
+ android:layout_marginBottom="@dimen/fui_field_padding_vert"
+ app:layout_constraintTop_toBottomOf="@+id/edit_phone_number">
-
+
-
+
-
+
+
+
+
+
-
+
-
+
-
+
-
+
-
+
diff --git a/auth/src/main/res/layout/fui_forgot_password_layout.xml b/auth/src/main/res/layout/fui_forgot_password_layout.xml
index 257d0e266..fe6a8a4b8 100644
--- a/auth/src/main/res/layout/fui_forgot_password_layout.xml
+++ b/auth/src/main/res/layout/fui_forgot_password_layout.xml
@@ -1,6 +1,5 @@
-
@@ -34,6 +33,10 @@
android:layout_marginTop="@dimen/fui_field_padding_vert"
android:text="@string/fui_button_text_send" />
+
+
diff --git a/auth/src/main/res/layout/fui_phone_layout.xml b/auth/src/main/res/layout/fui_phone_layout.xml
index fc317c2f8..7685f223f 100644
--- a/auth/src/main/res/layout/fui_phone_layout.xml
+++ b/auth/src/main/res/layout/fui_phone_layout.xml
@@ -1,53 +1,66 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/auth/src/main/res/layout/fui_phone_progress_dialog.xml b/auth/src/main/res/layout/fui_phone_progress_dialog.xml
index 50158afdc..cb13c7e37 100644
--- a/auth/src/main/res/layout/fui_phone_progress_dialog.xml
+++ b/auth/src/main/res/layout/fui_phone_progress_dialog.xml
@@ -7,7 +7,7 @@
android:padding="8dp">
-
+ android:layout_height="match_parent"
+ android:orientation="vertical">
-
+
-
-
-
-
-
-
-
+
+
+ android:orientation="vertical">
-
+ android:layout_height="wrap_content"
+ android:layout_marginTop="@dimen/fui_field_padding_vert"
+ android:transitionGroup="true"
+ android:transitionName="@string/fui_email_field_name"
+ app:errorEnabled="true"
+ tools:ignore="UnusedAttribute">
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
diff --git a/auth/src/main/res/layout/fui_welcome_back_idp_prompt_layout.xml b/auth/src/main/res/layout/fui_welcome_back_idp_prompt_layout.xml
index 5fe57030d..a814d821b 100644
--- a/auth/src/main/res/layout/fui_welcome_back_idp_prompt_layout.xml
+++ b/auth/src/main/res/layout/fui_welcome_back_idp_prompt_layout.xml
@@ -1,33 +1,48 @@
-
-
+
-
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
-
+
diff --git a/auth/src/main/res/layout/fui_welcome_back_password_prompt_layout.xml b/auth/src/main/res/layout/fui_welcome_back_password_prompt_layout.xml
index b08f69040..a02b1401d 100644
--- a/auth/src/main/res/layout/fui_welcome_back_password_prompt_layout.xml
+++ b/auth/src/main/res/layout/fui_welcome_back_password_prompt_layout.xml
@@ -1,66 +1,82 @@
-
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
diff --git a/auth/src/main/res/values-ar/strings.xml b/auth/src/main/res/values-ar/strings.xml
index 14daf626c..f6cf4c1bf 100755
--- a/auth/src/main/res/values-ar/strings.xml
+++ b/auth/src/main/res/values-ar/strings.xml
@@ -1,6 +1,12 @@
-
+جارٍ التحميل…تسجيل الدخول
+ تشير المتابعة إلى موافقتك على %1$s و%2$s.
+ تشير المتابعة إلى موافقتك على %1$s.
+ تشير المتابعة إلى موافقتك على %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
جارٍ الاشتراك…كلمة المرور ليست قوية بما فيه الكفاية. يجب استخدام %1$d رقم على الأقل ومزيج من الأحرف والأرقامكلمة المرور ليست قوية بما فيه الكفاية. يجب استخدام رقم واحد (%1$d) على الأقل ومزيج من الأحرف والأرقامكلمة المرور ليست قوية بما فيه الكفاية. يجب استخدام رقمين (%1$d) على الأقل ومزيج من الأحرف والأرقامكلمة المرور ليست قوية بما فيه الكفاية. يجب استخدام %1$d أرقام على الأقل ومزيج من الأحرف والأرقامكلمة المرور ليست قوية بما فيه الكفاية. يجب استخدام %1$d رقمًا على الأقل ومزيج من الأحرف والأرقامكلمة المرور ليست قوية بما فيه الكفاية. يجب استخدام %1$d رقم على الأقل ومزيج من الأحرف والأرقامفشل تسجيل حساب البريد الإلكتروني
- يُعد النقر على %1$s دليلاً على أنك توافق على %2$s و%3$s.
- يُعد النقر على %1$s دليلاً على أنك توافق على %2$s.
- يُعد النقر على %1$s دليلاً على أنك توافق على %2$s.بنود الخدمةسياسة الخصوصيةلديك حساب حاليًا
@@ -65,4 +68,7 @@
تأكيد ملكية رقم الهاتفمتابعةعند النقر على “%1$s”، قد يتمّ إرسال رسالة قصيرة SMS وقد يتمّ تطبيق رسوم الرسائل والبيانات.
+ يشير النقر على “%1$s” إلى موافقتك على %2$s و%3$s. وقد يتمّ إرسال رسالة قصيرة كما قد تنطبق رسوم الرسائل والبيانات.
+ يشير النقر على “%1$s” إلى موافقتك على %2$s. وقد يتمّ إرسال رسالة قصيرة كما قد تنطبق رسوم الرسائل والبيانات.
+ يشير النقر على “%1$s” إلى موافقتك على %2$s. وقد يتمّ إرسال رسالة قصيرة كما قد تنطبق رسوم الرسائل والبيانات.
diff --git a/auth/src/main/res/values-b+es+419/strings.xml b/auth/src/main/res/values-b+es+419/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-b+es+419/strings.xml
+++ b/auth/src/main/res/values-b+es+419/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-bg/strings.xml b/auth/src/main/res/values-bg/strings.xml
index 79e17a247..6c8a788c2 100755
--- a/auth/src/main/res/values-bg/strings.xml
+++ b/auth/src/main/res/values-bg/strings.xml
@@ -1,6 +1,12 @@
-
+Зарежда се…Вход
+ Продължавайки, приемате нашите %1$s и %2$s.
+ Продължавайки, приемате нашите %1$s.
+ Продължавайки, приемате нашата %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Създава се регистрация…Паролата не е достатъчно надеждна. Използвайте поне %1$d знак и комбинация от букви и цифриПаролата не е достатъчно надеждна. Използвайте поне %1$d знака и комбинация от букви и цифриРегистрацията с имейл адрес не бе успешна
- Докосвайки %1$s, приемате %2$s и %3$s.
- Докосвайки %1$s, приемате %2$s.
- Докосвайки %1$s, приемате %2$s.Общите условияДекларацията за поверителностВече имате профил
@@ -65,4 +68,7 @@
Потвърждаване на телефонния номерНапредДокосвайки „%1$s“, може да получите SMS съобщение. То може да се таксува по тарифите за данни и SMS.
+ Докосвайки „%1$s“, приемате нашите %2$s и %3$s. Възможно е да получите SMS съобщение. То може да се таксува по тарифите за данни и SMS.
+ Докосвайки „%1$s“, приемате нашите %2$s. Възможно е да получите SMS съобщение. То може да се таксува по тарифите за данни и SMS.
+ Докосвайки „%1$s“, приемате нашата %2$s. Възможно е да получите SMS съобщение. То може да се таксува по тарифите за данни и SMS.
diff --git a/auth/src/main/res/values-bn/strings.xml b/auth/src/main/res/values-bn/strings.xml
index 2ba8bf5cd..f0edf5be9 100755
--- a/auth/src/main/res/values-bn/strings.xml
+++ b/auth/src/main/res/values-bn/strings.xml
@@ -1,6 +1,12 @@
-
+লোড হচ্ছে…সাইন-ইন করুন
+ চালিয়ে যাওয়ার অর্থ, আপনি আমাদের %1$s এবং %2$s-এর সাথে সম্মত।
+ চালিয়ে যাওয়ার অর্থ, আপনি আমাদের %1$s-এর সাথে সম্মত।
+ চালিয়ে যাওয়ার অর্থ, আপনি আমাদের %1$s-এর সাথে সম্মত।
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
সাইন-আপ করা হচ্ছে…পাসওয়ার্ডটি পর্যাপ্ত সুরক্ষিত নয়। কমপক্ষে %1$dটি বিশেষ বর্ণ এবং অক্ষর ও সংখ্যা মিশিয়ে ব্যবহার করুনপাসওয়ার্ডটি পর্যাপ্ত সুরক্ষিত নয়। কমপক্ষে %1$dটি বিশেষ বর্ণ এবং অক্ষর ও সংখ্যা মিশিয়ে ব্যবহার করুনইমেল অ্যাকাউন্টটি রেজিস্টার করা যায়নি
- %1$s এ ট্যাপ করে আপনি জানাচ্ছেন যে আপনি %2$s এবং %3$s এর সাথে সম্মত হন।
- %1$s এ ট্যাপ করে আপনি জানাচ্ছেন যে আপনি %2$s এর সাথে সম্মত হন।
- %1$s এ ট্যাপ করে আপনি জানাচ্ছেন যে আপনি %2$s এর সাথে সম্মত হন।পরিষেবার শর্তাবলিগোপনীয়তা নীতিআপনার আগে থেকেই একটি অ্যাকাউন্ট আছে
@@ -65,4 +68,7 @@
ফোন নম্বর যাচাই করুনচালিয়ে যান%1$s এ ট্যাপ করলে আপনি একটি এসএমএস পাঠাতে পারেন। মেসেজ ও ডেটার চার্জ প্রযোজ্য।
+ “%1$s” বোতামে ট্যাপ করার অর্থ, আপনি আমাদের %2$s এবং %3$s-এর সাথে সম্মত। একটি এসএমএস পাঠানো হতে পারে। মেসেজ এবং ডেটার উপরে প্রযোজ্য চার্জ লাগতে পারে।
+ “%1$s” বোতামে ট্যাপ করার অর্থ, আপনি আমাদের %2$s-এর সাথে সম্মত। একটি এসএমএস পাঠানো হতে পারে। মেসেজ এবং ডেটার উপরে প্রযোজ্য চার্জ লাগতে পারে।
+ “%1$s” বোতামে ট্যাপ করার অর্থ, আপনি আমাদের %2$s-এর সাথে সম্মত। একটি এসএমএস পাঠানো হতে পারে। মেসেজ এবং ডেটার উপরে প্রযোজ্য চার্জ লাগতে পারে।
diff --git a/auth/src/main/res/values-ca/strings.xml b/auth/src/main/res/values-ca/strings.xml
index 43d03a29f..2b3a3fd7e 100755
--- a/auth/src/main/res/values-ca/strings.xml
+++ b/auth/src/main/res/values-ca/strings.xml
@@ -1,6 +1,12 @@
-
+S\'està carregant…Inicia la sessió
+ En continuar, acceptes les nostres %1$s i la nostra %2$s.
+ En continuar, acceptes les nostres %1$s.
+ En continuar, acceptes la nostra %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
T\'estàs registrant…La contrasenya no és prou segura. Utilitza com a mínim %1$d caràcter i combina lletres i números.La contrasenya no és prou segura. Utilitza com a mínim %1$d caràcters i combina lletres i números.No s\'ha pogut registrar el compte de correu electrònic
- En tocar %1$s, indiques que acceptes les %2$s i la %3$s.
- En tocar %1$s, indiques que acceptes les %2$s.
- En tocar %1$s, indiques que acceptes la %2$s.Condicions del serveipolítica de privadesaJa tens un compte
@@ -65,4 +68,7 @@
Verifica el número de telèfonContinuaEn tocar %1$s, és possible que s\'enviï un SMS. Es poden aplicar tarifes de dades i missatges.
+ En tocar %1$s, acceptes les nostres %2$s i la nostra %3$s. És possible que s\'enviï un SMS. Es poden aplicar tarifes de dades i missatges.
+ En tocar %1$s, acceptes les nostres %2$s. És possible que s\'enviï un SMS. Es poden aplicar tarifes de dades i missatges.
+ En tocar %1$s, acceptes la nostra %2$s. És possible que s\'enviï un SMS. Es poden aplicar tarifes de dades i missatges.
diff --git a/auth/src/main/res/values-cs/strings.xml b/auth/src/main/res/values-cs/strings.xml
index d7fb2e8c1..9537ea17e 100755
--- a/auth/src/main/res/values-cs/strings.xml
+++ b/auth/src/main/res/values-cs/strings.xml
@@ -1,6 +1,12 @@
-
+Načítání…Přihlásit se
+ Budete-li pokračovat, vyjadřujete svůj souhlas s dokumenty %1$s a %2$s.
+ Budete-li pokračovat, vyjadřujete svůj souhlas s dokumentem %1$s.
+ Budete-li pokračovat, vyjadřujete svůj souhlas s dokumentem %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrace…Heslo není dostatečně silné. Použijte alespoň %1$d znak a kombinaci písmen a číslicHeslo není dostatečně silné. Použijte alespoň %1$d znaky a kombinaci písmen a číslicHeslo není dostatečně silné. Použijte alespoň %1$d znaku a kombinaci písmen a číslicHeslo není dostatečně silné. Použijte alespoň %1$d znaků a kombinaci písmen a číslicRegistrace e-mailového účtu se nezdařila
- Klepnutím na možnost %1$s vyjadřujete svůj souhlas s dokumenty %2$s a %3$s.
- Klepnutím na možnost %1$s vyjadřujete svůj souhlas s dokumentem %2$s.
- Klepnutím na možnost %1$s vyjadřujete svůj souhlas s dokumentem %2$s.Smluvní podmínkyZásady ochrany soukromíJiž máte účet
@@ -65,4 +68,7 @@
Ověřit telefonní čísloPokračovatPo klepnutí na možnost %1$s může být odeslána SMS. Mohou být účtovány poplatky za zprávy a data.
+ Klepnutím na tlačítko %1$s vyjadřujete svůj souhlas s dokumenty %2$s a %3$s. Může být odeslána SMS a mohou být účtovány poplatky za zprávy a data.
+ Klepnutím na tlačítko %1$s vyjadřujete svůj souhlas s dokumentem %2$s. Může být odeslána SMS a mohou být účtovány poplatky za zprávy a data.
+ Klepnutím na tlačítko %1$s vyjadřujete svůj souhlas s dokumentem %2$s. Může být odeslána SMS a mohou být účtovány poplatky za zprávy a data.
diff --git a/auth/src/main/res/values-da/strings.xml b/auth/src/main/res/values-da/strings.xml
index a7c4a6a31..72f689d76 100755
--- a/auth/src/main/res/values-da/strings.xml
+++ b/auth/src/main/res/values-da/strings.xml
@@ -1,6 +1,12 @@
-
+Indlæser…Log ind
+ Ved at fortsætte indikerer du, at du accepterer vores %1$s og %2$s.
+ Ved at fortsætte indikerer du, at du accepterer vores %1$s.
+ Ved at fortsætte indikerer du, at du accepterer vores %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Tilmelder…Adgangskoden er ikke stærk nok. Brug mindst %1$d tegn og en blanding af bogstaver og talAdgangskoden er ikke stærk nok. Brug mindst %1$d tegn og en blanding af bogstaver og talRegistrering af mailkonto mislykkedes
- Ved at trykke på %1$s accepterer du %2$s og %3$s.
- Ved at trykke på %1$s accepterer du %2$s.
- Ved at trykke på %1$s accepterer du %2$s.ServicevilkårPrivatlivspolitikDu har allerede en konto
@@ -65,4 +68,7 @@
Bekræft telefonnummerFortsætNår du trykker på “%1$s”, sendes der måske en sms. Der opkræves muligvis gebyrer for beskeder og data.
+ Når du trykker på “%1$s”, indikerer du, at du accepterer vores %2$s og %3$s. Der sendes måske en sms. Der opkræves muligvis gebyrer for beskeder og data.
+ Når du trykker på “%1$s”, indikerer du, at du accepterer vores %2$s. Der sendes måske en sms. Der opkræves muligvis gebyrer for beskeder og data.
+ Når du trykker på “%1$s”, indikerer du, at du accepterer vores %2$s. Der sendes måske en sms. Der opkræves muligvis gebyrer for beskeder og data.
diff --git a/auth/src/main/res/values-de-rAT/strings.xml b/auth/src/main/res/values-de-rAT/strings.xml
index 08f9e4316..1909f450b 100755
--- a/auth/src/main/res/values-de-rAT/strings.xml
+++ b/auth/src/main/res/values-de-rAT/strings.xml
@@ -1,6 +1,12 @@
-
+Wird geladen…Anmelden
+ Indem Sie fortfahren, stimmen Sie unseren %1$s und unserer %2$s zu.
+ Indem Sie fortfahren, stimmen Sie unseren %1$s zu.
+ Indem Sie fortfahren, stimmen Sie unserer %1$s zu.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrierung wird durchgeführt…Das Passwort ist zu schwach. Verwenden Sie mindestens %1$d Zeichen und eine Mischung aus Buchstaben und Ziffern.Das Passwort ist zu schwach. Verwenden Sie mindestens %1$d Zeichen und eine Mischung aus Buchstaben und Ziffern.Registrierung des E-Mail-Kontos fehlgeschlagen
- Durch Tippen auf %1$s stimmen Sie den %2$s und der %3$s zu.
- Durch Tippen auf %1$s stimmen Sie den %2$s zu.
- Durch Tippen auf %1$s stimmen Sie der %2$s zu.NutzungsbedingungenDatenschutzerklärungSie haben bereits ein Konto
@@ -65,4 +68,7 @@
Telefonnummer bestätigenWeiterWenn Sie auf “%1$s” tippen, erhalten Sie möglicherweise eine SMS. Es können Gebühren für SMS und Datenübertragung anfallen.
+ Indem Sie auf “%1$s” tippen, stimmen Sie unseren %2$s und unserer %3$s zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen.
+ Indem Sie auf “%1$s” tippen, stimmen Sie unseren %2$s zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen.
+ Indem Sie auf “%1$s” tippen, stimmen Sie unserer %2$s zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen.
diff --git a/auth/src/main/res/values-de-rCH/strings.xml b/auth/src/main/res/values-de-rCH/strings.xml
index 08f9e4316..1909f450b 100755
--- a/auth/src/main/res/values-de-rCH/strings.xml
+++ b/auth/src/main/res/values-de-rCH/strings.xml
@@ -1,6 +1,12 @@
-
+Wird geladen…Anmelden
+ Indem Sie fortfahren, stimmen Sie unseren %1$s und unserer %2$s zu.
+ Indem Sie fortfahren, stimmen Sie unseren %1$s zu.
+ Indem Sie fortfahren, stimmen Sie unserer %1$s zu.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrierung wird durchgeführt…Das Passwort ist zu schwach. Verwenden Sie mindestens %1$d Zeichen und eine Mischung aus Buchstaben und Ziffern.Das Passwort ist zu schwach. Verwenden Sie mindestens %1$d Zeichen und eine Mischung aus Buchstaben und Ziffern.Registrierung des E-Mail-Kontos fehlgeschlagen
- Durch Tippen auf %1$s stimmen Sie den %2$s und der %3$s zu.
- Durch Tippen auf %1$s stimmen Sie den %2$s zu.
- Durch Tippen auf %1$s stimmen Sie der %2$s zu.NutzungsbedingungenDatenschutzerklärungSie haben bereits ein Konto
@@ -65,4 +68,7 @@
Telefonnummer bestätigenWeiterWenn Sie auf “%1$s” tippen, erhalten Sie möglicherweise eine SMS. Es können Gebühren für SMS und Datenübertragung anfallen.
+ Indem Sie auf “%1$s” tippen, stimmen Sie unseren %2$s und unserer %3$s zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen.
+ Indem Sie auf “%1$s” tippen, stimmen Sie unseren %2$s zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen.
+ Indem Sie auf “%1$s” tippen, stimmen Sie unserer %2$s zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen.
diff --git a/auth/src/main/res/values-de/strings.xml b/auth/src/main/res/values-de/strings.xml
index 08f9e4316..1909f450b 100755
--- a/auth/src/main/res/values-de/strings.xml
+++ b/auth/src/main/res/values-de/strings.xml
@@ -1,6 +1,12 @@
-
+Wird geladen…Anmelden
+ Indem Sie fortfahren, stimmen Sie unseren %1$s und unserer %2$s zu.
+ Indem Sie fortfahren, stimmen Sie unseren %1$s zu.
+ Indem Sie fortfahren, stimmen Sie unserer %1$s zu.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrierung wird durchgeführt…Das Passwort ist zu schwach. Verwenden Sie mindestens %1$d Zeichen und eine Mischung aus Buchstaben und Ziffern.Das Passwort ist zu schwach. Verwenden Sie mindestens %1$d Zeichen und eine Mischung aus Buchstaben und Ziffern.Registrierung des E-Mail-Kontos fehlgeschlagen
- Durch Tippen auf %1$s stimmen Sie den %2$s und der %3$s zu.
- Durch Tippen auf %1$s stimmen Sie den %2$s zu.
- Durch Tippen auf %1$s stimmen Sie der %2$s zu.NutzungsbedingungenDatenschutzerklärungSie haben bereits ein Konto
@@ -65,4 +68,7 @@
Telefonnummer bestätigenWeiterWenn Sie auf “%1$s” tippen, erhalten Sie möglicherweise eine SMS. Es können Gebühren für SMS und Datenübertragung anfallen.
+ Indem Sie auf “%1$s” tippen, stimmen Sie unseren %2$s und unserer %3$s zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen.
+ Indem Sie auf “%1$s” tippen, stimmen Sie unseren %2$s zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen.
+ Indem Sie auf “%1$s” tippen, stimmen Sie unserer %2$s zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen.
diff --git a/auth/src/main/res/values-el/strings.xml b/auth/src/main/res/values-el/strings.xml
index 54fbb7786..998fd2e45 100755
--- a/auth/src/main/res/values-el/strings.xml
+++ b/auth/src/main/res/values-el/strings.xml
@@ -1,6 +1,12 @@
-
+Γίνεται φόρτωση…Σύνδεση
+ Αν συνεχίσετε, δηλώνετε ότι αποδέχεστε τους %1$s και την %2$s.
+ Αν συνεχίσετε, δηλώνετε ότι αποδέχεστε τους %1$s.
+ Αν συνεχίσετε, δηλώνετε ότι αποδέχεστε την %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Γίνεται εγγραφή…Ο κωδικός πρόσβασης δεν είναι αρκετά ισχυρός. Χρησιμοποιήστε τουλάχιστον %1$d χαρακτήρα και έναν συνδυασμό γραμμάτων και αριθμώνΟ κωδικός πρόσβασης δεν είναι αρκετά ισχυρός. Χρησιμοποιήστε τουλάχιστον %1$d χαρακτήρες και έναν συνδυασμό γραμμάτων και αριθμώνΗ εγγραφή του λογαριασμού ηλεκτρονικού ταχυδρομείου δεν ήταν επιτυχής
- Αν πατήσετε %1$s, δηλώνετε ότι συμφωνείτε με τους %2$s και την %3$s.
- Αν πατήσετε %1$s, δηλώνετε ότι συμφωνείτε με τους %2$s.
- Αν πατήσετε %1$s, δηλώνετε ότι συμφωνείτε με την %2$s.Όρους Παροχής ΥπηρεσιώνΠολιτική απορρήτουΈχετε ήδη λογαριασμό
@@ -65,4 +68,7 @@
Επαλήθευση αριθμού τηλεφώνουΣυνέχειαΑν πατήσετε “%1$s”, μπορεί να σταλεί ένα SMS. Ενδέχεται να ισχύουν χρεώσεις μηνυμάτων και δεδομένων.
+ Αν πατήσετε “%1$s”, δηλώνετε ότι αποδέχεστε τους %2$s και την %3$s. Μπορεί να σταλεί ένα SMS. Ενδέχεται να ισχύουν χρεώσεις μηνυμάτων και δεδομένων.
+ Αν πατήσετε “%1$s”, δηλώνετε ότι αποδέχεστε τους %2$s. Μπορεί να σταλεί ένα SMS. Ενδέχεται να ισχύουν χρεώσεις μηνυμάτων και δεδομένων.
+ Αν πατήσετε “%1$s”, δηλώνετε ότι αποδέχεστε την %2$s. Μπορεί να σταλεί ένα SMS. Ενδέχεται να ισχύουν χρεώσεις μηνυμάτων και δεδομένων.
diff --git a/auth/src/main/res/values-en-rAU/strings.xml b/auth/src/main/res/values-en-rAU/strings.xml
index 395bd0fce..398144aad 100755
--- a/auth/src/main/res/values-en-rAU/strings.xml
+++ b/auth/src/main/res/values-en-rAU/strings.xml
@@ -1,6 +1,12 @@
-
+Loading…Sign in
+ By continuing, you are indicating that you accept our %1$s and %2$s.
+ By continuing, you are indicating that you accept our %1$s.
+ By continuing, you are indicating that you accept our %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Signing up…Password not strong enough. Use at least %1$d character and a mix of letters and numbersPassword not strong enough. Use at least %1$d characters and a mix of letters and numbersEmail account registration unsuccessful
- By tapping %1$s you are indicating that you agree to the %2$s and the %3$s.
- By tapping %1$s you are indicating that you agree to the %2$s.
- By tapping %1$s you are indicating that you agree to the %2$s.Terms of ServicePrivacy PolicyYou already have an account
@@ -65,4 +68,7 @@
Verify Phone NumberContinueBy tapping “%1$s”, an SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s and %3$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
diff --git a/auth/src/main/res/values-en-rCA/strings.xml b/auth/src/main/res/values-en-rCA/strings.xml
index 395bd0fce..398144aad 100755
--- a/auth/src/main/res/values-en-rCA/strings.xml
+++ b/auth/src/main/res/values-en-rCA/strings.xml
@@ -1,6 +1,12 @@
-
+Loading…Sign in
+ By continuing, you are indicating that you accept our %1$s and %2$s.
+ By continuing, you are indicating that you accept our %1$s.
+ By continuing, you are indicating that you accept our %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Signing up…Password not strong enough. Use at least %1$d character and a mix of letters and numbersPassword not strong enough. Use at least %1$d characters and a mix of letters and numbersEmail account registration unsuccessful
- By tapping %1$s you are indicating that you agree to the %2$s and the %3$s.
- By tapping %1$s you are indicating that you agree to the %2$s.
- By tapping %1$s you are indicating that you agree to the %2$s.Terms of ServicePrivacy PolicyYou already have an account
@@ -65,4 +68,7 @@
Verify Phone NumberContinueBy tapping “%1$s”, an SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s and %3$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
diff --git a/auth/src/main/res/values-en-rGB/strings.xml b/auth/src/main/res/values-en-rGB/strings.xml
index 395bd0fce..398144aad 100755
--- a/auth/src/main/res/values-en-rGB/strings.xml
+++ b/auth/src/main/res/values-en-rGB/strings.xml
@@ -1,6 +1,12 @@
-
+Loading…Sign in
+ By continuing, you are indicating that you accept our %1$s and %2$s.
+ By continuing, you are indicating that you accept our %1$s.
+ By continuing, you are indicating that you accept our %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Signing up…Password not strong enough. Use at least %1$d character and a mix of letters and numbersPassword not strong enough. Use at least %1$d characters and a mix of letters and numbersEmail account registration unsuccessful
- By tapping %1$s you are indicating that you agree to the %2$s and the %3$s.
- By tapping %1$s you are indicating that you agree to the %2$s.
- By tapping %1$s you are indicating that you agree to the %2$s.Terms of ServicePrivacy PolicyYou already have an account
@@ -65,4 +68,7 @@
Verify Phone NumberContinueBy tapping “%1$s”, an SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s and %3$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
diff --git a/auth/src/main/res/values-en-rIE/strings.xml b/auth/src/main/res/values-en-rIE/strings.xml
index 395bd0fce..398144aad 100755
--- a/auth/src/main/res/values-en-rIE/strings.xml
+++ b/auth/src/main/res/values-en-rIE/strings.xml
@@ -1,6 +1,12 @@
-
+Loading…Sign in
+ By continuing, you are indicating that you accept our %1$s and %2$s.
+ By continuing, you are indicating that you accept our %1$s.
+ By continuing, you are indicating that you accept our %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Signing up…Password not strong enough. Use at least %1$d character and a mix of letters and numbersPassword not strong enough. Use at least %1$d characters and a mix of letters and numbersEmail account registration unsuccessful
- By tapping %1$s you are indicating that you agree to the %2$s and the %3$s.
- By tapping %1$s you are indicating that you agree to the %2$s.
- By tapping %1$s you are indicating that you agree to the %2$s.Terms of ServicePrivacy PolicyYou already have an account
@@ -65,4 +68,7 @@
Verify Phone NumberContinueBy tapping “%1$s”, an SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s and %3$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
diff --git a/auth/src/main/res/values-en-rIN/strings.xml b/auth/src/main/res/values-en-rIN/strings.xml
index 395bd0fce..398144aad 100755
--- a/auth/src/main/res/values-en-rIN/strings.xml
+++ b/auth/src/main/res/values-en-rIN/strings.xml
@@ -1,6 +1,12 @@
-
+Loading…Sign in
+ By continuing, you are indicating that you accept our %1$s and %2$s.
+ By continuing, you are indicating that you accept our %1$s.
+ By continuing, you are indicating that you accept our %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Signing up…Password not strong enough. Use at least %1$d character and a mix of letters and numbersPassword not strong enough. Use at least %1$d characters and a mix of letters and numbersEmail account registration unsuccessful
- By tapping %1$s you are indicating that you agree to the %2$s and the %3$s.
- By tapping %1$s you are indicating that you agree to the %2$s.
- By tapping %1$s you are indicating that you agree to the %2$s.Terms of ServicePrivacy PolicyYou already have an account
@@ -65,4 +68,7 @@
Verify Phone NumberContinueBy tapping “%1$s”, an SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s and %3$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
diff --git a/auth/src/main/res/values-en-rSG/strings.xml b/auth/src/main/res/values-en-rSG/strings.xml
index 395bd0fce..398144aad 100755
--- a/auth/src/main/res/values-en-rSG/strings.xml
+++ b/auth/src/main/res/values-en-rSG/strings.xml
@@ -1,6 +1,12 @@
-
+Loading…Sign in
+ By continuing, you are indicating that you accept our %1$s and %2$s.
+ By continuing, you are indicating that you accept our %1$s.
+ By continuing, you are indicating that you accept our %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Signing up…Password not strong enough. Use at least %1$d character and a mix of letters and numbersPassword not strong enough. Use at least %1$d characters and a mix of letters and numbersEmail account registration unsuccessful
- By tapping %1$s you are indicating that you agree to the %2$s and the %3$s.
- By tapping %1$s you are indicating that you agree to the %2$s.
- By tapping %1$s you are indicating that you agree to the %2$s.Terms of ServicePrivacy PolicyYou already have an account
@@ -65,4 +68,7 @@
Verify Phone NumberContinueBy tapping “%1$s”, an SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s and %3$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
diff --git a/auth/src/main/res/values-en-rZA/strings.xml b/auth/src/main/res/values-en-rZA/strings.xml
index 395bd0fce..398144aad 100755
--- a/auth/src/main/res/values-en-rZA/strings.xml
+++ b/auth/src/main/res/values-en-rZA/strings.xml
@@ -1,6 +1,12 @@
-
+Loading…Sign in
+ By continuing, you are indicating that you accept our %1$s and %2$s.
+ By continuing, you are indicating that you accept our %1$s.
+ By continuing, you are indicating that you accept our %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Signing up…Password not strong enough. Use at least %1$d character and a mix of letters and numbersPassword not strong enough. Use at least %1$d characters and a mix of letters and numbersEmail account registration unsuccessful
- By tapping %1$s you are indicating that you agree to the %2$s and the %3$s.
- By tapping %1$s you are indicating that you agree to the %2$s.
- By tapping %1$s you are indicating that you agree to the %2$s.Terms of ServicePrivacy PolicyYou already have an account
@@ -65,4 +68,7 @@
Verify Phone NumberContinueBy tapping “%1$s”, an SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s and %3$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
diff --git a/auth/src/main/res/values-es-rAR/strings.xml b/auth/src/main/res/values-es-rAR/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rAR/strings.xml
+++ b/auth/src/main/res/values-es-rAR/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rBO/strings.xml b/auth/src/main/res/values-es-rBO/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rBO/strings.xml
+++ b/auth/src/main/res/values-es-rBO/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rCL/strings.xml b/auth/src/main/res/values-es-rCL/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rCL/strings.xml
+++ b/auth/src/main/res/values-es-rCL/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rCO/strings.xml b/auth/src/main/res/values-es-rCO/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rCO/strings.xml
+++ b/auth/src/main/res/values-es-rCO/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rCR/strings.xml b/auth/src/main/res/values-es-rCR/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rCR/strings.xml
+++ b/auth/src/main/res/values-es-rCR/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rDO/strings.xml b/auth/src/main/res/values-es-rDO/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rDO/strings.xml
+++ b/auth/src/main/res/values-es-rDO/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rEC/strings.xml b/auth/src/main/res/values-es-rEC/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rEC/strings.xml
+++ b/auth/src/main/res/values-es-rEC/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rGT/strings.xml b/auth/src/main/res/values-es-rGT/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rGT/strings.xml
+++ b/auth/src/main/res/values-es-rGT/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rHN/strings.xml b/auth/src/main/res/values-es-rHN/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rHN/strings.xml
+++ b/auth/src/main/res/values-es-rHN/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rMX/strings.xml b/auth/src/main/res/values-es-rMX/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rMX/strings.xml
+++ b/auth/src/main/res/values-es-rMX/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rNI/strings.xml b/auth/src/main/res/values-es-rNI/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rNI/strings.xml
+++ b/auth/src/main/res/values-es-rNI/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rPA/strings.xml b/auth/src/main/res/values-es-rPA/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rPA/strings.xml
+++ b/auth/src/main/res/values-es-rPA/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rPE/strings.xml b/auth/src/main/res/values-es-rPE/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rPE/strings.xml
+++ b/auth/src/main/res/values-es-rPE/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rPR/strings.xml b/auth/src/main/res/values-es-rPR/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rPR/strings.xml
+++ b/auth/src/main/res/values-es-rPR/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rPY/strings.xml b/auth/src/main/res/values-es-rPY/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rPY/strings.xml
+++ b/auth/src/main/res/values-es-rPY/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rSV/strings.xml b/auth/src/main/res/values-es-rSV/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rSV/strings.xml
+++ b/auth/src/main/res/values-es-rSV/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rUS/strings.xml b/auth/src/main/res/values-es-rUS/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rUS/strings.xml
+++ b/auth/src/main/res/values-es-rUS/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rUY/strings.xml b/auth/src/main/res/values-es-rUY/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rUY/strings.xml
+++ b/auth/src/main/res/values-es-rUY/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es-rVE/strings.xml b/auth/src/main/res/values-es-rVE/strings.xml
index 127da3e45..e866cf722 100755
--- a/auth/src/main/res/values-es-rVE/strings.xml
+++ b/auth/src/main/res/values-es-rVE/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Acceder
+ Si continúas, indicas que aceptas nuestras %1$s y %2$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ Si continúas, indicas que aceptas nuestras %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa al menos %1$d carácter y una combinación de letras y númerosLa contraseña no es lo suficientemente segura. Usa al menos %1$d caracteres y una combinación de letras y númerosNo se pudo registrar la cuenta de correo electrónico
- Si presionas %1$s, indicas que aceptas las %2$s y la %3$s.
- Si presionas %1$s, indicas que aceptas las %2$s.
- Si presionas %1$s, indicas que aceptas la %2$s.Condiciones del servicioPolítica de privacidadYa tienes una cuenta
@@ -65,4 +68,7 @@
Verificar número de teléfonoContinuarSi presionas “%1$s”, se enviará un SMS. Se aplicarán las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s y %3$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
+ Si presionas “%1$s”, indicas que aceptas nuestras %2$s. Es posible que se te envíe un SMS. Podrían aplicarse las tarifas de mensajes y datos.
diff --git a/auth/src/main/res/values-es/strings.xml b/auth/src/main/res/values-es/strings.xml
index 749e1fe39..fde709c50 100755
--- a/auth/src/main/res/values-es/strings.xml
+++ b/auth/src/main/res/values-es/strings.xml
@@ -1,6 +1,12 @@
-
+Cargando…Iniciar sesión
+ Si continúas, confirmas que aceptas nuestras %1$s y nuestra %2$s.
+ Si continúas, confirmas que aceptas nuestras %1$s.
+ Si continúas, confirmas que aceptas nuestra %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrando…La contraseña no es lo suficientemente segura. Usa %1$d carácter como mínimo y combina letras y números.La contraseña no es lo suficientemente segura. Usa %1$d caracteres como mínimo y combina letras y números.No se ha podido registrar la cuenta de correo electrónico
- Al tocar %1$s, indicas que aceptas las %2$s y la %3$s.
- Al tocar %1$s, indicas que aceptas las %2$s.
- Al tocar %1$s, indicas que aceptas la %2$s.Condiciones de ServicioPolítica de PrivacidadYa tienes una cuenta
@@ -64,5 +67,8 @@
Volver a enviar códigoVerificar número de teléfonoContinuar
- Al tocar “%1$s”, podría enviarse un SMS. Es posible que se apliquen cargos de mensajería y de uso de datos.
+ Al tocar %1$s, podría enviarse un SMS. Es posible que se apliquen cargos de mensajería y de uso de datos.
+ Si tocas %1$s, confirmas que aceptas nuestras %2$s y nuestra %3$s. Podría enviarse un SMS, por lo que es posible que se apliquen cargos de mensajería y de uso de datos.
+ Si tocas %1$s, confirmas que aceptas nuestras %2$s. Podría enviarse un SMS, por lo que es posible que se apliquen cargos de mensajería y de uso de datos.
+ Si tocas %1$s, confirmas que aceptas nuestra %2$s. Podría enviarse un SMS, por lo que es posible que se apliquen cargos de mensajería y de uso de datos.
diff --git a/auth/src/main/res/values-fa/strings.xml b/auth/src/main/res/values-fa/strings.xml
index 564d3f521..6cf8eeb74 100755
--- a/auth/src/main/res/values-fa/strings.xml
+++ b/auth/src/main/res/values-fa/strings.xml
@@ -1,6 +1,12 @@
-
+درحال بارگیری…ورود به سیستم
+ درصورت ادامهدادن، موافقتتان را با %1$s و %2$s اعلام میکنید.
+ درصورت ادامهدادن موافقتتان را با %1$s اعلام میکنید.
+ درصورت ادامهدادن موافقتتان را با %1$s اعلام میکنید.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
در حال ثبتنام…گذرواژه به اندازه کافی قوی نیست. حداقل باید از %1$d نویسه و ترکیبی از حروف و اعداد استفاده شودگذرواژه به اندازه کافی قوی نیست. حداقل باید از %1$d نویسه و ترکیبی از حروف و اعداد استفاده شودثبت حساب رایانامه ناموفق بود
- با ضربه زدن روی %1$s موافقتتان را با %2$s و %3$s اعلام میکنید.
- با ضربه زدن روی %1$s موافقتتان را با %2$s اعلام میکنید.
- با ضربه زدن روی %1$s موافقتتان را با %2$s اعلام میکنید.شرایط خدمات«خطمشی حریم خصوصی»از قبل حسابی دارید
@@ -65,4 +68,7 @@
تأیید شماره تلفنادامهبا ضربه زدن روی «%1$s»، پیامکی برایتان ارسال میشود. هزینه پیام و داده اعمال میشود.
+ درصورت ضربهزدن روی «%1$s»، موافقتتان را با %2$s و %3$s اعلام میکنید. پیامکی ارسال میشود. ممکن است هزینه داده و «پیام» محاسبه شود.
+ درصورت ضربهزدن روی «%1$s»، موافقتتان را با %2$s اعلام میکنید. پیامکی ارسال میشود. ممکن است هزینه داده و «پیام» محاسبه شود.
+ درصورت ضربهزدن روی «%1$s»، موافقتتان را با %2$s اعلام میکنید. پیامکی ارسال میشود. ممکن است هزینه داده و «پیام» محاسبه شود.
diff --git a/auth/src/main/res/values-fi/strings.xml b/auth/src/main/res/values-fi/strings.xml
index d78ed6328..0c745d4f8 100755
--- a/auth/src/main/res/values-fi/strings.xml
+++ b/auth/src/main/res/values-fi/strings.xml
@@ -1,6 +1,12 @@
-
+Ladataan…Kirjaudu sisään
+ Jatkamalla vahvistat, että hyväksyt seuraavat: %1$s ja %2$s.
+ Jatkamalla vahvistat, että hyväksyt %1$s.
+ Jatkamalla vahvistat, että hyväksyt seuraavan: %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Rekisteröityminen käynnissä…Salasana ei ole tarpeeksi vahva. Siinä on oltava vähintään %1$d merkkiä – sekä kirjaimia että numeroita.Salasana ei ole tarpeeksi vahva. Siinä on oltava vähintään %1$d merkkiä – sekä kirjaimia että numeroita.Sähköpostitilin rekisteröinti epäonnistui.
- Valitsemalla %1$s vahvistat, että hyväksyt %2$s ja %3$s.
- Valitsemalla %1$s vahvistat, että hyväksyt %2$s.
- Valitsemalla %1$s vahvistat, että hyväksyt %2$s.KäyttöehdottietosuojakäytännönSinulla on jo tili.
@@ -65,4 +68,7 @@
Vahvista puhelinnumeroJatkaKun napautat %1$s, tekstiviesti voidaan lähettää. Datan ja viestien käyttö voi olla maksullista.
+ Napauttamalla %1$s vahvistat hyväksyväsi seuraavat: %2$s ja %3$s. Tekstiviesti voidaan lähettää, ja datan ja viestien käyttö voi olla maksullista.
+ Napauttamalla %1$s vahvistat hyväksyväsi %2$s. Tekstiviesti voidaan lähettää, ja datan ja viestien käyttö voi olla maksullista.
+ Napauttamalla %1$s vahvistat hyväksyväsi seuraavan: %2$s. Tekstiviesti voidaan lähettää, ja datan ja viestien käyttö voi olla maksullista.
diff --git a/auth/src/main/res/values-fil/strings.xml b/auth/src/main/res/values-fil/strings.xml
index 421cd5796..6eddc0122 100755
--- a/auth/src/main/res/values-fil/strings.xml
+++ b/auth/src/main/res/values-fil/strings.xml
@@ -1,6 +1,12 @@
-
+Naglo-load…Mag-sign in
+ Sa pagpapatuloy, ipinababatid mo na tinatanggap mo ang aming %1$s at %2$s.
+ Sa pagpapatuloy, ipinababatid mo na tinatanggap mo ang aming %1$s.
+ Sa pagpapatuloy, ipinababatid mo na tinatanggap mo ang aming %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFecebookTwitter
@@ -23,9 +29,6 @@
Nagsa-sign up…Hindi masyadong malakas ang password. Gumamit ng %1$d character man lang at kumbinasyon ng mga titik at mga numeroHindi masyadong malakas ang password. Gumamit ng %1$d na character man lang at kumbinasyon ng mga titik at mga numeroHindi nagtagumpay ang pagpaparehistro ng email account
- Sa pag-tap sa %1$s, ipinababatid mo na sang-ayon ka sa %2$s at sa %3$s.
- Sa pag-tap sa %1$s, ipinababatid mo na sang-ayon ka sa %2$s.
- Sa pag-tap sa %1$s, ipinababatid mo na sang-ayon ka sa %2$s.Mga Tuntunin ng SerbisyoPatakaran sa PrivacyMayroon ka nang account
@@ -65,4 +68,7 @@
I-verify ang Numero ng TeleponoMagpatuloySa pag-tap sa “%1$s,“ maaaring magpadala ng SMS. Maaaring ipatupad ang mga rate ng pagmemensahe at data.
+ Sa pag-tap sa “%1$s”, ipinababatid mo na tinatanggap mo ang aming %2$s at %3$s. Maaaring magpadala ng SMS. Maaaring ipatupad ang mga rate ng pagmemensahe at data.
+ Sa pag-tap sa “%1$s”, ipinababatid mo na tinatanggap mo ang aming %2$s. Maaaring magpadala ng SMS. Maaaring ipatupad ang mga rate ng pagmemensahe at data.
+ Sa pag-tap sa “%1$s”, ipinababatid mo na tinatanggap mo ang aming %2$s. Maaaring magpadala ng SMS. Maaaring ipatupad ang mga rate ng pagmemensahe at data.
diff --git a/auth/src/main/res/values-fr-rCH/strings.xml b/auth/src/main/res/values-fr-rCH/strings.xml
index b570f5c1f..c89153c43 100755
--- a/auth/src/main/res/values-fr-rCH/strings.xml
+++ b/auth/src/main/res/values-fr-rCH/strings.xml
@@ -1,6 +1,12 @@
-
+Chargement…Se connecter
+ En continuant, vous acceptez les %1$s et les %2$s.
+ En continuant, vous acceptez les %1$s.
+ En continuant, vous acceptez les %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Inscription…Le mot de passe n\'est pas assez sécurisé. Utilisez au moins %1$d caractère et une combinaison de chiffres et de lettres.Le mot de passe n\'est pas assez sécurisé. Utilisez au moins %1$d caractères et une combinaison de chiffres et de lettres.Échec de la création du compte avec une adresse e-mail
- En appuyant sur %1$s, vous acceptez les %2$s et les %3$s.
- En appuyant sur %1$s, vous acceptez les %2$s.
- En appuyant sur %1$s, vous acceptez les %2$s.Conditions d\'utilisationRègles de confidentialitéVous avez déjà un compte
@@ -65,4 +68,7 @@
Valider le numéro de téléphoneContinuerEn appuyant sur “%1$s”, vous déclencherez peut-être l\'envoi d\'un SMS. Des frais de messages et de données peuvent être facturés.
+ En appuyant sur “%1$s”, vous acceptez les %2$s et les %3$s. Vous déclencherez peut-être l\'envoi d\'un SMS. Des frais de messages et de données peuvent être facturés.
+ En appuyant sur “%1$s”, vous acceptez les %2$s. Vous déclencherez peut-être l\'envoi d\'un SMS. Des frais de messages et de données peuvent être facturés.
+ En appuyant sur “%1$s”, vous acceptez les %2$s. Vous déclencherez peut-être l\'envoi d\'un SMS. Des frais de messages et de données peuvent être facturés.
diff --git a/auth/src/main/res/values-fr/strings.xml b/auth/src/main/res/values-fr/strings.xml
index b570f5c1f..c89153c43 100755
--- a/auth/src/main/res/values-fr/strings.xml
+++ b/auth/src/main/res/values-fr/strings.xml
@@ -1,6 +1,12 @@
-
+Chargement…Se connecter
+ En continuant, vous acceptez les %1$s et les %2$s.
+ En continuant, vous acceptez les %1$s.
+ En continuant, vous acceptez les %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Inscription…Le mot de passe n\'est pas assez sécurisé. Utilisez au moins %1$d caractère et une combinaison de chiffres et de lettres.Le mot de passe n\'est pas assez sécurisé. Utilisez au moins %1$d caractères et une combinaison de chiffres et de lettres.Échec de la création du compte avec une adresse e-mail
- En appuyant sur %1$s, vous acceptez les %2$s et les %3$s.
- En appuyant sur %1$s, vous acceptez les %2$s.
- En appuyant sur %1$s, vous acceptez les %2$s.Conditions d\'utilisationRègles de confidentialitéVous avez déjà un compte
@@ -65,4 +68,7 @@
Valider le numéro de téléphoneContinuerEn appuyant sur “%1$s”, vous déclencherez peut-être l\'envoi d\'un SMS. Des frais de messages et de données peuvent être facturés.
+ En appuyant sur “%1$s”, vous acceptez les %2$s et les %3$s. Vous déclencherez peut-être l\'envoi d\'un SMS. Des frais de messages et de données peuvent être facturés.
+ En appuyant sur “%1$s”, vous acceptez les %2$s. Vous déclencherez peut-être l\'envoi d\'un SMS. Des frais de messages et de données peuvent être facturés.
+ En appuyant sur “%1$s”, vous acceptez les %2$s. Vous déclencherez peut-être l\'envoi d\'un SMS. Des frais de messages et de données peuvent être facturés.
diff --git a/auth/src/main/res/values-gsw/strings.xml b/auth/src/main/res/values-gsw/strings.xml
index 08f9e4316..1909f450b 100755
--- a/auth/src/main/res/values-gsw/strings.xml
+++ b/auth/src/main/res/values-gsw/strings.xml
@@ -1,6 +1,12 @@
-
+Wird geladen…Anmelden
+ Indem Sie fortfahren, stimmen Sie unseren %1$s und unserer %2$s zu.
+ Indem Sie fortfahren, stimmen Sie unseren %1$s zu.
+ Indem Sie fortfahren, stimmen Sie unserer %1$s zu.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrierung wird durchgeführt…Das Passwort ist zu schwach. Verwenden Sie mindestens %1$d Zeichen und eine Mischung aus Buchstaben und Ziffern.Das Passwort ist zu schwach. Verwenden Sie mindestens %1$d Zeichen und eine Mischung aus Buchstaben und Ziffern.Registrierung des E-Mail-Kontos fehlgeschlagen
- Durch Tippen auf %1$s stimmen Sie den %2$s und der %3$s zu.
- Durch Tippen auf %1$s stimmen Sie den %2$s zu.
- Durch Tippen auf %1$s stimmen Sie der %2$s zu.NutzungsbedingungenDatenschutzerklärungSie haben bereits ein Konto
@@ -65,4 +68,7 @@
Telefonnummer bestätigenWeiterWenn Sie auf “%1$s” tippen, erhalten Sie möglicherweise eine SMS. Es können Gebühren für SMS und Datenübertragung anfallen.
+ Indem Sie auf “%1$s” tippen, stimmen Sie unseren %2$s und unserer %3$s zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen.
+ Indem Sie auf “%1$s” tippen, stimmen Sie unseren %2$s zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen.
+ Indem Sie auf “%1$s” tippen, stimmen Sie unserer %2$s zu. Sie erhalten möglicherweise eine SMS und es können Gebühren für die Nachricht und die Datenübertragung anfallen.
diff --git a/auth/src/main/res/values-gu/strings.xml b/auth/src/main/res/values-gu/strings.xml
index 22dfb9c47..febf5bfaf 100755
--- a/auth/src/main/res/values-gu/strings.xml
+++ b/auth/src/main/res/values-gu/strings.xml
@@ -1,6 +1,12 @@
-
+લોડ કરી રહ્યું છે…સાઇન ઇન કરો
+ ચાલુ રાખીને, તમે સૂચવી રહ્યાં છો કે તમે અમારી %1$s અને %2$sને સ્વીકારો છો.
+ ચાલુ રાખીને, તમે સૂચવી રહ્યાં છો કે તમે અમારી %1$sને સ્વીકારો છો.
+ ચાલુ રાખીને, તમે સૂચવી રહ્યાં છો કે તમે અમારી %1$sને સ્વીકારો છો.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
સાઇન અપ કરી રહ્યાં છીએ…પાસવર્ડ પૂરતો સશક્ત નથી. ઓછામાં ઓછા %1$d અક્ષર અને વર્ણ તથા સંખ્યાઓના સંયોજનનો ઉપયોગ કરોપાસવર્ડ પૂરતો સશક્ત નથી. ઓછામાં ઓછા %1$d અક્ષર અને વર્ણ તથા સંખ્યાઓના સંયોજનનો ઉપયોગ કરોઇમેઇલ એકાઉન્ટની નોંધણી અસફળ
- %1$s ટૅપ કરીને, તમે સૂચવો છો કે તમે %2$s અને %3$s સાથે સંમત થાઓ છો.
- %1$s ટૅપ કરીને, તમે સૂચવો છો કે તમે %2$s સાથે સંમત થાઓ છો.
- %1$s ટૅપ કરીને, તમે સૂચવો છો કે તમે %2$s સાથે સંમત થાઓ છો.સેવાની શરતોગોપનીયતા નીતિતમારી પાસે પહેલેથી જ એક એકાઉન્ટ છે
@@ -65,4 +68,7 @@
ફોન નંબર ચકાસોઆગળ વધો“%1$s”ને ટૅપ કરવાથી, કદાચ એક SMS મોકલવામાં આવી શકે છે. સંદેશ અને ડેટા શુલ્ક લાગુ થઈ શકે છે.
+ “%1$s” ટૅપ કરીને, તમે સૂચવી રહ્યાં છો કે તમે અમારી %2$s અને %3$sને સ્વીકારો છો. SMS મોકલવામાં આવી શકે છે. સંદેશ અને ડેટા શુલ્ક લાગુ થઈ શકે છે.
+ “%1$s” ટૅપ કરીને, તમે સૂચવી રહ્યાં છો કે તમે અમારી %2$sને સ્વીકારો છો. SMS મોકલવામાં આવી શકે છે. સંદેશ અને ડેટા શુલ્ક લાગુ થઈ શકે છે.
+ “%1$s” ટૅપ કરીને, તમે સૂચવી રહ્યાં છો કે તમે અમારી %2$sને સ્વીકારો છો. SMS મોકલવામાં આવી શકે છે. સંદેશ અને ડેટા શુલ્ક લાગુ થઈ શકે છે.
diff --git a/auth/src/main/res/values-hi/strings.xml b/auth/src/main/res/values-hi/strings.xml
index f82909699..af4147e76 100755
--- a/auth/src/main/res/values-hi/strings.xml
+++ b/auth/src/main/res/values-hi/strings.xml
@@ -1,6 +1,12 @@
-
+लोड हो रहा है…प्रवेश करें
+ जारी रखकर, आप यह बताते हैं कि आप हमारी %1$s और %2$s को मंज़ूर करते हैं.
+ जारी रखकर, आप यह बताते हैं कि आप हमारी %1$s मंज़ूर करते हैं.
+ जारी रखकर, आप यह बताते हैं कि आप हमारी %1$s मंज़ूर करते हैं.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
साइन अप करना…पासवर्ड पर्याप्त रूप से मजबूत नहीं है. कम से कम %1$d वर्णों का उपयोग करें जो अक्षरों और नंबरों दोनों को मिलाकर बना होपासवर्ड पर्याप्त रूप से मजबूत नहीं है. कम से कम %1$d वर्णों का उपयोग करें जो अक्षरों और नंबरों दोनों को मिलाकर बना होईमेल खाता पंजीकरण असफल रहा
- %1$s पर टैप करके आप बताते हैं कि आप %2$s और %3$s से सहमत हैं.
- %1$s पर टैप करके आप बताते हैं कि आप %2$s से सहमत हैं.
- %1$s पर टैप करके आप बताते हैं कि आप %2$s से सहमत हैं.सेवा की शर्तेंनिजता नीतिआपके पास पहले से ही एक खाता है
@@ -41,7 +44,7 @@
अपना पासवर्ड फिर से पाने के लिए %1$s पर भेजे गए निर्देशों का पालन करें.भेज रहा है…वह ईमेल पता किसी मौजूदा खाते से मेल नहीं खाता है
- कोई अज्ञात गड़बड़ी हुई है.
+ ऐसी गड़बड़ी हुई है, जिसके बारे में पता नहीं है.गलत पासवर्ड.ऐप्लिकेशन लोगोअपना फ़ोन नंबर डालें
@@ -64,5 +67,8 @@
कोड फिर से भेजेंफ़ोन नंबर की पुष्टि करेंजारी रखें
- “%1$s” पर टैप करने पर, एक SMS भेजा जा सकता है. मैसेज और डेटा दरें लागू हो सकती हैं.
+ “%1$s” पर टैप करने पर, एक मैसेज (एसएमएस) भेजा जा सकता है. मैसेज और डेटा दरें लागू हो सकती हैं.
+ “%1$s” पर टैप करके, आप यह बताते हैं कि आप हमारी %2$s और %3$s को मंज़ूर करते हैं. एक मैसेज (एसएमएस) भेजा जा सकता है. मैसेज और डेटा दरें लागू हो सकती हैं.
+ “%1$s” पर टैप करके, आप यह बताते हैं कि आप हमारी %2$s मंज़ूर करते हैं. एक मैसेज (एसएमएस) भेजा जा सकता है. मैसेज और डेटा दरें लागू हो सकती हैं.
+ “%1$s” पर टैप करके, आप यह बताते हैं कि आप हमारी %2$s मंज़ूर करते हैं. एक मैसेज (एसएमएस) भेजा जा सकता है. मैसेज और डेटा दरें लागू हो सकती हैं.
diff --git a/auth/src/main/res/values-hr/strings.xml b/auth/src/main/res/values-hr/strings.xml
index 62f13ae6a..3cbfabf82 100755
--- a/auth/src/main/res/values-hr/strings.xml
+++ b/auth/src/main/res/values-hr/strings.xml
@@ -1,6 +1,12 @@
-
+Učitavanje…Prijava
+ Ako nastavite, potvrđujete da prihvaćate odredbe koje sadrže %1$s i %2$s.
+ Ako nastavite, potvrđujete da prihvaćate odredbe koje sadrži %1$s.
+ Ako nastavite, potvrđujete da prihvaćate odredbe koje sadrži %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registriranje….Zaporka nije dovoljno jaka. Upotrijebite najmanje %1$d znak i koristite kombinaciju slova i znamenki.Zaporka nije dovoljno jaka. Upotrijebite najmanje %1$d znaka i koristite kombinaciju slova i znamenki.Zaporka nije dovoljno jaka. Upotrijebite najmanje %1$d znakova i koristite kombinaciju slova i znamenki.Registracija računa putem e-adrese nije uspjela
- Dodirivanjem gumba %1$s potvrđujete da prihvaćate odredbe koje sadrže %2$s i %3$s.
- Dodirivanjem gumba %1$s potvrđujete da prihvaćate odredbe koje sadrže %2$s.
- Dodirivanjem gumba %1$s potvrđujete da prihvaćate odredbe koje sadrže %2$s.Uvjeti pružanja uslugePravila o privatnostiVeć imate račun
@@ -65,4 +68,7 @@
Potvrda telefonskog brojaNastaviDodirivanje gumba “%1$s” može dovesti do slanja SMS poruke. Mogu se primijeniti naknade za slanje poruka i podatkovni promet.
+ Ako dodirnete “%1$s”, potvrđujete da prihvaćate odredbe koje sadrže %2$s i %3$s. Možda ćemo vam poslati SMS. Moguća je naplata poruke i podatkovnog prometa.
+ Ako dodirnete “%1$s”, potvrđujete da prihvaćate odredbe koje sadrži %2$s. Možda ćemo vam poslati SMS. Moguća je naplata poruke i podatkovnog prometa.
+ Ako dodirnete “%1$s”, potvrđujete da prihvaćate odredbe koje sadrži %2$s. Možda ćemo vam poslati SMS. Moguća je naplata poruke i podatkovnog prometa.
diff --git a/auth/src/main/res/values-hu/strings.xml b/auth/src/main/res/values-hu/strings.xml
index 85f597473..27ced0ba1 100755
--- a/auth/src/main/res/values-hu/strings.xml
+++ b/auth/src/main/res/values-hu/strings.xml
@@ -1,6 +1,12 @@
-
+Betöltés…Bejelentkezés
+ A folytatással elfogadja a következő dokumentumokat: %1$s és %2$s.
+ A folytatással elfogadja a következő dokumentumot: %1$s.
+ A folytatással elfogadja a következő dokumentumot: %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Regisztráció…A jelszó nem elég erős. Legalább %1$d karaktert használjon, amelyben betűk és számok is szerepeljenek.A jelszó nem elég erős. Legalább %1$d karaktert használjon, amelyben betűk és számok is szerepeljenek.Az e-mail-fiók regisztrációja sikertelen volt.
- Ha a(z) %1$s gombra koppint, az azt jelenti, hogy elfogadja a következőket: %2$s és %3$s.
- Ha a(z) %1$s gombra koppint, az azt jelenti, hogy elfogadja a következőt: %2$s.
- Ha a(z) %1$s gombra koppint, az azt jelenti, hogy elfogadja a következőt: %2$s.Általános Szerződési FeltételekAdatvédelmi irányelvekMár rendelkezik fiókkal
@@ -65,4 +68,7 @@
Telefonszám igazolásaFolytatásHa a(z) „%1$s” gombra koppint, a rendszer SMS-t küldhet Önnek. A szolgáltató ezért üzenet- és adatforgalmi díjat számíthat fel.
+ A(z) „%1$s” gombra való koppintással elfogadja a következő dokumentumokat: %2$s és %3$s. A rendszer SMS-t küldhet Önnek. A szolgáltató ezért üzenet- és adatforgalmi díjat számíthat fel.
+ A(z) „%1$s” gombra való koppintással elfogadja a következő dokumentumot: %2$s. A rendszer SMS-t küldhet Önnek. A szolgáltató ezért üzenet- és adatforgalmi díjat számíthat fel.
+ A(z) „%1$s” gombra való koppintással elfogadja a következő dokumentumot: %2$s. A rendszer SMS-t küldhet Önnek. A szolgáltató ezért üzenet- és adatforgalmi díjat számíthat fel.
diff --git a/auth/src/main/res/values-in/strings.xml b/auth/src/main/res/values-in/strings.xml
index ba69e2ce2..23a477021 100755
--- a/auth/src/main/res/values-in/strings.xml
+++ b/auth/src/main/res/values-in/strings.xml
@@ -1,6 +1,12 @@
-
+Memuat…Login
+ Dengan melanjutkan, Anda menyatakan bahwa Anda menyetujui %1$s dan %2$s kami.
+ Dengan melanjutkan, Anda menyatakan bahwa Anda menyetujui %1$s kami.
+ Dengan melanjutkan, Anda menyatakan bahwa Anda menyetujui %1$s kami.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Mendaftar…Sandi tidak cukup kuat. Gunakan minimal %1$d karakter dan merupakan kombinasi huruf dan angkaSandi tidak cukup kuat. Gunakan minimal %1$d karakter dan merupakan kombinasi huruf dan angkaPendaftaran akun email tidak berhasil
- Dengan menge-tap %1$s Anda menyatakan setuju dengan %2$s dan %3$s.
- Dengan menge-tap %1$s Anda menyatakan setuju dengan %2$s.
- Dengan menge-tap %1$s Anda menyatakan setuju dengan %2$s.Persyaratan LayananKebijakan PrivasiAnda sudah memiliki akun
@@ -65,4 +68,7 @@
Verifikasi Nomor TeleponLanjutkanDengan menge-tap “%1$s\", SMS mungkin akan dikirim. Mungkin dikenakan biaya pesan & data.
+ Dengan menge-tap “%1$s”, Anda menyatakan bahwa Anda menyetujui %2$s dan %3$s kami. SMS mungkin akan dikirim. Mungkin dikenakan biaya pesan & data.
+ Dengan menge-tap “%1$s”, Anda menyatakan bahwa Anda menyetujui %2$s kami. SMS mungkin akan dikirim. Mungkin dikenakan biaya pesan & data.
+ Dengan menge-tap “%1$s”, Anda menyatakan bahwa Anda menyetujui %2$s kami. SMS mungkin akan dikirim. Mungkin dikenakan biaya pesan & data.
diff --git a/auth/src/main/res/values-it/strings.xml b/auth/src/main/res/values-it/strings.xml
index a845e3c64..7ba464cd7 100755
--- a/auth/src/main/res/values-it/strings.xml
+++ b/auth/src/main/res/values-it/strings.xml
@@ -1,6 +1,12 @@
-
+Caricamento in corso…Accedi
+ Se continui, accetti le nostre %1$s e i nostri %2$s.
+ Se continui, accetti i nostri %1$s.
+ Se continui, accetti le nostre %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrazione in corso…La password non è abbastanza efficace. Utilizza almeno %1$d carattere e una combinazione di lettere e numeri.La password non è abbastanza efficace. Utilizza almeno %1$d caratteri e una combinazione di lettere e numeri.Registrazione account di posta elettronica non riuscita
- Se tocchi %1$s, accetti i %2$s e le %3$s.
- Se tocchi %1$s, accetti i %2$s.
- Se tocchi %1$s, accetti le %2$s.Termini di servizioNorme sulla privacyHai già un account
@@ -65,4 +68,7 @@
Verifica numero di telefonoContinuaSe tocchi “%1$s”, è possibile che venga inviato un SMS. Potrebbero essere applicate le tariffe per l\'invio dei messaggi e per il traffico dati.
+ Se tocchi “%1$s”, accetti le nostre %2$s e i nostri %3$s. È possibile che venga inviato un SMS. Potrebbero essere applicate le tariffe per l\'invio dei messaggi e per il traffico dati.
+ Se tocchi “%1$s”, accetti i nostri %2$s. È possibile che venga inviato un SMS. Potrebbero essere applicate le tariffe per l\'invio dei messaggi e per il traffico dati.
+ Se tocchi “%1$s”, accetti le nostre %2$s. È possibile che venga inviato un SMS. Potrebbero essere applicate le tariffe per l\'invio dei messaggi e per il traffico dati.
diff --git a/auth/src/main/res/values-iw/strings.xml b/auth/src/main/res/values-iw/strings.xml
index deed782b9..e37c1d477 100755
--- a/auth/src/main/res/values-iw/strings.xml
+++ b/auth/src/main/res/values-iw/strings.xml
@@ -1,6 +1,12 @@
-
+טוען…כניסה
+ המשך התהליך יפורש כהסכמתך ל%1$s ול%2$s.
+ המשך התהליך יפורש כהסכמתך ל%1$s.
+ המשך התהליך יפורש כהסכמתך ל%1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
אנחנו רושמים אותך…הסיסמה חלשה מדי. סיסמה חזקה היא סיסמה באורך תו אחד (%1$d) לפחות שמכילה אותיות ומספריםהסיסמה חלשה מדי. סיסמה חזקה היא סיסמה באורך %1$d תווים לפחות שמכילה אותיות ומספריםהסיסמה חלשה מדי. סיסמה חזקה היא סיסמה באורך %1$d תווים לפחות שמכילה אותיות ומספריםהסיסמה חלשה מדי. סיסמה חזקה היא סיסמה באורך %1$d תווים לפחות שמכילה אותיות ומספריםלא הצלחנו להשלים את הרישום לחשבון באמצעות כתובת האימייל
- הקשה על %1$s תתפרש כהסכמה ל%2$s ול%3$s.
- הקשה על %1$s תתפרש כהסכמה ל%2$s.
- הקשה על %1$s תתפרש כהסכמה ל%2$s.תנאים והגבלותמדיניות הפרטיותכבר יש לך חשבון
@@ -65,4 +68,7 @@
אמת את מספר הטלפוןהמשךהקשה על “%1$s” עשויה לגרום לשליחה של הודעת SMS. ייתכן שיחולו תעריפי הודעות והעברת נתונים.
+ הקשה על “%1$s”, תפורש כהסכמתך ל%2$s ול%3$s. ייתכן שתישלח הודעת SMS. ייתכנו חיובים בגין שליחת הודעות ושימוש בנתונים.
+ הקשה על “%1$s”, תפורש כהסכמתך ל%2$s. ייתכן שתישלח הודעת SMS. ייתכנו חיובים בגין שליחת הודעות ושימוש בנתונים.
+ הקשה על “%1$s”, תפורש כהסכמתך ל%2$s. ייתכן שתישלח הודעת SMS. ייתכנו חיובים בגין שליחת הודעות ושימוש בנתונים.
diff --git a/auth/src/main/res/values-ja/strings.xml b/auth/src/main/res/values-ja/strings.xml
index 69371b2da..336a783fe 100755
--- a/auth/src/main/res/values-ja/strings.xml
+++ b/auth/src/main/res/values-ja/strings.xml
@@ -1,6 +1,12 @@
-
+読み込んでいます…ログイン
+ 続行すると、%1$s と %2$s に同意したことになります。
+ 続行すると、%1$s に同意したことになります。
+ 続行すると、%1$s に同意したことになります。
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
登録しています…パスワードが十分に安全ではありません。%1$d 文字以上で、文字と数字を組み合わせたパスワードを使用してくださいパスワードが十分に安全ではありません。%1$d 文字以上で、文字と数字を組み合わせたパスワードを使用してくださいメール アカウントの登録に失敗しました
- [%1$s] をタップすると、%2$s と %3$s に同意したことになります。
- [%1$s] をタップすると、%2$s に同意したことになります。
- [%1$s] をタップすると、%2$s に同意したことになります。利用規約プライバシー ポリシーアカウントをすでにお持ちです
@@ -65,4 +68,7 @@
電話番号を確認続行[%1$s] をタップすると、SMS が送信されます。データ通信料がかかることがあります。
+ [%1$s] をタップすると、%2$s と %3$s に同意したことになり、SMS が送信されます。データ通信料がかかることがあります。
+ [%1$s] をタップすると、%2$s に同意したことになり、SMS が送信されます。データ通信料がかかることがあります。
+ [%1$s] をタップすると、%2$s に同意したことになり、SMS が送信されます。データ通信料がかかることがあります。
diff --git a/auth/src/main/res/values-kn/strings.xml b/auth/src/main/res/values-kn/strings.xml
index b301c4be9..fd0bf2531 100755
--- a/auth/src/main/res/values-kn/strings.xml
+++ b/auth/src/main/res/values-kn/strings.xml
@@ -1,6 +1,12 @@
-
+ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ…ಸೈನ್ ಇನ್
+ ಮುಂದುವರಿಸುವ ಮೂಲಕ, ನೀವು ನಮ್ಮ %1$s ಮತ್ತು %2$s ಸ್ವೀಕರಿಸುತ್ತೀರಿ ಎಂದು ನೀವು ಸೂಚಿಸುತ್ತಿರುವಿರಿ
+ ಮುಂದುವರಿಸುವ ಮೂಲಕ, ನೀವು ನಮ್ಮ %1$s ಅನ್ನು ಸ್ವೀಕರಿಸುತ್ತೀರಿ ಎಂದು ನೀವು ಸೂಚಿಸುತ್ತಿರುವಿರಿ
+ ಮುಂದುವರಿಸುವ ಮೂಲಕ, ನೀವು ನಮ್ಮ %1$s ಅನ್ನು ಸ್ವೀಕರಿಸುತ್ತೀರಿ ಎಂದು ನೀವು ಸೂಚಿಸುತ್ತಿರುವಿರಿ
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
ಸೈನ್ ಅಪ್ ಮಾಡಲಾಗುತ್ತಿದೆ…ಪಾಸ್ವರ್ಡ್ ಸಾಕಷ್ಟು ಪ್ರಬಲವಾಗಿಲ್ಲ. ಕನಿಷ್ಠ %1$d ಅಕ್ಷರಗಳಿರಲಿ ಹಾಗೂ ಅದರಲ್ಲಿ ಅಕ್ಷರಗಳು ಮತ್ತು ಸಂಖ್ಯೆಗಳ ಮಿಕ್ಸ್ ಬಳಸಿಪಾಸ್ವರ್ಡ್ ಸಾಕಷ್ಟು ಪ್ರಬಲವಾಗಿಲ್ಲ. ಕನಿಷ್ಠ %1$d ಅಕ್ಷರಗಳಿರಲಿ ಹಾಗೂ ಅದರಲ್ಲಿ ಅಕ್ಷರಗಳು ಮತ್ತು ಸಂಖ್ಯೆಗಳ ಮಿಕ್ಸ್ ಬಳಸಿಇಮೇಲ್ ಖಾತೆ ನೋಂದಣಿ ಮಾಡುವಿಕೆಯು ವಿಫಲವಾಗಿದೆ
- %1$s ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವ ಮೂಲಕ, ನೀವು %2$s ಮತ್ತು %3$s ಅನ್ನು ಒಪ್ಪುತ್ತೀರಿ ಎಂದು ಸೂಚಿಸುತ್ತಿದ್ದೀರಿ.
- %1$s ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವ ಮೂಲಕ, ನೀವು %2$sಅನ್ನು ಒಪ್ಪುತ್ತೀರಿ ಎಂದು ಸೂಚಿಸುತ್ತಿದ್ದೀರಿ.
- %1$s ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವ ಮೂಲಕ, ನೀವು %2$sಅನ್ನು ಒಪ್ಪುತ್ತೀರಿ ಎಂದು ಸೂಚಿಸುತ್ತಿದ್ದೀರಿ.ಸೇವಾ ನಿಯಮಗಳುಗೌಪ್ಯತಾ ನೀತಿನೀವು ಈಗಾಗಲೇ ಖಾತೆಯನ್ನು ಹೊಂದಿರುವಿರಿ
@@ -65,4 +68,7 @@
ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಪರಿಶೀಲಿಸಿಮುಂದುವರಿಸಿ“%1$s” ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವ ಮೂಲಕ, ಎಸ್ಎಂಎಸ್ ಅನ್ನು ಕಳುಹಿಸಬಹುದಾಗಿದೆ. ಸಂದೇಶ ಮತ್ತು ಡೇಟಾ ದರಗಳು ಅನ್ವಯಿಸಬಹುದು.
+ “%1$s” ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವ ಮೂಲಕ, ನೀವು ನಮ್ಮ %2$s ಮತ್ತು %3$s ಸ್ವೀಕರಿಸುತ್ತೀರಿ ಎಂದು ನೀವು ಸೂಚಿಸುತ್ತಿರುವಿರಿ. ಎಸ್ಎಂಎಸ್ ಅನ್ನು ಕಳುಹಿಸಬಹುದಾಗಿದೆ. ಸಂದೇಶ ಮತ್ತು ಡೇಟಾ ದರಗಳು ಅನ್ವಯಿಸಬಹುದು.
+ “%1$s” ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವ ಮೂಲಕ, ನೀವು ನಮ್ಮ %2$s ಅನ್ನು ಸ್ವೀಕರಿಸುತ್ತೀರಿ ಎಂದು ನೀವು ಸೂಚಿಸುತ್ತಿರುವಿರಿ. ಎಸ್ಎಂಎಸ್ ಅನ್ನು ಕಳುಹಿಸಬಹುದಾಗಿದೆ. ಸಂದೇಶ ಮತ್ತು ಡೇಟಾ ದರಗಳು ಅನ್ವಯಿಸಬಹುದು.
+ “%1$s” ಅನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವ ಮೂಲಕ, ನೀವು ನಮ್ಮ %2$s ಅನ್ನು ಸ್ವೀಕರಿಸುತ್ತೀರಿ ಎಂದು ನೀವು ಸೂಚಿಸುತ್ತಿರುವಿರಿ. ಎಸ್ಎಂಎಸ್ ಅನ್ನು ಕಳುಹಿಸಬಹುದಾಗಿದೆ. ಸಂದೇಶ ಮತ್ತು ಡೇಟಾ ದರಗಳು ಅನ್ವಯಿಸಬಹುದು.
diff --git a/auth/src/main/res/values-ko/strings.xml b/auth/src/main/res/values-ko/strings.xml
index 61bf35f00..30066a64c 100755
--- a/auth/src/main/res/values-ko/strings.xml
+++ b/auth/src/main/res/values-ko/strings.xml
@@ -1,6 +1,12 @@
-
+로드 중…로그인
+ 계속 진행하면 %1$s 및 %2$s에 동의하는 것으로 간주됩니다.
+ 계속 진행하면 %1$s에 동의하는 것으로 간주됩니다.
+ 계속 진행하면 %1$s에 동의하는 것으로 간주됩니다.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
가입하는 중…안전한 비밀번호가 아닙니다. 길이가 %1$d자 이상이고 문자와 숫자가 조합되어야 합니다.안전한 비밀번호가 아닙니다. 길이가 %1$d자 이상이고 문자와 숫자가 조합되어야 합니다.이메일 계정 등록 실패
- %1$s을(를) 탭하면 %2$s 및 %3$s에 동의하는 것으로 간주됩니다.
- %1$s을(를) 탭하면 %2$s에 동의하는 것으로 간주됩니다.
- %1$s을(를) 탭하면 %2$s에 동의하는 것으로 간주됩니다.서비스 약관개인정보처리방침계정이 이미 있음
@@ -65,4 +68,7 @@
전화번호 인증계속“%1$s” 버튼을 탭하면 SMS가 발송될 수 있으며, 메시지 및 데이터 요금이 부과될 수 있습니다.
+ ‘%1$s’ 버튼을 탭하면 %2$s 및 %3$s에 동의하는 것으로 간주됩니다. SMS가 발송될 수 있으며, 메시지 및 데이터 요금이 부과될 수 있습니다.
+ ‘%1$s’ 버튼을 탭하면 %2$s에 동의하는 것으로 간주됩니다. SMS가 발송될 수 있으며, 메시지 및 데이터 요금이 부과될 수 있습니다.
+ ‘%1$s’ 버튼을 탭하면 %2$s에 동의하는 것으로 간주됩니다. SMS가 발송될 수 있으며, 메시지 및 데이터 요금이 부과될 수 있습니다.
diff --git a/auth/src/main/res/values-ln/strings.xml b/auth/src/main/res/values-ln/strings.xml
index b570f5c1f..c89153c43 100755
--- a/auth/src/main/res/values-ln/strings.xml
+++ b/auth/src/main/res/values-ln/strings.xml
@@ -1,6 +1,12 @@
-
+Chargement…Se connecter
+ En continuant, vous acceptez les %1$s et les %2$s.
+ En continuant, vous acceptez les %1$s.
+ En continuant, vous acceptez les %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Inscription…Le mot de passe n\'est pas assez sécurisé. Utilisez au moins %1$d caractère et une combinaison de chiffres et de lettres.Le mot de passe n\'est pas assez sécurisé. Utilisez au moins %1$d caractères et une combinaison de chiffres et de lettres.Échec de la création du compte avec une adresse e-mail
- En appuyant sur %1$s, vous acceptez les %2$s et les %3$s.
- En appuyant sur %1$s, vous acceptez les %2$s.
- En appuyant sur %1$s, vous acceptez les %2$s.Conditions d\'utilisationRègles de confidentialitéVous avez déjà un compte
@@ -65,4 +68,7 @@
Valider le numéro de téléphoneContinuerEn appuyant sur “%1$s”, vous déclencherez peut-être l\'envoi d\'un SMS. Des frais de messages et de données peuvent être facturés.
+ En appuyant sur “%1$s”, vous acceptez les %2$s et les %3$s. Vous déclencherez peut-être l\'envoi d\'un SMS. Des frais de messages et de données peuvent être facturés.
+ En appuyant sur “%1$s”, vous acceptez les %2$s. Vous déclencherez peut-être l\'envoi d\'un SMS. Des frais de messages et de données peuvent être facturés.
+ En appuyant sur “%1$s”, vous acceptez les %2$s. Vous déclencherez peut-être l\'envoi d\'un SMS. Des frais de messages et de données peuvent être facturés.
diff --git a/auth/src/main/res/values-lt/strings.xml b/auth/src/main/res/values-lt/strings.xml
index 0005a5acb..86618010e 100755
--- a/auth/src/main/res/values-lt/strings.xml
+++ b/auth/src/main/res/values-lt/strings.xml
@@ -1,6 +1,12 @@
-
+Įkeliama…Prisijungti
+ Tęsdami nurodote, kad sutinkate su %1$s ir %2$s.
+ Tęsdami nurodote, kad sutinkate su %1$s.
+ Tęsdami nurodote, kad sutinkate su %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Prisiregistruojama…Slaptažodis nepakankamai sudėtingas. Naudokite bent %1$d simbolį ir raidžių bei skaičių derinį.Slaptažodis nepakankamai sudėtingas. Naudokite bent %1$d simbolius ir raidžių bei skaičių derinį.Slaptažodis nepakankamai sudėtingas. Naudokite bent %1$d simbolio ir raidžių bei skaičių derinį.Slaptažodis nepakankamai sudėtingas. Naudokite bent %1$d simbolių ir raidžių bei skaičių derinį.El. pašto paskyros užregistruoti nepavyko
- Paliesdami „%1$s“ nurodote, kad sutinkate su %2$s ir %3$s.
- Paliesdami „%1$s“ nurodote, kad sutinkate su %2$s.
- Paliesdami %1$s nurodote, kad sutinkate su %2$s.Paslaugų teikimo sąlygomisPrivatumo politikaJūs jau turite paskyrą
@@ -65,4 +68,7 @@
Patvirtinti telefono numerįTęstiPalietus „%1$s“ gali būti išsiųstas SMS pranešimas. Gali būti taikomi pranešimų ir duomenų įkainiai.
+ Paliesdami „%1$s“ nurodote, kad sutinkate su %2$s ir %3$s. Gali būti išsiųstas SMS pranešimas, taip pat – taikomi pranešimų ir duomenų įkainiai.
+ Paliesdami „%1$s“ nurodote, kad sutinkate su %2$s. Gali būti išsiųstas SMS pranešimas, taip pat – taikomi pranešimų ir duomenų įkainiai.
+ Paliesdami „%1$s“ nurodote, kad sutinkate su %2$s. Gali būti išsiųstas SMS pranešimas, taip pat – taikomi pranešimų ir duomenų įkainiai.
diff --git a/auth/src/main/res/values-lv/strings.xml b/auth/src/main/res/values-lv/strings.xml
index 5e6aca98f..a81ef9345 100755
--- a/auth/src/main/res/values-lv/strings.xml
+++ b/auth/src/main/res/values-lv/strings.xml
@@ -1,6 +1,12 @@
-
+Notiek ielāde…Pierakstīties
+ Turpinot jūs norādāt, ka piekrītat šādiem dokumentiem: %1$s un %2$s.
+ Turpinot jūs norādāt, ka piekrītat šādam dokumentam: %1$s.
+ Turpinot jūs norādāt, ka piekrītat šādam dokumentam: %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Notiek reģistrācija…Parole nav pietiekami droša. Izmantojiet vismaz %1$d rakstzīmes un burtu un ciparu kombinācijuParole nav pietiekami droša. Izmantojiet vismaz %1$d rakstzīmi un burtu un ciparu kombinācijuParole nav pietiekami droša. Izmantojiet vismaz %1$d rakstzīmes un burtu un ciparu kombinācijuNesekmīga e-pasta konta reģistrācija
- Pieskaroties pogai %1$s, jūs norādāt, ka piekrītat šādiem noteikumiem: %2$s un %3$s.
- Pieskaroties pogai %1$s, jūs norādāt, ka piekrītat šādiem noteikumiem: %2$s.
- Pieskaroties pogai %1$s, jūs norādāt, ka piekrītat šādiem noteikumiem: %2$s.Pakalpojumu sniegšanas noteikumiKonfidencialitātes politikaJums jau ir konts
@@ -65,4 +68,7 @@
Verificēt tālruņa numuruTurpinātPieskaroties pogai %1$s, var tikt nosūtīta īsziņa. Var tikt piemērota maksa par ziņojumiem un datu pārsūtīšanu.
+ Pieskaroties pogai “%1$s”, jūs norādāt, ka piekrītat šādiem dokumentiem: %2$s un %3$s. Var tikt nosūtīta īsziņa. Var tikt piemērota maksa par ziņojumiem un datu pārsūtīšanu.
+ Pieskaroties pogai “%1$s”, jūs norādāt, ka piekrītat šādam dokumentam: %2$s. Var tikt nosūtīta īsziņa. Var tikt piemērota maksa par ziņojumiem un datu pārsūtīšanu.
+ Pieskaroties pogai “%1$s”, jūs norādāt, ka piekrītat šādam dokumentam: %2$s. Var tikt nosūtīta īsziņa. Var tikt piemērota maksa par ziņojumiem un datu pārsūtīšanu.
diff --git a/auth/src/main/res/values-mo/strings.xml b/auth/src/main/res/values-mo/strings.xml
index 85c2db450..b3ba87923 100755
--- a/auth/src/main/res/values-mo/strings.xml
+++ b/auth/src/main/res/values-mo/strings.xml
@@ -1,6 +1,12 @@
-
+Se încarcă…Conectați-vă
+ Dacă alegeți să continuați, sunteți de acord cu %1$s și cu %2$s.
+ Dacă alegeți să continuați, sunteți de acord cu %1$s.
+ Dacă alegeți să continuați, sunteți de acord cu %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Se creează un cont…Parola nu este suficient de puternică. Folosiți cel puțin %1$d caracter și o combinație de litere și cifre.Parola nu este suficient de puternică. Folosiți cel puțin %1$d caractere și o combinație de litere și cifre.Parola nu este suficient de puternică. Folosiți cel puțin %1$d de caractere și o combinație de litere și cifre.Contul de e-mail nu a fost înregistrat
- Dacă atingeți %1$s, indicați că sunteți de acord cu %2$s și cu %3$s.
- Dacă atingeți %1$s, indicați că sunteți de acord cu %2$s.
- Dacă atingeți %1$s, indicați că sunteți de acord cu %2$s.Termeni și condițiilePolitica de confidențialitateAveți deja un cont
@@ -65,4 +68,7 @@
Confirmați numărul de telefonContinuațiDacă atingeți „%1$s”, poate fi trimis un SMS. Se pot aplica tarife pentru mesaje și date.
+ Dacă atingeți „%1$s”, sunteți de acord cu %2$s și cu %3$s. Poate fi trimis un SMS. Se pot aplica tarife pentru mesaje și date.
+ Dacă atingeți „%1$s”, sunteți de acord cu %2$s. Poate fi trimis un SMS. Se pot aplica tarife pentru mesaje și date.
+ Dacă atingeți „%1$s”, sunteți de acord cu %2$s. Poate fi trimis un SMS. Se pot aplica tarife pentru mesaje și date.
diff --git a/auth/src/main/res/values-mr/strings.xml b/auth/src/main/res/values-mr/strings.xml
index 980a4cfd3..100e9729a 100755
--- a/auth/src/main/res/values-mr/strings.xml
+++ b/auth/src/main/res/values-mr/strings.xml
@@ -1,6 +1,12 @@
-
+लोड करत आहे…साइन इन करा
+ पुढे सुरू ठेवून, तुम्ही सूचित करता की तुम्ही आमचे %1$s आणि %2$s स्वीकारता.
+ पुढे सुरू ठेवून, तुम्ही सूचित करता की तुम्ही आमचे %1$s स्वीकारता.
+ पुढे सुरू ठेवून, तुम्ही सूचित करता की तुम्ही आमचे %1$s स्वीकारता.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
साइन अप करत आहे…पासवर्ड हवा तितका सक्षम नाही. कमीत कमी %1$d वर्ण आणि अंक व अक्षराचे मिश्रण वापरापासवर्ड हवा तितका सक्षम नाही. कमीत कमी %1$d वर्ण आणि अंक अक्षरांचे मिश्रण वापराईमेल खात्याची नोंदणी अयशस्वी झाली
- %1$s वर टॅप केल्याने तुम्ही %2$s आणि %3$sशी सहमती असल्याचे दाखवत आहात.
- %1$s वर टॅप करून तुम्ही %2$sशी सहमती असल्याचे दाखवत आहात.
- %1$s वर टॅप करून तुम्ही %2$sशी सहमती असल्याचे दाखवत आहात.सेवा अटीगोपनीयता धोरणतुमचे आधीच एक खाते आहे
@@ -64,5 +67,8 @@
कोड पुन्हा पाठवाफोन नंबरची पडताळणी करासुरू ठेवा
- “%1$s“ वर टॅप केल्याने, एक एसएमएस पाठवला जाऊ शकतो. संदेश आणि डेटा शुल्क लागू होऊ शकते.
+ “%1$s“ वर टॅप केल्याने, एक एसएमएस पाठवला जाऊ शकतो. मेसेज आणि डेटा शुल्क लागू होऊ शकते.
+ “%1$s” वर टॅप करून, तुम्ही सूचित करता की तुम्ही आमचे %2$s आणि %3$s स्वीकारता. एसएमएस पाठवला जाऊ शकतो. मेसेज आणि डेटा दर लागू केले जाऊ शकते.
+ “%1$s” वर टॅप करून, तुम्ही सूचित करता की तुम्ही आमचे %2$s स्वीकारता. एसएमएस पाठवला जाऊ शकतो. मेसेज आणि डेटा दर लागू केले जाऊ शकते.
+ “%1$s” वर टॅप करून, तुम्ही सूचित करता की तुम्ही आमचे %2$s स्वीकारता. एसएमएस पाठवला जाऊ शकतो. मेसेज आणि डेटा दर लागू केले जाऊ शकते.
diff --git a/auth/src/main/res/values-ms/strings.xml b/auth/src/main/res/values-ms/strings.xml
index 81a1ba892..d48e70852 100755
--- a/auth/src/main/res/values-ms/strings.xml
+++ b/auth/src/main/res/values-ms/strings.xml
@@ -1,6 +1,12 @@
-
+Memuatkan…Log masuk
+ Dengan meneruskan, anda menyatakan bahawa anda menerima %1$s dan %2$s kami.
+ Dengan meneruskan, anda menyatakan bahawa anda menerima %1$s kami.
+ Dengan meneruskan, anda menyatakan bahawa anda menerima %1$s kami.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Mendaftar…Kata laluan tidak kukuh. Gunakan sekuang-kurangnya %1$d aksara dan gabungkan huruf dengan nomborKata laluan tidak kukuh. Gunakan sekuang-kurangnya %1$d aksara dan gabungkan huruf dengan nomborPendaftaran akaun e-mel tidak berjaya
- Dengan mengetik %1$s, anda menyatakan bahawa anda bersetuju dengan %2$s dan %3$s.
- Dengan mengetik %1$s, anda menyatakan bahawa anda bersetuju dengan %2$s.
- Dengan mengetik %1$s, anda menyatakan bahawa anda bersetuju dengan %2$s.Syarat PerkhidmatanDasar PrivasiAnda sudah mempunyai akaun
@@ -65,4 +68,7 @@
Sahkan Nombor TelefonTeruskanDengan mengetik “%1$s”, SMS akan dihantar. Tertakluk pada kadar mesej & data.
+ Dengan mengetik “%1$s”, anda menyatakan bahawa anda menerima %2$s dan %3$s kami. SMS akan dihantar. Tertakluk pada kadar mesej & data.
+ Dengan mengetik “%1$s”, anda menyatakan bahawa anda menerima %2$s kami. SMS akan dihantar. Tertakluk pada kadar mesej & data.
+ Dengan mengetik “%1$s”, anda menyatakan bahawa anda menerima %2$s kami. SMS akan dihantar. Tertakluk pada kadar mesej & data.
diff --git a/auth/src/main/res/values-nb/strings.xml b/auth/src/main/res/values-nb/strings.xml
index 9f3da1569..a9facd985 100755
--- a/auth/src/main/res/values-nb/strings.xml
+++ b/auth/src/main/res/values-nb/strings.xml
@@ -1,6 +1,12 @@
-
+Laster inn…Logg på
+ Ved å fortsette godtar du %1$s og %2$s våre.
+ Ved å fortsette godtar du %1$s.
+ Ved å fortsette godtar du %1$s våre.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrerer…Passordet er ikke sterkt nok. Bruk minst %1$d tegn og en blanding av bokstaver og tallPassordet er ikke sterkt nok. Bruk minst %1$d tegn og en blanding av bokstaver og tallKunne ikke registrere e-postkontoen
- Når du trykker på %1$s, godtar du %2$s og %3$s.
- Når du trykker på %1$s, godtar du %2$s.
- Når du trykker på %1$s, godtar du %2$s.vilkårenePersonvernreglerDu har allerede en konto
@@ -65,4 +68,7 @@
Bekreft telefonnummeretFortsettNår du trykker på «%1$s», kan det bli sendt en SMS. Kostnader for meldinger og datatrafikk kan påløpe.
+ Ved å trykke på «%1$s» godtar du %2$s og %3$s våre. Du kan bli tilsendt en SMS. Kostnader for meldinger og datatrafikk kan påløpe.
+ Ved å trykke på «%1$s» godtar du %2$s. Du kan bli tilsendt en SMS. Kostnader for meldinger og datatrafikk kan påløpe.
+ Hvis du trykker på «%1$s», godtar du %2$s våre. Du kan bli tilsendt en SMS. Kostnader for meldinger og datatrafikk kan påløpe.
diff --git a/auth/src/main/res/values-nl/strings.xml b/auth/src/main/res/values-nl/strings.xml
index 44021a3b4..fc1c34748 100755
--- a/auth/src/main/res/values-nl/strings.xml
+++ b/auth/src/main/res/values-nl/strings.xml
@@ -1,6 +1,12 @@
-
+Laden…Inloggen
+ Als u doorgaat, geeft u aan dat u onze %1$s en ons %2$s accepteert.
+ Als u doorgaat, geeft u aan dat u onze %1$s accepteert.
+ Als u doorgaat, geeft u aan dat u ons %1$s accepteert.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Aanmelden…Uw wachtwoord is niet sterk genoeg. Gebruik ten minste %1$d teken en een combinatie van letters en cijfers.Uw wachtwoord is niet sterk genoeg. Gebruik ten minste %1$d tekens en een combinatie van letters en cijfers.Registratie van e-mailaccount is mislukt
- Door op %1$s te tikken, geeft u aan dat u akkoord gaat met de %2$s en het %3$s.
- Door op %1$s te tikken, geeft u aan dat u akkoord gaat met de %2$s.
- Door op %1$s te tikken, geeft u aan dat u akkoord gaat met het %2$s.ServicevoorwaardenPrivacybeleidU heeft al een account
@@ -65,4 +68,7 @@
Telefoonnummer verifiërenDoorgaanAls u op “%1$s” tikt, ontvangt u mogelijk een sms. Er kunnen sms- en datakosten in rekening worden gebracht.
+ Als u op “%1$s” tikt, geeft u aan dat u onze %2$s en ons %3$s accepteert. Mogelijk ontvangt u een sms. Er kunnen sms- en datakosten in rekening worden gebracht.
+ Als u op “%1$s” tikt, geeft u aan dat u onze %2$s accepteert. Mogelijk ontvangt u een sms. Er kunnen sms- en datakosten in rekening worden gebracht.
+ Als u op “%1$s” tikt, geeft u aan dat u ons %2$s accepteert. Mogelijk ontvangt u een sms. Er kunnen sms- en datakosten in rekening worden gebracht.
diff --git a/auth/src/main/res/values-no/strings.xml b/auth/src/main/res/values-no/strings.xml
index 9f3da1569..a9facd985 100755
--- a/auth/src/main/res/values-no/strings.xml
+++ b/auth/src/main/res/values-no/strings.xml
@@ -1,6 +1,12 @@
-
+Laster inn…Logg på
+ Ved å fortsette godtar du %1$s og %2$s våre.
+ Ved å fortsette godtar du %1$s.
+ Ved å fortsette godtar du %1$s våre.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrerer…Passordet er ikke sterkt nok. Bruk minst %1$d tegn og en blanding av bokstaver og tallPassordet er ikke sterkt nok. Bruk minst %1$d tegn og en blanding av bokstaver og tallKunne ikke registrere e-postkontoen
- Når du trykker på %1$s, godtar du %2$s og %3$s.
- Når du trykker på %1$s, godtar du %2$s.
- Når du trykker på %1$s, godtar du %2$s.vilkårenePersonvernreglerDu har allerede en konto
@@ -65,4 +68,7 @@
Bekreft telefonnummeretFortsettNår du trykker på «%1$s», kan det bli sendt en SMS. Kostnader for meldinger og datatrafikk kan påløpe.
+ Ved å trykke på «%1$s» godtar du %2$s og %3$s våre. Du kan bli tilsendt en SMS. Kostnader for meldinger og datatrafikk kan påløpe.
+ Ved å trykke på «%1$s» godtar du %2$s. Du kan bli tilsendt en SMS. Kostnader for meldinger og datatrafikk kan påløpe.
+ Hvis du trykker på «%1$s», godtar du %2$s våre. Du kan bli tilsendt en SMS. Kostnader for meldinger og datatrafikk kan påløpe.
diff --git a/auth/src/main/res/values-pl/strings.xml b/auth/src/main/res/values-pl/strings.xml
index ff755f0e9..aa901665b 100755
--- a/auth/src/main/res/values-pl/strings.xml
+++ b/auth/src/main/res/values-pl/strings.xml
@@ -1,6 +1,12 @@
-
+Wczytuję…Zaloguj się
+ Kontynuując, potwierdzasz, że akceptujesz te dokumenty: %1$s i %2$s.
+ Kontynuując, potwierdzasz, że akceptujesz ten dokument: %1$s.
+ Kontynuując, potwierdzasz, że akceptujesz ten dokument: %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Rejestruję…Hasło jest za słabe. Powinno mieć przynajmniej %1$d znak i być kombinacją liter i cyfr.Hasło jest za słabe. Powinno mieć przynajmniej %1$d znaki i być kombinacją liter i cyfr.Hasło jest za słabe. Powinno mieć przynajmniej %1$d znaków i być kombinacją liter i cyfr.Hasło jest za słabe. Powinno mieć przynajmniej %1$d znaku i być kombinacją liter i cyfrRejestracja konta e-mail nie powiodła się
- Klikając %1$s, potwierdzasz, że znane Ci są %2$s oraz %3$s i akceptujesz je.
- Klikając %1$s, potwierdzasz że znane Ci są %2$s i akceptujesz je.
- Klikając %1$s, potwierdzasz że znana Ci jest %2$s i wyrażasz na nią zgodę.Warunki korzystania z usługiPolityka prywatnościMasz już konto
@@ -65,4 +68,7 @@
Zweryfikuj numer telefonuDalejGdy klikniesz „%1$s”, może zostać wysłany SMS. Może to skutkować pobraniem opłaty za przesłanie wiadomości i danych.
+ Klikając „%1$s”, potwierdzasz, że akceptujesz te dokumenty: %2$s i %3$s. Może zostać wysłany SMS. Może to skutkować pobraniem opłat za przesłanie wiadomości i danych.
+ Klikając „%1$s”, potwierdzasz, że akceptujesz ten dokument: %2$s. Może zostać wysłany SMS. Może to skutkować pobraniem opłat za przesłanie wiadomości i danych.
+ Klikając „%1$s”, potwierdzasz, że akceptujesz ten dokument: %2$s. Może zostać wysłany SMS. Może to skutkować pobraniem opłat za przesłanie wiadomości i danych.
diff --git a/auth/src/main/res/values-pt-rBR/strings.xml b/auth/src/main/res/values-pt-rBR/strings.xml
index cbfd263b6..95ea36e2f 100755
--- a/auth/src/main/res/values-pt-rBR/strings.xml
+++ b/auth/src/main/res/values-pt-rBR/strings.xml
@@ -1,6 +1,12 @@
-
+Carregando…Fazer login
+ Ao continuar, você concorda com nossos %1$s e a %2$s.
+ Ao continuar, você concorda com nossos %1$s.
+ Ao continuar, você concorda com nossa %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Concluindo sua inscrição…A senha não é forte o suficiente. Use pelo menos %1$d caractere e combine letras e números.A senha não é forte o suficiente. Use pelo menos %1$d caracteres e combine letras e números.Falha no registro da conta do e-mail
- Ao tocar em “%1$s”, você indica que está de acordo com os %2$s e a %3$s.
- Ao tocar em “%1$s”, você indica que está de acordo com os %2$s.
- Ao tocar em “%1$s”, você indica que está de acordo com a %2$s.Termos de ServiçoPolítica de privacidadeVocê já tem uma conta
@@ -65,4 +68,7 @@
Confirmar número de telefoneContinuarSe você tocar em “%1$s”, um SMS poderá ser enviado e tarifas de mensagens e de dados serão cobradas.
+ Ao tocar em “%1$s”, você concorda com nossos %2$s e a %3$s. Um SMS poderá ser enviado e tarifas de mensagens e de dados poderão ser cobradas.
+ Ao tocar em “%1$s”, você concorda com nossos %2$s. Um SMS poderá ser enviado e tarifas de mensagens e de dados poderão ser cobradas.
+ Ao tocar em “%1$s”, você concorda com nossa %2$s. Um SMS poderá ser enviado e tarifas de mensagens e de dados poderão ser cobradas.
diff --git a/auth/src/main/res/values-pt-rPT/strings.xml b/auth/src/main/res/values-pt-rPT/strings.xml
index b6ed2844a..2f8168eea 100755
--- a/auth/src/main/res/values-pt-rPT/strings.xml
+++ b/auth/src/main/res/values-pt-rPT/strings.xml
@@ -1,6 +1,12 @@
-
+A carregar…Iniciar sessão
+ Ao continuar, indica que aceita os %1$s e a %2$s.
+ Ao continuar, indica que aceita os nossos %1$s.
+ Ao continuar, indica que aceita a nossa %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
A realizar a inscrição…A palavra-passe não é suficientemente forte. Utilize, pelo menos, %1$d caráter e uma combinação de letras e númerosA palavra-passe não é suficientemente forte. Utilize, pelo menos, %1$d caracteres e uma combinação de letras e númerosO registo da conta de email não foi bem-sucedido
- Ao tocar em %1$s, indica que aceita os %2$s e a %3$s.
- Ao tocar em %1$s, indica que aceita os %2$s.
- Ao tocar em %1$s, indica que aceita a %2$s.Termos de UtilizaçãoPolítica de PrivacidadeJá tem uma conta
@@ -65,4 +68,7 @@
Validar número de telefoneContinuarAo tocar em “%1$s”, pode gerar o envio de uma SMS. Podem aplicar-se tarifas de mensagens e dados.
+ Ao tocar em “%1$s”, indica que aceita os %2$s e a %3$s. Pode gerar o envio de uma SMS. Podem aplicar-se tarifas de dados e de mensagens.
+ Ao tocar em “%1$s”, indica que aceita os nossos %2$s. Pode gerar o envio de uma SMS. Podem aplicar-se tarifas de mensagens e dados.
+ Ao tocar em “%1$s”, indica que aceita a nossa %2$s. Pode gerar o envio de uma SMS. Podem aplicar-se tarifas de mensagens e dados.
diff --git a/auth/src/main/res/values-pt/strings.xml b/auth/src/main/res/values-pt/strings.xml
index cbfd263b6..95ea36e2f 100755
--- a/auth/src/main/res/values-pt/strings.xml
+++ b/auth/src/main/res/values-pt/strings.xml
@@ -1,6 +1,12 @@
-
+Carregando…Fazer login
+ Ao continuar, você concorda com nossos %1$s e a %2$s.
+ Ao continuar, você concorda com nossos %1$s.
+ Ao continuar, você concorda com nossa %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Concluindo sua inscrição…A senha não é forte o suficiente. Use pelo menos %1$d caractere e combine letras e números.A senha não é forte o suficiente. Use pelo menos %1$d caracteres e combine letras e números.Falha no registro da conta do e-mail
- Ao tocar em “%1$s”, você indica que está de acordo com os %2$s e a %3$s.
- Ao tocar em “%1$s”, você indica que está de acordo com os %2$s.
- Ao tocar em “%1$s”, você indica que está de acordo com a %2$s.Termos de ServiçoPolítica de privacidadeVocê já tem uma conta
@@ -65,4 +68,7 @@
Confirmar número de telefoneContinuarSe você tocar em “%1$s”, um SMS poderá ser enviado e tarifas de mensagens e de dados serão cobradas.
+ Ao tocar em “%1$s”, você concorda com nossos %2$s e a %3$s. Um SMS poderá ser enviado e tarifas de mensagens e de dados poderão ser cobradas.
+ Ao tocar em “%1$s”, você concorda com nossos %2$s. Um SMS poderá ser enviado e tarifas de mensagens e de dados poderão ser cobradas.
+ Ao tocar em “%1$s”, você concorda com nossa %2$s. Um SMS poderá ser enviado e tarifas de mensagens e de dados poderão ser cobradas.
diff --git a/auth/src/main/res/values-ro/strings.xml b/auth/src/main/res/values-ro/strings.xml
index 85c2db450..b3ba87923 100755
--- a/auth/src/main/res/values-ro/strings.xml
+++ b/auth/src/main/res/values-ro/strings.xml
@@ -1,6 +1,12 @@
-
+Se încarcă…Conectați-vă
+ Dacă alegeți să continuați, sunteți de acord cu %1$s și cu %2$s.
+ Dacă alegeți să continuați, sunteți de acord cu %1$s.
+ Dacă alegeți să continuați, sunteți de acord cu %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Se creează un cont…Parola nu este suficient de puternică. Folosiți cel puțin %1$d caracter și o combinație de litere și cifre.Parola nu este suficient de puternică. Folosiți cel puțin %1$d caractere și o combinație de litere și cifre.Parola nu este suficient de puternică. Folosiți cel puțin %1$d de caractere și o combinație de litere și cifre.Contul de e-mail nu a fost înregistrat
- Dacă atingeți %1$s, indicați că sunteți de acord cu %2$s și cu %3$s.
- Dacă atingeți %1$s, indicați că sunteți de acord cu %2$s.
- Dacă atingeți %1$s, indicați că sunteți de acord cu %2$s.Termeni și condițiilePolitica de confidențialitateAveți deja un cont
@@ -65,4 +68,7 @@
Confirmați numărul de telefonContinuațiDacă atingeți „%1$s”, poate fi trimis un SMS. Se pot aplica tarife pentru mesaje și date.
+ Dacă atingeți „%1$s”, sunteți de acord cu %2$s și cu %3$s. Poate fi trimis un SMS. Se pot aplica tarife pentru mesaje și date.
+ Dacă atingeți „%1$s”, sunteți de acord cu %2$s. Poate fi trimis un SMS. Se pot aplica tarife pentru mesaje și date.
+ Dacă atingeți „%1$s”, sunteți de acord cu %2$s. Poate fi trimis un SMS. Se pot aplica tarife pentru mesaje și date.
diff --git a/auth/src/main/res/values-ru/strings.xml b/auth/src/main/res/values-ru/strings.xml
index b3b523ab5..263494a65 100755
--- a/auth/src/main/res/values-ru/strings.xml
+++ b/auth/src/main/res/values-ru/strings.xml
@@ -1,6 +1,12 @@
-
+Загрузка…Войти
+ Продолжая, вы принимаете %1$s и %2$s.
+ Продолжая, вы принимаете %1$s.
+ Продолжая, вы принимаете %1$s.
+ %1$s %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Идет регистрация…Пароль должен состоять из букв и цифр и содержать не меньше %1$d символа.Пароль должен состоять из букв и цифр и содержать не меньше %1$d символов.Пароль должен состоять из букв и цифр и содержать не меньше %1$d символов.Пароль должен состоять из букв и цифр и содержать не меньше %1$d символа.Не удалось зарегистрировать аккаунт
- Нажимая кнопку “%1$s”, вы принимаете %2$s и %3$s.
- Нажимая кнопку “%1$s”, вы принимаете %2$s.
- Нажимая кнопку “%1$s”, вы принимаете %2$s.Условия использованияПолитику конфиденциальностиУ вас уже есть аккаунт
@@ -65,4 +68,7 @@
Подтвердить номер телефонаПродолжитьНажимая кнопку “%1$s”, вы соглашаетесь получить SMS. За его отправку и обмен данными может взиматься плата.
+ Нажимая кнопку “%1$s”, вы принимаете %2$s и %3$s, а также соглашаетесь получить SMS. За его отправку и обмен данными может взиматься плата.
+ Нажимая кнопку “%1$s”, вы принимаете %2$s и соглашаетесь получить SMS. За его отправку и обмен данными может взиматься плата.
+ Нажимая кнопку “%1$s”, вы принимаете %2$s и соглашаетесь получить SMS. За его отправку и обмен данными может взиматься плата.
diff --git a/auth/src/main/res/values-sk/strings.xml b/auth/src/main/res/values-sk/strings.xml
index 065ae74b6..eafd175ce 100755
--- a/auth/src/main/res/values-sk/strings.xml
+++ b/auth/src/main/res/values-sk/strings.xml
@@ -1,6 +1,12 @@
-
+Načítava sa…Prihlásiť sa
+ Pokračovaním vyjadrujete súhlas s dokumentmi %1$s a %2$s.
+ Pokračovaním vyjadrujete súhlas s dokumentom %1$s.
+ Pokračovaním vyjadrujete súhlas s dokumentom %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Prebieha registrácia…Heslo nie je dostatočne silné. Použite aspoň %1$d znak a kombináciu písmen a číselHeslo nie je dostatočne silné. Použite aspoň %1$d znaky a kombináciu písmen a číselHeslo nie je dostatočne silné. Použite aspoň %1$d znaku a kombináciu písmen a číselHeslo nie je dostatočne silné. Použite aspoň %1$d znakov a kombináciu písmen a číselRegistrácia e-mailového účtu nebola úspešná
- Klepnutím na tlačidlo %1$s vyjadrujete súhlas so zmluvnými podmienkami %2$s a pravidlami ochrany súkromia %3$s.
- Klepnutím na tlačidlo %1$s vyjadrujete súhlas so zmluvnými podmienkami %2$s.
- Klepnutím na tlačidlo %1$s vyjadrujete súhlas s pravidlami ochrany súkromia %2$s.Zmluvné podmienkyPravidlá ochrany súkromiaUž máte účet
@@ -65,4 +68,7 @@
Overiť telefónne čísloPokračovaťKlepnutím na tlačidlo %1$s možno odoslať SMS. Môžu sa účtovať poplatky za správy a dáta.
+ Klepnutím na tlačidlo %1$s vyjadrujete súhlas s dokumentmi %2$s a %3$s. Môže byť odoslaná SMS a môžu sa účtovať poplatky za správy a dáta.
+ Klepnutím na tlačidlo %1$s vyjadrujete súhlas s dokumentom %2$s. Môže byť odoslaná SMS a môžu sa účtovať poplatky za správy a dáta.
+ Klepnutím na tlačidlo %1$s vyjadrujete súhlas s dokumentom %2$s. Môže byť odoslaná SMS a môžu sa účtovať poplatky za správy a dáta.
diff --git a/auth/src/main/res/values-sl/strings.xml b/auth/src/main/res/values-sl/strings.xml
index 61e60e872..b0911f755 100755
--- a/auth/src/main/res/values-sl/strings.xml
+++ b/auth/src/main/res/values-sl/strings.xml
@@ -1,6 +1,12 @@
-
+Nalaganje…Prijava
+ Z nadaljevanjem potrjujete, da se strinjate z dokumentoma %1$s in %2$s.
+ Z nadaljevanjem potrjujete, da se strinjate z dokumentom %1$s.
+ Z nadaljevanjem potrjujete, da se strinjate z dokumentom %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registriranje…Geslo ni dovolj zapleteno. Uporabite vsaj %1$d znak in kombinacijo črk ter številk.Geslo ni dovolj zapleteno. Uporabite vsaj %1$d znaka in kombinacijo črk ter številk.Geslo ni dovolj zapleteno. Uporabite vsaj %1$d znake in kombinacijo črk ter številk.Geslo ni dovolj zapleteno. Uporabite vsaj %1$d znakov in kombinacijo črk ter številk.Registracija e-poštnega računa ni bila uspešna
- Če se dotaknete možnosti %1$s, potrjujete, da se strinjate z dokumentoma %2$s in %3$s.
- Če se dotaknete možnosti %1$s, potrjujete, da se strinjate z dokumentom %2$s.
- Če se dotaknete možnosti %1$s, potrjujete, da se strinjate z dokumentom %2$s.pogoji storitvePravilnik o zasebnostiRačun že imate
@@ -65,4 +68,7 @@
Preverjanje telefonske številkeNaprejČe se dotaknete možnosti »%1$s«, bo morda poslano sporočilo SMS. Pošiljanje sporočila in prenos podatkov boste morda morali plačati.
+ Če se dotaknete možnosti »%1$s«, potrjujete, da se strinjate z dokumentoma %2$s in %3$s. Morda bo poslano sporočilo SMS. Pošiljanje sporočila in prenos podatkov boste morda morali plačati.
+ Če se dotaknete možnosti »%1$s«, potrjujete, da se strinjate z dokumentom %2$s. Morda bo poslano sporočilo SMS. Pošiljanje sporočila in prenos podatkov boste morda morali plačati.
+ Če se dotaknete možnosti »%1$s«, potrjujete, da se strinjate z dokumentom %2$s. Morda bo poslano sporočilo SMS. Pošiljanje sporočila in prenos podatkov boste morda morali plačati.
diff --git a/auth/src/main/res/values-sr/strings.xml b/auth/src/main/res/values-sr/strings.xml
index 547549d1c..ec8d21891 100755
--- a/auth/src/main/res/values-sr/strings.xml
+++ b/auth/src/main/res/values-sr/strings.xml
@@ -1,6 +1,12 @@
-
+Учитава се…Пријави ме
+ Ако наставите, потврђујете да прихватате документе %1$s и %2$s.
+ Ако наставите, потврђујете да прихватате документ %1$s.
+ Ако наставите, потврђујете да прихватате документ %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Регистрација је у току…Лозинка није довољно јака. Употребите бар %1$d знак, уз комбинацију бројева и словаЛозинка није довољно јака. Употребите бар %1$d знака, уз комбинацију бројева и словаЛозинка није довољно јака. Употребите бар %1$d знакова, уз комбинацију бројева и словаРегистрација налога преко имејла није успела
- Додиром на %1$s потврђујете да прихватате %2$s и %3$s.
- Додиром на %1$s потврђујете да прихватате %2$s.
- Додиром на %1$s потврђујете да прихватате %2$s.Услови коришћења услугеПолитику приватностиВећ имате налог
@@ -65,4 +68,7 @@
Верификуј број телефонаНаставиАко додирнете „%1$s“, можда ћете послати SMS. Могу да вам буду наплаћени трошкови слања поруке и преноса података.
+ Ако додирнете „%1$s“, потврђујете да прихватате документе %2$s и %3$s. Можда ћете послати SMS. Могу да вам буду наплаћени трошкови слања поруке и преноса података.
+ Ако додирнете „%1$s“, потврђујете да прихватате документ %2$s. Можда ћете послати SMS. Могу да вам буду наплаћени трошкови слања поруке и преноса података.
+ Ако додирнете „%1$s“, потврђујете да прихватате документ %2$s. Можда ћете послати SMS. Могу да вам буду наплаћени трошкови слања поруке и преноса података.
diff --git a/auth/src/main/res/values-sv/strings.xml b/auth/src/main/res/values-sv/strings.xml
index 05d648015..7845aea79 100755
--- a/auth/src/main/res/values-sv/strings.xml
+++ b/auth/src/main/res/values-sv/strings.xml
@@ -1,6 +1,12 @@
-
+Läser in…Logga in
+ Genom att fortsätta godkänner du våra %1$s och vår %2$s.
+ Genom att fortsätta godkänner du våra %1$s.
+ Genom att fortsätta godkänner du vår %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Registrerar…Lösenordet är inte tillräckligt starkt. Använd minst %1$d tecken och en blandning av bokstäver och siffror.Lösenordet är inte tillräckligt starkt. Använd minst %1$d tecken och en blandning av bokstäver och siffror.Det gick inte att registrera e-postkontot
- Genom att trycka på %1$s godkänner du tjänstens %2$s och %3$s.
- Genom att trycka på %1$s godkänner du tjänstens %2$s.
- Genom att trycka på %1$s godkänner du tjänstens %2$s.användarvillkorenSekretesspolicyDu har redan ett konto
@@ -65,4 +68,7 @@
Verifiera telefonnummerFortsättGenom att trycka på %1$s skickas ett sms. Meddelande- och dataavgifter kan tillkomma.
+ Genom att trycka på %1$s godkänner du våra %2$s och vår %3$s. Ett sms kan skickas. Meddelande- och dataavgifter kan tillkomma.
+ Genom att trycka på %1$s godkänner du våra %2$s. Ett sms kan skickas. Meddelande- och dataavgifter kan tillkomma.
+ Genom att trycka på %1$s godkänner du vår %2$s. Ett sms kan skickas. Meddelande- och dataavgifter kan tillkomma.
diff --git a/auth/src/main/res/values-ta/strings.xml b/auth/src/main/res/values-ta/strings.xml
index 89b3214a8..9da892934 100755
--- a/auth/src/main/res/values-ta/strings.xml
+++ b/auth/src/main/res/values-ta/strings.xml
@@ -1,6 +1,12 @@
-
+ஏற்றுகிறது…உள்நுழைக
+ தொடர்வதன் மூலம், எங்கள் %1$s மற்றும் %2$sஐ ஏற்பதாகக் குறிப்பிடுகிறீர்கள்.
+ தொடர்வதன் மூலம், எங்கள் %1$sஐ ஏற்பதாகக் குறிப்பிடுகிறீர்கள்.
+ தொடர்வதன் மூலம், எங்கள் %1$sஐ ஏற்பதாகக் குறிப்பிடுகிறீர்கள்.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
பதிவு செய்கிறது…கடவுச்சொல் வலுவானதாக இல்லை. குறைந்தது %1$d எழுத்துக்குறியும், எழுத்துகளும் எண்களும் கலந்த கலவையும் இருக்க வேண்டும்கடவுச்சொல் வலுவானதாக இல்லை. குறைந்தது %1$d எழுத்துக்குறிகளும், எழுத்துகளும் எண்களும் கலந்த கலவையும் இருக்க வேண்டும்மின்னஞ்சல் கணக்கைப் பதிவு செய்ய முடியவில்லை
- %1$s என்பதைத் தட்டுவதன் மூலம், %2$s மற்றும் %3$sஐ ஏற்பதாகக் குறிப்பிடுகிறீர்கள்.
- %1$s என்பதைத் தட்டுவதன் மூலம், %2$sஐ ஏற்பதாகக் குறிப்பிடுகிறீர்கள்.
- %1$s என்பதைத் தட்டுவதன் மூலம், %2$sஐ ஏற்பதாகக் குறிப்பிடுகிறீர்கள்.சேவை விதிமுறைகள்தனியுரிமைக் கொள்கைஏற்கனவே உங்களிடம் கணக்கு உள்ளது
@@ -65,4 +68,7 @@
ஃபோன் எண்ணைச் சரிபார்தொடர்க“%1$s” என்பதைத் தட்டுவதன் மூலம், SMS அனுப்பப்படலாம். செய்தி மற்றும் தரவுக் கட்டணங்கள் விதிக்கப்படலாம்.
+ “%1$s” என்பதைத் தட்டுவதன் மூலம், எங்கள் %2$s மற்றும் %3$sஐ ஏற்பதாகக் குறிப்பிடுகிறீர்கள். SMS அனுப்பப்படலாம். செய்தி மற்றும் தரவுக் கட்டணங்கள் விதிக்கப்படலாம்.
+ “%1$s” என்பதைத் தட்டுவதன் மூலம், எங்கள் %2$sஐ ஏற்பதாகக் குறிப்பிடுகிறீர்கள். SMS அனுப்பப்படலாம். செய்தி மற்றும் தரவுக் கட்டணங்கள் விதிக்கப்படலாம்.
+ “%1$s” என்பதைத் தட்டுவதன் மூலம், எங்கள் %2$sஐ ஏற்பதாகக் குறிப்பிடுகிறீர்கள். SMS அனுப்பப்படலாம். செய்தி மற்றும் தரவுக் கட்டணங்கள் விதிக்கப்படலாம்.
diff --git a/auth/src/main/res/values-th/strings.xml b/auth/src/main/res/values-th/strings.xml
index 5b2f5971c..dc1c4e713 100755
--- a/auth/src/main/res/values-th/strings.xml
+++ b/auth/src/main/res/values-th/strings.xml
@@ -1,6 +1,12 @@
-
+กำลังโหลด…ลงชื่อเข้าใช้
+ การดำเนินการต่อแสดงว่าคุณยอมรับ %1$s และ %2$s
+ การดำเนินการต่อแสดงว่าคุณยอมรับ %1$s
+ การดำเนินการต่อแสดงว่าคุณยอมรับ %1$s
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
กำลังลงชื่อสมัครใช้…รหัสผ่านไม่รัดกุมมากพอ ใช้อักขระอย่างน้อย %1$d ตัวและต้องเป็นตัวอักษรปนกับตัวเลขรหัสผ่านไม่รัดกุมมากพอ ใช้อักขระอย่างน้อย %1$d ตัวและต้องเป็นตัวอักษรปนกับตัวเลขการลงทะเบียนบัญชีอีเมลไม่สำเร็จ
- การแตะ%1$sแสดงว่าคุณยอมรับ%2$sและ%3$s
- การแตะ%1$sแสดงว่าคุณยอมรับ%2$s
- การแตะ%1$sแสดงว่าคุณยอมรับ%2$sข้อกำหนดในการให้บริการนโยบายความเป็นส่วนตัวคุณมีบัญชีอยู่แล้ว
@@ -65,4 +68,7 @@
ยืนยันหมายเลขโทรศัพท์ต่อไปเมื่อคุณแตะ “%1$s” ระบบจะส่ง SMS ให้คุณ อาจมีค่าบริการรับส่งข้อความและค่าบริการอินเทอร์เน็ต
+ การแตะ “%1$s” แสดงว่าคุณยอมรับ %2$s และ %3$s ระบบจะส่ง SMS ให้คุณ อาจมีค่าบริการรับส่งข้อความและค่าบริการอินเทอร์เน็ต
+ การแตะ “%1$s” แสดงว่าคุณยอมรับ %2$s ระบบจะส่ง SMS ให้คุณ อาจมีค่าบริการรับส่งข้อความและค่าบริการอินเทอร์เน็ต
+ การแตะ “%1$s” แสดงว่าคุณยอมรับ %2$s ระบบจะส่ง SMS ให้คุณ อาจมีค่าบริการรับส่งข้อความและค่าบริการอินเทอร์เน็ต
diff --git a/auth/src/main/res/values-tl/strings.xml b/auth/src/main/res/values-tl/strings.xml
index 421cd5796..6eddc0122 100755
--- a/auth/src/main/res/values-tl/strings.xml
+++ b/auth/src/main/res/values-tl/strings.xml
@@ -1,6 +1,12 @@
-
+Naglo-load…Mag-sign in
+ Sa pagpapatuloy, ipinababatid mo na tinatanggap mo ang aming %1$s at %2$s.
+ Sa pagpapatuloy, ipinababatid mo na tinatanggap mo ang aming %1$s.
+ Sa pagpapatuloy, ipinababatid mo na tinatanggap mo ang aming %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFecebookTwitter
@@ -23,9 +29,6 @@
Nagsa-sign up…Hindi masyadong malakas ang password. Gumamit ng %1$d character man lang at kumbinasyon ng mga titik at mga numeroHindi masyadong malakas ang password. Gumamit ng %1$d na character man lang at kumbinasyon ng mga titik at mga numeroHindi nagtagumpay ang pagpaparehistro ng email account
- Sa pag-tap sa %1$s, ipinababatid mo na sang-ayon ka sa %2$s at sa %3$s.
- Sa pag-tap sa %1$s, ipinababatid mo na sang-ayon ka sa %2$s.
- Sa pag-tap sa %1$s, ipinababatid mo na sang-ayon ka sa %2$s.Mga Tuntunin ng SerbisyoPatakaran sa PrivacyMayroon ka nang account
@@ -65,4 +68,7 @@
I-verify ang Numero ng TeleponoMagpatuloySa pag-tap sa “%1$s,“ maaaring magpadala ng SMS. Maaaring ipatupad ang mga rate ng pagmemensahe at data.
+ Sa pag-tap sa “%1$s”, ipinababatid mo na tinatanggap mo ang aming %2$s at %3$s. Maaaring magpadala ng SMS. Maaaring ipatupad ang mga rate ng pagmemensahe at data.
+ Sa pag-tap sa “%1$s”, ipinababatid mo na tinatanggap mo ang aming %2$s. Maaaring magpadala ng SMS. Maaaring ipatupad ang mga rate ng pagmemensahe at data.
+ Sa pag-tap sa “%1$s”, ipinababatid mo na tinatanggap mo ang aming %2$s. Maaaring magpadala ng SMS. Maaaring ipatupad ang mga rate ng pagmemensahe at data.
diff --git a/auth/src/main/res/values-tr/strings.xml b/auth/src/main/res/values-tr/strings.xml
index 00fb046d1..13b85138e 100755
--- a/auth/src/main/res/values-tr/strings.xml
+++ b/auth/src/main/res/values-tr/strings.xml
@@ -1,6 +1,12 @@
-
+Yükleniyor…Oturum aç
+ Devam ederek %1$s ve %2$s hükümlerimizi kabul ettiğinizi bildirirsiniz.
+ Devam ederek %1$s hükümlerimizi kabul ettiğinizi bildirirsiniz.
+ Devam ederek %1$s hükümlerimizi kabul ettiğinizi bildirirsiniz.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Kaydolunuyor…Şifre yeterince güçlü değil. En az %1$d karakter kullanın ve hem harf hem de rakam ekleyinŞifre yeterince güçlü değil. En az %1$d karakter kullanın ve hem harf hem de rakam ekleyinE-posta hesabı kaydı başarısız oldu
- %1$s öğesine dokunarak şunları kabul ettiğinizi bildirirsiniz: %2$s ve %3$s.
- %1$s öğesine dokunarak şunu kabul ettiğinizi bildirirsiniz: %2$s.
- %1$s öğesine dokunarak şunu kabul ettiğinizi bildirirsiniz: %2$s.Hizmet ŞartlarıGizlilik PolitikasıZaten bir hesabınız var
@@ -65,4 +68,7 @@
Telefon Numarasını DoğrulaDevam“%1$s” öğesine dokunarak SMS gönderilebilir. Mesaj ve veri ücretleri uygulanabilir.
+ “%1$s” öğesine dokunarak %2$s ve %3$s hükümlerimizi kabul ettiğinizi bildirirsiniz. SMS gönderilebilir. Mesaj ve veri ücretleri uygulanabilir.
+ %1$s öğesine dokunarak %2$s hükümlerimizi kabul ettiğinizi bildirirsiniz. SMS gönderilebilir. Mesaj ve veri ücretleri uygulanabilir.
+ %1$s öğesine dokunarak %2$s hükümlerimizi kabul ettiğinizi bildirirsiniz. SMS gönderilebilir. Mesaj ve veri ücretleri uygulanabilir.
diff --git a/auth/src/main/res/values-uk/strings.xml b/auth/src/main/res/values-uk/strings.xml
index b1ce7a509..6f2365ad1 100755
--- a/auth/src/main/res/values-uk/strings.xml
+++ b/auth/src/main/res/values-uk/strings.xml
@@ -1,6 +1,12 @@
-
+Завантаження…Увійти
+ Продовжуючи, ви приймаєте такі документи: %1$s і %2$s.
+ Продовжуючи, ви приймаєте такий документ: %1$s.
+ Продовжуючи, ви приймаєте такий документ: %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Реєстрація…Пароль недостатньо надійний. Введіть принаймні %1$d символ та комбінацію літер і цифрПароль недостатньо надійний. Введіть принаймні %1$d символи та комбінацію літер і цифрПароль недостатньо надійний. Введіть принаймні %1$d символів та комбінацію літер і цифрПароль недостатньо надійний. Введіть принаймні %1$d символу та комбінацію літер і цифрНе вдалося зареєструвати обліковий запис електронної пошти
- Торкаючись кнопки “%1$s”, ви приймаєте %2$s та %3$s.
- Торкаючись кнопки “%1$s”, ви приймаєте %2$s.
- Торкаючись кнопки “%1$s”, ви приймаєте %2$s.Умови використанняПолітику конфіденційностіУ вас уже є обліковий запис
@@ -65,4 +68,7 @@
Підтвердити номер телефонуПродовжитиКоли ви торкнетесь опції “%1$s”, вам може надійти SMS-повідомлення. За SMS і використання трафіку може стягуватися плата.
+ Торкаючись кнопки “%1$s”, ви приймаєте такі документи: %2$s і %3$s. Вам може надійти SMS-повідомлення. За SMS і використання трафіку може стягуватися плата.
+ Торкаючись кнопки “%1$s”, ви приймаєте такий документ: %2$s. Вам може надійти SMS-повідомлення. За SMS і використання трафіку може стягуватися плата.
+ Торкаючись кнопки “%1$s”, ви приймаєте такий документ: %2$s. Вам може надійти SMS-повідомлення. За SMS і використання трафіку може стягуватися плата.
diff --git a/auth/src/main/res/values-ur/strings.xml b/auth/src/main/res/values-ur/strings.xml
index 71ea454b7..e6b9ee877 100755
--- a/auth/src/main/res/values-ur/strings.xml
+++ b/auth/src/main/res/values-ur/strings.xml
@@ -1,6 +1,12 @@
-
+لوڈ ہو رہا ہے…سائن ان کریں
+ جاری رکھ کر، آپ نشاندہی کر رہے ہیں کہ آپ ہماری %1$s اور %2$s کو قبول کرتے ہیں۔
+ جاری رکھ کر، آپ نشاندہی کر رہے ہیں کہ آپ ہماری %1$s کو قبول کرتے ہیں۔
+ جاری رکھ کر، آپ نشاندہی کر رہے ہیں کہ آپ ہماری %1$s کو قبول کرتے ہیں۔
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
سائن اپ ہو رہا ہے…پاس ورڈ کافی مضبوط نہیں ہے۔ کم از کم %1$d کریکٹر اور حروف و اعداد کا مرکب استعمال کریںپاس ورڈ کافی مضبوط نہیں ہے۔ کم از کم %1$d کریکٹرز اور حروف و اعداد کا مرکب استعمال کریںای میل اکاؤنٹ کی رجسٹریشن نا کام رہی
- %1$s کو تھپتھپا کر آپ نشاندہی کر رہے ہیں کہ آپ %2$s اور %3$s سے اتفاق کرتے ہیں۔
- %1$s کو تھپتھپا کر آپ نشاندہی کر رہے ہیں کہ آپ %2$s سے اتفاق کرتے ہیں۔
- %1$s کو تھپتھپا کر آپ نشاندہی کر رہے ہیں کہ آپ %2$s سے اتفاق کرتے ہیں۔سروس کی شرائطرازداری کی پالیسیآپ کے پاس پہلے سے ہی ایک اکاؤنٹ موجود ہے
@@ -65,4 +68,7 @@
فون نمبر کی توثیق کریںجاری رکھیں%1$s پر تھپتھپانے سے، ایک SMS بھیجا جا سکتا ہے۔ پیغام اور ڈیٹا کی شرحوں کا اطلاق ہو سکتا ہے۔
+ “%1$s” کو تھپتھپا کر، آپ نشاندہی کر رہے ہیں کہ آپ ہماری %2$s اور %3$s کو قبول کرتے ہیں۔ ایک SMS بھیجا جا سکتا ہے۔ پیغام اور ڈیٹا نرخ لاگو ہو سکتے ہیں۔
+ “%1$s” کو تھپتھپا کر، آپ نشاندہی کر رہے ہیں کہ آپ ہماری %2$s کو قبول کرتے ہیں۔ ایک SMS بھیجا جا سکتا ہے۔ پیغام اور ڈیٹا نرخ لاگو ہو سکتے ہیں۔
+ “%1$s” کو تھپتھپا کر، آپ نشاندہی کر رہے ہیں کہ آپ ہماری %2$s کو قبول کرتے ہیں۔ ایک SMS بھیجا جا سکتا ہے۔ پیغام اور ڈیٹا نرخ لاگو ہو سکتے ہیں۔
diff --git a/auth/src/main/res/values-vi/strings.xml b/auth/src/main/res/values-vi/strings.xml
index 578b629b0..6932b3c27 100755
--- a/auth/src/main/res/values-vi/strings.xml
+++ b/auth/src/main/res/values-vi/strings.xml
@@ -1,6 +1,12 @@
-
+Đang tải…Đăng nhập
+ Bằng cách tiếp tục, bạn cho biết rằng bạn chấp nhận %1$s và %2$s của chúng tôi.
+ Bằng cách tiếp tục, bạn cho biết rằng bạn chấp nhận %1$s của chúng tôi.
+ Bằng cách tiếp tục, bạn cho biết rằng bạn chấp nhận %1$s của chúng tôi.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
Đang đăng ký…Mật khẩu không đủ mạnh. Sử dụng ít nhất %1$d ký tự, kết hợp chữ cái và sốMật khẩu không đủ mạnh. Sử dụng ít nhất %1$d ký tự, kết hợp chữ cái và sốĐăng ký tài khoản email không thành công
- Bằng cách nhấn vào %1$s, bạn cho biết rằng bạn đồng ý với %2$s và %3$s.
- Bằng cách nhấn vào %1$s, bạn cho biết rằng bạn đồng ý với %2$s.
- Bằng cách nhấn vào %1$s, bạn cho biết rằng bạn đồng ý với %2$s.Điều khoản dịch vụChính sách bảo mậtBạn đã có tài khoản
@@ -65,4 +68,7 @@
Xác minh số điện thoạiTiếp tụcBằng cách nhấn vào “%1$s”, bạn có thể nhận được một tin nhắn SMS. Cước tin nhắn và dữ liệu có thể áp dụng.
+ Bằng cách nhấn vào “%1$s”, bạn cho biết rằng bạn chấp nhận %2$s và %3$s của chúng tôi. Bạn có thể nhận được một tin nhắn SMS. Cước tin nhắn và dữ liệu có thể áp dụng.
+ Bằng cách nhấn vào “%1$s”, bạn cho biết rằng bạn chấp nhận %2$s của chúng tôi. Bạn có thể nhận được một tin nhắn SMS. Cước tin nhắn và dữ liệu có thể áp dụng.
+ Bằng cách nhấn vào “%1$s”, bạn cho biết rằng bạn chấp nhận %2$s của chúng tôi. Bạn có thể nhận được một tin nhắn SMS. Cước tin nhắn và dữ liệu có thể áp dụng.
diff --git a/auth/src/main/res/values-zh-rCN/strings.xml b/auth/src/main/res/values-zh-rCN/strings.xml
index 2e0cc3f7b..c71760105 100755
--- a/auth/src/main/res/values-zh-rCN/strings.xml
+++ b/auth/src/main/res/values-zh-rCN/strings.xml
@@ -1,6 +1,12 @@
-
+正在加载…登录
+ 继续即表示您接受我们的%1$s和%2$s。
+ 继续即表示您接受我们的%1$s。
+ 继续即表示您接受我们的%1$s。
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
正在注册…密码的安全系数不够高。请使用至少 %1$d 个字符,并混合使用字母和数字密码的安全系数不够高。请使用至少 %1$d 个字符,并混合使用字母和数字未能使用电子邮件地址注册帐号
- 点按“%1$s”即表示您同意 %2$s 和 %3$s。
- 点按“%1$s”即表示您同意 %2$s。
- 点按“%1$s”即表示您同意 %2$s。服务条款隐私权政策您已经有帐号了
@@ -65,4 +68,7 @@
验证电话号码继续您点按“%1$s”后,系统会向您发送一条短信。这可能会产生短信费用和上网流量费。
+ 点按“%1$s”即表示您接受我们的%2$s和%3$s。系统会向您发送一条短信。这可能会产生短信费用和上网流量费。
+ 点按“%1$s”即表示您接受我们的%2$s。系统会向您发送一条短信。这可能会产生短信费用和上网流量费。
+ 点按“%1$s”即表示您接受我们的%2$s。系统会向您发送一条短信。这可能会产生短信费用和上网流量费。
diff --git a/auth/src/main/res/values-zh-rHK/strings.xml b/auth/src/main/res/values-zh-rHK/strings.xml
index 77d575905..efc41c341 100755
--- a/auth/src/main/res/values-zh-rHK/strings.xml
+++ b/auth/src/main/res/values-zh-rHK/strings.xml
@@ -1,6 +1,12 @@
-
+載入中…登入
+ 選擇繼續即表示您同意接受我們的《%1$s》和《%2$s》。
+ 選擇繼續即表示您同意接受我們的《%1$s》。
+ 選擇繼續即表示您同意接受我們的《%1$s》。
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
註冊中…密碼安全強度不足。請使用至少 %1$d 個字元並混用字母和數字密碼安全強度不足。請使用至少 %1$d 個字元並混用字母和數字電子郵件帳戶註冊失敗
- 輕觸 [%1$s] 即表示您同意《%2$s》和《%3$s》。
- 輕觸 [%1$s] 即表示您同意《%2$s》。
- 輕觸 [%1$s] 即表示您同意《%2$s》。服務條款隱私權政策您已經有帳戶
@@ -65,4 +68,7 @@
驗證電話號碼繼續輕觸 [%1$s] 後,系統將會傳送一封簡訊。您可能需支付簡訊和數據傳輸費用。
+ 輕觸 [%1$s] 即表示您同意接受我們的《%2$s》和《%3$s》。系統將會傳送簡訊給您,不過您可能需要支付簡訊和數據傳輸費用。
+ 輕觸 [%1$s] 即表示您同意接受我們的《%2$s》。系統將會傳送簡訊給您,不過您可能需要支付簡訊和數據傳輸費用。
+ 輕觸 [%1$s] 即表示您同意接受我們的《%2$s》。系統將會傳送簡訊給您,不過您可能需要支付簡訊和數據傳輸費用。
diff --git a/auth/src/main/res/values-zh-rTW/strings.xml b/auth/src/main/res/values-zh-rTW/strings.xml
index 77d575905..efc41c341 100755
--- a/auth/src/main/res/values-zh-rTW/strings.xml
+++ b/auth/src/main/res/values-zh-rTW/strings.xml
@@ -1,6 +1,12 @@
-
+載入中…登入
+ 選擇繼續即表示您同意接受我們的《%1$s》和《%2$s》。
+ 選擇繼續即表示您同意接受我們的《%1$s》。
+ 選擇繼續即表示您同意接受我們的《%1$s》。
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
註冊中…密碼安全強度不足。請使用至少 %1$d 個字元並混用字母和數字密碼安全強度不足。請使用至少 %1$d 個字元並混用字母和數字電子郵件帳戶註冊失敗
- 輕觸 [%1$s] 即表示您同意《%2$s》和《%3$s》。
- 輕觸 [%1$s] 即表示您同意《%2$s》。
- 輕觸 [%1$s] 即表示您同意《%2$s》。服務條款隱私權政策您已經有帳戶
@@ -65,4 +68,7 @@
驗證電話號碼繼續輕觸 [%1$s] 後,系統將會傳送一封簡訊。您可能需支付簡訊和數據傳輸費用。
+ 輕觸 [%1$s] 即表示您同意接受我們的《%2$s》和《%3$s》。系統將會傳送簡訊給您,不過您可能需要支付簡訊和數據傳輸費用。
+ 輕觸 [%1$s] 即表示您同意接受我們的《%2$s》。系統將會傳送簡訊給您,不過您可能需要支付簡訊和數據傳輸費用。
+ 輕觸 [%1$s] 即表示您同意接受我們的《%2$s》。系統將會傳送簡訊給您,不過您可能需要支付簡訊和數據傳輸費用。
diff --git a/auth/src/main/res/values-zh/strings.xml b/auth/src/main/res/values-zh/strings.xml
index 2e0cc3f7b..c71760105 100755
--- a/auth/src/main/res/values-zh/strings.xml
+++ b/auth/src/main/res/values-zh/strings.xml
@@ -1,6 +1,12 @@
-
+正在加载…登录
+ 继续即表示您接受我们的%1$s和%2$s。
+ 继续即表示您接受我们的%1$s。
+ 继续即表示您接受我们的%1$s。
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogleFacebookTwitter
@@ -23,9 +29,6 @@
正在注册…密码的安全系数不够高。请使用至少 %1$d 个字符,并混合使用字母和数字密码的安全系数不够高。请使用至少 %1$d 个字符,并混合使用字母和数字未能使用电子邮件地址注册帐号
- 点按“%1$s”即表示您同意 %2$s 和 %3$s。
- 点按“%1$s”即表示您同意 %2$s。
- 点按“%1$s”即表示您同意 %2$s。服务条款隐私权政策您已经有帐号了
@@ -65,4 +68,7 @@
验证电话号码继续您点按“%1$s”后,系统会向您发送一条短信。这可能会产生短信费用和上网流量费。
+ 点按“%1$s”即表示您接受我们的%2$s和%3$s。系统会向您发送一条短信。这可能会产生短信费用和上网流量费。
+ 点按“%1$s”即表示您接受我们的%2$s。系统会向您发送一条短信。这可能会产生短信费用和上网流量费。
+ 点按“%1$s”即表示您接受我们的%2$s。系统会向您发送一条短信。这可能会产生短信费用和上网流量费。
diff --git a/auth/src/main/res/values/strings.xml b/auth/src/main/res/values/strings.xml
index d9d3b9335..8f6018b90 100644
--- a/auth/src/main/res/values/strings.xml
+++ b/auth/src/main/res/values/strings.xml
@@ -5,6 +5,12 @@
@string/app_nameLoading…Sign in
+ By continuing, you are indicating that you accept our %1$s and %2$s.
+ By continuing, you are indicating that you accept our %1$s.
+ By continuing, you are indicating that you accept our %1$s.
+ %1$s \u00A0 \u00A0 %2$s
+ %1$s
+ %1$sGoogle
@@ -38,9 +44,6 @@
Password not strong enough. Use at least %1$d characters and a mix of letters and numbersEmail account registration unsuccessful
- By tapping %1$s you are indicating that you agree to the %2$s and the %3$s.
- By tapping %1$s you are indicating that you agree to the %2$s.
- By tapping %1$s you are indicating that you agree to the %2$s.Terms of ServicePrivacy Policyemail_field
@@ -100,4 +103,7 @@
Verify Phone NumberContinueBy tapping “%1$s”, an SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s and %3$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
+ By tapping “%1$s”, you are indicating that you accept our %2$s. An SMS may be sent. Message & data rates may apply.
diff --git a/auth/src/main/res/values/styles.xml b/auth/src/main/res/values/styles.xml
index ae3b546b1..329054b59 100644
--- a/auth/src/main/res/values/styles.xml
+++ b/auth/src/main/res/values/styles.xml
@@ -12,11 +12,11 @@
+
+
+
+
diff --git a/auth/src/test/java/com/firebase/ui/auth/AuthUITest.java b/auth/src/test/java/com/firebase/ui/auth/AuthUITest.java
index c947e6958..1476505e4 100644
--- a/auth/src/test/java/com/firebase/ui/auth/AuthUITest.java
+++ b/auth/src/test/java/com/firebase/ui/auth/AuthUITest.java
@@ -22,6 +22,7 @@
import com.firebase.ui.auth.util.ExtraConstants;
import com.google.firebase.FirebaseApp;
import com.google.firebase.auth.EmailAuthProvider;
+import com.google.firebase.auth.FirebaseAuth;
import org.junit.Before;
import org.junit.Test;
@@ -31,12 +32,14 @@
import java.util.Arrays;
import static junit.framework.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
@RunWith(RobolectricTestRunner.class)
public class AuthUITest {
@Before
public void setUp() {
TestHelper.initialize();
+ AuthUI.sDefaultAuth = mock(FirebaseAuth.class);
}
@Test
diff --git a/auth/src/test/java/com/firebase/ui/auth/testhelpers/TestHelper.java b/auth/src/test/java/com/firebase/ui/auth/testhelpers/TestHelper.java
index ec29b6773..37f282a83 100644
--- a/auth/src/test/java/com/firebase/ui/auth/testhelpers/TestHelper.java
+++ b/auth/src/test/java/com/firebase/ui/auth/testhelpers/TestHelper.java
@@ -30,12 +30,10 @@
import com.firebase.ui.auth.util.ExtraConstants;
import com.firebase.ui.auth.util.data.ProviderUtils;
import com.google.android.gms.auth.api.credentials.Credential;
-import com.google.android.gms.tasks.Tasks;
import com.google.firebase.FirebaseApp;
import com.google.firebase.FirebaseOptions;
import com.google.firebase.auth.EmailAuthProvider;
import com.google.firebase.auth.FacebookAuthProvider;
-import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;
import com.google.firebase.auth.PhoneAuthProvider;
@@ -46,16 +44,11 @@
import org.robolectric.Shadows;
import org.robolectric.shadows.ShadowActivity;
-import java.lang.reflect.Field;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
-import java.util.Map;
import static junit.framework.Assert.assertEquals;
-import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
@@ -67,8 +60,7 @@ public class TestHelper {
public static void initialize() {
spyContextAndResources();
AuthUI.setApplicationContext(RuntimeEnvironment.application);
- FirebaseApp app = initializeApp(RuntimeEnvironment.application);
- injectMockFirebaseAuth(app);
+ initializeApp(RuntimeEnvironment.application);
initializeProviders();
}
@@ -94,47 +86,6 @@ private static FirebaseApp initializeApp(Context context) {
}
}
- /**
- * This method finds the map of FirebaseAuth instances and injects of a mock instance associated
- * with the given FirebaseApp for testing purposes.
- */
- private static void injectMockFirebaseAuth(FirebaseApp app) {
- for (Field field : FirebaseAuth.class.getDeclaredFields()) {
- field.setAccessible(true);
-
- Object o;
- try {
- o = field.get(null);
- } catch (IllegalAccessException e) {
- throw new IllegalStateException(e);
- } catch (NullPointerException e) {
- continue;
- }
-
- Type genericType = field.getGenericType();
- if (o instanceof Map && genericType instanceof ParameterizedType) {
- Type[] parameterTypes = ((ParameterizedType) genericType).getActualTypeArguments();
- if (parameterTypes.length != 2 || parameterTypes[0] != String.class
- || parameterTypes[1] != FirebaseAuth.class) {
- continue;
- }
-
- //noinspection unchecked
- Map instances = (Map) o;
-
- FirebaseAuth.getInstance(app);
- for (String id : instances.keySet()) {
- instances.put(id, mock(FirebaseAuth.class));
- }
-
- break;
- }
- }
-
- when(FirebaseAuth.getInstance(app).setFirebaseUIVersion(anyString()))
- .thenReturn(Tasks.forResult(null));
- }
-
private static void initializeProviders() {
Context context = RuntimeEnvironment.application;
when(context.getString(R.string.default_web_client_id)).thenReturn("abc");
diff --git a/auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneActivityTest.java b/auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneActivityTest.java
index a9f29a84a..4a2c075b0 100644
--- a/auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneActivityTest.java
+++ b/auth/src/test/java/com/firebase/ui/auth/ui/phone/PhoneActivityTest.java
@@ -131,7 +131,7 @@ public void testDefaultFullPhoneNumber_prePopulatesPhoneNumberInBundle() {
assertEquals(PHONE_NO_COUNTRY_CODE, mPhoneEditText.getText().toString());
assertEquals(YE_COUNTRY_CODE,
- String.valueOf(((CountryInfo) mCountryListSpinner.getTag()).getCountryCode()));
+ String.valueOf((mCountryListSpinner.getSelectedCountryInfo()).getCountryCode()));
}
@Test
@@ -157,9 +157,9 @@ public void testDefaultCountryCodeAndNationalNumber_prePopulatesPhoneNumberInBun
assertEquals(PHONE_NO_COUNTRY_CODE, mPhoneEditText.getText().toString());
assertEquals(CA_COUNTRY_CODE,
- String.valueOf(((CountryInfo) mCountryListSpinner.getTag()).getCountryCode()));
+ String.valueOf((mCountryListSpinner.getSelectedCountryInfo()).getCountryCode()));
assertEquals(new Locale("", CA_ISO2),
- ((CountryInfo) mCountryListSpinner.getTag()).getLocale());
+ ((CountryInfo) mCountryListSpinner.getSelectedCountryInfo()).getLocale());
}
@Test
diff --git a/build.gradle b/build.gradle
index 94462a564..ce08744fd 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,9 +8,9 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.1.0'
+ classpath 'com.android.tools.build:gradle:3.1.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
- classpath 'com.google.gms:google-services:3.2.0'
+ classpath 'com.google.gms:google-services:3.2.1'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:4.5.4'
}
diff --git a/common/src/main/java/com/firebase/ui/common/Preconditions.java b/common/src/main/java/com/firebase/ui/common/Preconditions.java
index 11a452242..12f888c2f 100644
--- a/common/src/main/java/com/firebase/ui/common/Preconditions.java
+++ b/common/src/main/java/com/firebase/ui/common/Preconditions.java
@@ -6,7 +6,7 @@
* Convenience class for checking argument conditions.
*/
@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
-public class Preconditions {
+public final class Preconditions {
public static T checkNotNull(T o) {
if (o == null) throw new IllegalArgumentException("Argument cannot be null.");
diff --git a/constants.gradle b/constants.gradle
index 9185afcf0..820fe4324 100644
--- a/constants.gradle
+++ b/constants.gradle
@@ -1,15 +1,23 @@
project.ext {
submodules = ['database', 'auth', 'storage', 'firestore', 'common']
group = 'com.firebaseui'
- version = '3.3.1'
+ version = '4.0.0'
pomdesc = 'Firebase UI Android'
compileSdk = 27
targetSdk = 27
minSdk = 14
- firebaseVersion = '15.0.0'
- supportLibraryVersion = '27.1.0'
- architectureVersion = '1.1.0'
- kotlinVersion = '1.2.30'
+ coreVersion = '16.0.0' // firebase-core
+ authVersion = '16.0.1' // firebase-auth
+ playAuthVersion = '15.0.1' // play-services-auth
+ rtdbVersion = '16.0.1' // firebase-database
+ firestoreVersion = '17.0.1' // firebase-firestore
+ storageVersion = '16.0.1' // firebase-storage
+
+ supportLibraryVersion = '27.1.1'
+ architectureVersion = '1.1.1'
+ kotlinVersion = '1.2.40'
+ pagingVersion = '1.0.0'
+ constraintVersion = '1.1.0'
}
diff --git a/database/build.gradle b/database/build.gradle
index 14377d40f..cd6181fe9 100644
--- a/database/build.gradle
+++ b/database/build.gradle
@@ -16,7 +16,7 @@ android {
dependencies {
api project(path: ':common')
- api "com.google.firebase:firebase-database:$firebaseVersion"
+ api "com.google.firebase:firebase-database:$rtdbVersion"
api "com.android.support:support-v4:$supportLibraryVersion"
api "com.android.support:recyclerview-v7:$supportLibraryVersion"
diff --git a/database/src/main/java/com/firebase/ui/database/FirebaseListOptions.java b/database/src/main/java/com/firebase/ui/database/FirebaseListOptions.java
index d50f5637d..87f3f7c2a 100644
--- a/database/src/main/java/com/firebase/ui/database/FirebaseListOptions.java
+++ b/database/src/main/java/com/firebase/ui/database/FirebaseListOptions.java
@@ -16,7 +16,7 @@
*
* @see Builder
*/
-public class FirebaseListOptions {
+public final class FirebaseListOptions {
private static final String ERR_SNAPSHOTS_SET = "Snapshot array already set. " +
"Call only one of setSnapshotArray, setQuery, or setIndexedQuery.";
@@ -62,7 +62,7 @@ public LifecycleOwner getOwner() {
*
* @param the model class for the {@link FirebaseListAdapter}.
*/
- public static class Builder {
+ public static final class Builder {
private ObservableSnapshotArray mSnapshots;
private @LayoutRes Integer mLayout;
diff --git a/database/src/main/java/com/firebase/ui/database/FirebaseRecyclerOptions.java b/database/src/main/java/com/firebase/ui/database/FirebaseRecyclerOptions.java
index 8da6d4d08..34d4ce0ef 100644
--- a/database/src/main/java/com/firebase/ui/database/FirebaseRecyclerOptions.java
+++ b/database/src/main/java/com/firebase/ui/database/FirebaseRecyclerOptions.java
@@ -15,7 +15,7 @@
*
* @see Builder
*/
-public class FirebaseRecyclerOptions {
+public final class FirebaseRecyclerOptions {
private static final String ERR_SNAPSHOTS_SET = "Snapshot array already set. " +
"Call only one of setSnapshotArray, setQuery, or setIndexedQuery.";
@@ -53,7 +53,7 @@ public LifecycleOwner getOwner() {
*
* @param the model class for the {@link FirebaseRecyclerAdapter}.
*/
- public static class Builder {
+ public static final class Builder {
private ObservableSnapshotArray mSnapshots;
private LifecycleOwner mOwner;
diff --git a/database/src/main/java/com/firebase/ui/database/ObservableSnapshotArray.java b/database/src/main/java/com/firebase/ui/database/ObservableSnapshotArray.java
index a1daf8140..94869a46b 100644
--- a/database/src/main/java/com/firebase/ui/database/ObservableSnapshotArray.java
+++ b/database/src/main/java/com/firebase/ui/database/ObservableSnapshotArray.java
@@ -16,7 +16,6 @@
*/
public abstract class ObservableSnapshotArray
extends BaseObservableSnapshotArray {
-
/**
* Create an ObservableSnapshotArray with a custom {@link SnapshotParser}.
*
@@ -25,12 +24,4 @@ public abstract class ObservableSnapshotArray
public ObservableSnapshotArray(@NonNull SnapshotParser parser) {
super(new CachingSnapshotParser<>(parser));
}
-
- /**
- * Use {@link BaseObservableSnapshotArray#notifyOnError(Object)}.
- */
- @Deprecated
- protected void notifyListenersOnCancelled(DatabaseError error) {
- notifyOnError(error);
- }
}
diff --git a/docs/compat_reports/firebase-ui-auth/3.3.1_to_4.0.0/compat_report.html b/docs/compat_reports/firebase-ui-auth/3.3.1_to_4.0.0/compat_report.html
new file mode 100644
index 000000000..517420665
--- /dev/null
+++ b/docs/compat_reports/firebase-ui-auth/3.3.1_to_4.0.0/compat_report.html
@@ -0,0 +1,897 @@
+
+
+
+
+
+
+
+
+firebase-ui-auth: 3.3.1 to 4.0.0 compatibility report
+
+
+
+
API compatibility report for the firebase-ui-auth library between 3.3.1 and 4.0.0 versions
Superclass has been changed from com.firebase.ui.auth.ui.HelperActivityBase to com.firebase.ui.auth.ui.InvisibleActivityBase.
+
1) Access of a client program to the fields or methods of the old super-class may be interrupted by NoSuchFieldError or NoSuchMethodError exceptions. 2) A static field from a super-interface of a client class may hide a field (with the same name) inherited from new super-class and cause IncompatibleClassChangeError exception.
+
+
+[+] affected methods: 4 (3.8%)
+
+
CredentialSaveActivity.CredentialSaveActivity ( )
This constructor is from 'CredentialSaveActivity' class.
Superclass has been changed from com.firebase.ui.auth.ui.HelperActivityBase to com.firebase.ui.auth.ui.InvisibleActivityBase.
+
1) Access of a client program to the fields or methods of the old super-class may be interrupted by NoSuchFieldError or NoSuchMethodError exceptions. 2) A static field from a super-interface of a client class may hide a field (with the same name) inherited from new super-class and cause IncompatibleClassChangeError exception.
+
+
+[+] affected methods: 4 (3.8%)
+
+
SingleSignInActivity.SingleSignInActivity ( )
This constructor is from 'SingleSignInActivity' class.
+SingleSignInActivity.createIntent ( Context context, FlowParameters flowParams, User user )
This method is from 'SingleSignInActivity' class.
+SingleSignInActivity.onActivityResult ( int requestCode, int resultCode, Intent data )
Access level has been changed from public to protected.
+
Recompilation of a client program may be terminated with the message: AuthUI.IdpConfig.Builder ( String ) has protected access in AuthUI.IdpConfig.Builder.
Superclass has been changed from com.firebase.ui.auth.ui.HelperActivityBase to com.firebase.ui.auth.ui.InvisibleActivityBase.
+
1) Recompilation of a client program may be terminated with the message: cannot find variable (or method) in CredentialSaveActivity. 2) A static field from a super-interface of a client class may hide a field (with the same name) inherited from new super-class. Recompilation of a client class may be terminated with the message: reference to variable is ambiguous.
+
+
+[+] affected methods: 4 (3.8%)
+
+
CredentialSaveActivity.CredentialSaveActivity ( )
This constructor is from 'CredentialSaveActivity' class.
Superclass has been changed from com.firebase.ui.auth.ui.HelperActivityBase to com.firebase.ui.auth.ui.InvisibleActivityBase.
+
1) Recompilation of a client program may be terminated with the message: cannot find variable (or method) in SingleSignInActivity. 2) A static field from a super-interface of a client class may hide a field (with the same name) inherited from new super-class. Recompilation of a client class may be terminated with the message: reference to variable is ambiguous.
+
+
+[+] affected methods: 4 (3.8%)
+
+
SingleSignInActivity.SingleSignInActivity ( )
This constructor is from 'SingleSignInActivity' class.
+SingleSignInActivity.createIntent ( Context context, FlowParameters flowParams, User user )
This method is from 'SingleSignInActivity' class.
+SingleSignInActivity.onActivityResult ( int requestCode, int resultCode, Intent data )
+
\ No newline at end of file
diff --git a/docs/upgrade-to-4.0.md b/docs/upgrade-to-4.0.md
new file mode 100644
index 000000000..558cb9072
--- /dev/null
+++ b/docs/upgrade-to-4.0.md
@@ -0,0 +1,30 @@
+# Upgrading to FirebaseUI 4.0
+
+This document outlines the key _breaking_ changes made between versions `3.3.1` and `4.0.0` as well
+as suggested upgrade paths. This is not a comprehensive list of all features or bug fixes, please
+reference the [release notes][release-notes] for that information.
+
+For a full, machine-generated compatibility report see the `docs/compat_reports` folder.
+
+## Auth
+
+* Removed all previously `@Deprecated` methods on `AuthUI.IdpConfig.Builder`, `AuthUI.IdpConfig`,
+ `IdpResponse`, and `AuthUI.SignInIntentBuilder`. Most of the deprecated methods have to do
+ with configuring the FirebaseUI sign-in Intent and the replacements can be seen in the `README`.
+
+## Realtime Database
+
+* No breaking changes.
+
+## Cloud Firestore
+
+* Adopt the breaking changes from the `firebase-firestore` library version `16.0.0`. The primary
+ breaking change is the removal of `QueryListenOptions`, which has been replaced by the
+ `MetadataChanges` enum. See the [firebase release notes][firebase-0502] for more information.
+
+## Cloud Storage
+
+* No breaking changes.
+
+[firebase-0502]: https://firebase.google.com/support/release-notes/android#20180502
+[release-notes]: https://github.com/firebase/FirebaseUI-Android/releases/tag/4.0.0
diff --git a/firestore/README.md b/firestore/README.md
index cb52d0b62..7ee7b17da 100644
--- a/firestore/README.md
+++ b/firestore/README.md
@@ -12,9 +12,13 @@ Before using this library, you should be familiar with the following topics:
1. [Data model](#data-model)
1. [Querying](#querying)
1. [Populating a RecyclerView](#using-firebaseui-to-populate-a-recyclerview)
- 1. [Using the adapter](#using-the-firestorerecycleradapter)
- 1. [Adapter lifecyle](#firestorerecycleradapter-lifecycle)
- 1. [Events](#data-and-error-events)
+ 1. [Choosing an adapter](#choosing-an-adapter)
+ 1. [Using the FirestoreRecyclerAdapter](#using-the-firestorerecycleradapter)
+ 1. [Adapter lifecyle](#firestorerecycleradapter-lifecycle)
+ 1. [Events](#data-and-error-events)
+ 1. [Using the FirestorePagingAdapter](#using-the-firestorepagingadapter)
+ 1. [Adapter lifecyle](#firestorepagingadapter-lifecycle)
+ 1. [Events](#paging-events)
## Data model
@@ -109,6 +113,18 @@ updates with the `EventListener` on the `Query`.
Fear not, FirebaseUI does all of this for you automatically!
+
+### Choosing an adapter
+
+FirebaseUI offers two types of RecyclerView adapters for Cloud Firestore:
+
+ * `FirestoreRecyclerAdapter` — binds a `Query` to a `RecyclerView` and responds to all real-time
+ events included items being added, removed, moved, or changed. Best used with small result sets
+ since all results are loaded at once.
+ * `FirestorePagingAdapter` — binds a `Query` to a `RecyclerView` by loading data in pages. Best
+ used with large, static data sets. Real-time events are not respected by this adapter, so it
+ will not detect new/removed items or changes to items already loaded.
+
### Using the `FirestoreRecyclerAdapter`
The `FirestoreRecyclerAdapter` binds a `Query` to a `RecyclerView`. When documents are added,
@@ -161,12 +177,12 @@ FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter options = new FirestorePagingOptions.Builder()
+ .setLifecycleOwner(this)
+ .setQuery(baseQuery, config, Item.class)
+ .build();
+```
+
+If you need to customize how your model class is parsed, you can use a custom `SnapshotParser`:
+
+```java
+...setQuery(..., new SnapshotParser() {
+ @NonNull
+ @Override
+ public Item parseSnapshot(@NonNull DocumentSnapshot snapshot) {
+ return ...;
+ }
+});
+```
+
+Next, create the `FirestorePagingAdapter` object. You should already have a `ViewHolder` subclass
+for displaying each item. In this case we will use a custom `ItemViewHolder` class:
+
+```java
+FirestorePagingAdapter adapter =
+ new FirestorePagingAdapter(options) {
+ @NonNull
+ @Override
+ public ItemViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ // Create the ItemViewHolder
+ // ...
+ }
+
+ @Override
+ protected void onBindViewHolder(@NonNull ItemViewHolder holder,
+ int position,
+ @NonNull Item model) {
+ // Bind the item to the view holder
+ // ...
+ }
+ };
+```
+
+Finally attach the adapter to your `RecyclerView` with the `RecyclerView#setAdapter()` method.
+Don't forget to also set a `LayoutManager`!
+
+#### `FirestorePagingAdapter` lifecycle
+
+##### Start/stop listening
+
+The `FirestorePagingAdapter` listens for scrolling events and loads additional pages from the
+database only when needed.
+
+To begin populating data, call the `startListening()` method. You may want to call this
+in your `onStart()` method. Make sure you have finished any authentication necessary to read the
+data before calling `startListening()` or your query will fail.
+
+```java
+@Override
+protected void onStart() {
+ super.onStart();
+ adapter.startListening();
+}
+```
+
+Similarly, the `stopListening()` call freezes the data in the `RecyclerView` and prevents any future
+loading of data pages.
+
+Call this method when the containing Activity or Fragment stops:
+
+```java
+@Override
+protected void onStop() {
+ super.onStop();
+ adapter.stopListening();
+}
+```
+
+##### Automatic listening
+
+If you don't want to manually start/stop listening you can use
+[Android Architecture Components][arch-components] to automatically manage the lifecycle of the
+`FirestorePagingAdapter`. Pass a `LifecycleOwner` to
+`FirestorePagingOptions.Builder#setLifecycleOwner(...)` and FirebaseUI will automatically
+start and stop listening in `onStart()` and `onStop()`.
+
+#### Paging events
+
+When using the `FirestorePagingAdapter`, you may want to perform some action every time data
+changes or when there is an error. To do this, override the `onLoadingStateChanged()`
+method of the adapter:
+
+```java
+FirestorePagingAdapter adapter =
+ new FirestorePagingAdapter(options) {
+
+ // ...
+
+ @Override
+ protected void onLoadingStateChanged(@NonNull LoadingState state) {
+ switch (state) {
+ case LOADING_INITIAL:
+ // The initial load has begun
+ // ...
+ case LOADING_MORE:
+ // The adapter has started to load an additional page
+ // ...
+ case LOADED:
+ // The previous load (either initial or additional) completed
+ // ...
+ case ERROR:
+ // The previous load (either initial or additional) failed. Call
+ // the retry() method in order to retry the load operation.
+ // ...
+ }
+ }
+ };
+```
+
[firestore-docs]: https://firebase.google.com/docs/firestore/
[firestore-custom-objects]: https://firebase.google.com/docs/firestore/manage-data/add-data#custom_objects
[recyclerview]: https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html
[arch-components]: https://developer.android.com/topic/libraries/architecture/index.html
+[paging-support]: https://developer.android.com/topic/libraries/architecture/paging.html
diff --git a/firestore/build.gradle b/firestore/build.gradle
index 5c6dfe2bf..09273223b 100644
--- a/firestore/build.gradle
+++ b/firestore/build.gradle
@@ -12,17 +12,30 @@ android {
versionName version
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
+
+ buildTypes {
+ release {
+ postprocessing {
+ consumerProguardFile 'proguard-rules.pro'
+ }
+ }
+ }
}
dependencies {
api project(path: ':common')
- api "com.google.firebase:firebase-firestore:$firebaseVersion"
+ api "com.google.firebase:firebase-firestore:$firestoreVersion"
api "com.android.support:support-v4:$supportLibraryVersion"
api "com.android.support:recyclerview-v7:$supportLibraryVersion"
annotationProcessor "android.arch.lifecycle:compiler:$architectureVersion"
+ compileOnly "android.arch.paging:runtime:$pagingVersion"
+
androidTestImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test:rules:1.0.1'
+ //noinspection GradleDynamicVersion
+ androidTestImplementation 'org.mockito:mockito-android:2.15.+'
+ androidTestImplementation 'android.arch.paging:runtime:1.0.0-beta1'
}
diff --git a/firestore/proguard-rules.pro b/firestore/proguard-rules.pro
new file mode 100644
index 000000000..ac289b86f
--- /dev/null
+++ b/firestore/proguard-rules.pro
@@ -0,0 +1 @@
+-dontwarn com.firebase.ui.firestore.paging.**
diff --git a/firestore/src/androidTest/java/com/firebase/ui/firestore/FirestoreDataSourceTest.java b/firestore/src/androidTest/java/com/firebase/ui/firestore/FirestoreDataSourceTest.java
new file mode 100644
index 000000000..a12108ed0
--- /dev/null
+++ b/firestore/src/androidTest/java/com/firebase/ui/firestore/FirestoreDataSourceTest.java
@@ -0,0 +1,205 @@
+package com.firebase.ui.firestore;
+
+import android.arch.lifecycle.Observer;
+import android.arch.paging.PageKeyedDataSource;
+import android.support.annotation.Nullable;
+import android.support.test.runner.AndroidJUnit4;
+
+import com.firebase.ui.firestore.paging.FirestoreDataSource;
+import com.firebase.ui.firestore.paging.LoadingState;
+import com.firebase.ui.firestore.paging.PageKey;
+import com.google.android.gms.tasks.Tasks;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.Query;
+import com.google.firebase.firestore.QuerySnapshot;
+import com.google.firebase.firestore.Source;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+@RunWith(AndroidJUnit4.class)
+public class FirestoreDataSourceTest {
+
+ private FirestoreDataSource mDataSource;
+
+ @Mock Query mMockQuery;
+ @Mock PageKeyedDataSource.LoadInitialCallback mInitialCallback;
+ @Mock PageKeyedDataSource.LoadCallback mAfterCallback;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ initMockQuery();
+
+ // Create a testing data source
+ mDataSource = new FirestoreDataSource(mMockQuery, Source.DEFAULT);
+ }
+
+ @Test
+ public void testLoadInitial_success() throws Exception {
+ mockQuerySuccess(new ArrayList());
+
+ TestObserver observer = new TestObserver<>(2);
+ mDataSource.getLoadingState().observeForever(observer);
+
+ // Kick off an initial load of 20 items
+ PageKeyedDataSource.LoadInitialParams params =
+ new PageKeyedDataSource.LoadInitialParams<>(20, false);
+ mDataSource.loadInitial(params, mInitialCallback);
+
+ // Should go from LOADING_INITIAL --> LOADED
+ observer.await();
+ observer.assertResults(Arrays.asList(LoadingState.LOADING_INITIAL, LoadingState.LOADED));
+ }
+
+ @Test
+ public void testLoadInitial_failure() throws Exception {
+ mockQueryFailure("Could not get initial documents.");
+
+ TestObserver observer = new TestObserver<>(2);
+ mDataSource.getLoadingState().observeForever(observer);
+
+ // Kick off an initial load of 20 items
+ PageKeyedDataSource.LoadInitialParams params =
+ new PageKeyedDataSource.LoadInitialParams<>(20, false);
+ mDataSource.loadInitial(params, mInitialCallback);
+
+ // Should go from LOADING_INITIAL --> ERROR
+ observer.await();
+ observer.assertResults(Arrays.asList(LoadingState.LOADING_INITIAL, LoadingState.ERROR));
+ }
+
+ @Test
+ public void testLoadAfter_success() throws Exception {
+ mockQuerySuccess(new ArrayList());
+
+ TestObserver observer = new TestObserver<>(2);
+ mDataSource.getLoadingState().observeForever(observer);
+
+ // Kick off an initial load of 20 items
+ PageKey pageKey = new PageKey(null, null);
+ PageKeyedDataSource.LoadParams params =
+ new PageKeyedDataSource.LoadParams<>(pageKey, 20);
+ mDataSource.loadAfter(params, mAfterCallback);
+
+ // Should go from LOADING_MORE --> LOADED
+ observer.await();
+ observer.assertResults(Arrays.asList(LoadingState.LOADING_MORE, LoadingState.LOADED));
+ }
+
+ @Test
+ public void testLoadAfter_failure() throws Exception {
+ mockQueryFailure("Could not load more documents.");
+
+ TestObserver observer = new TestObserver<>(2);
+ mDataSource.getLoadingState().observeForever(observer);
+
+ // Kick off an initial load of 20 items
+ PageKey pageKey = new PageKey(null, null);
+ PageKeyedDataSource.LoadParams params =
+ new PageKeyedDataSource.LoadParams<>(pageKey, 20);
+ mDataSource.loadAfter(params, mAfterCallback);
+
+ // Should go from LOADING_MORE --> ERROR
+ observer.await();
+ observer.assertResults(Arrays.asList(LoadingState.LOADING_MORE, LoadingState.ERROR));
+ }
+
+ @Test
+ public void testLoadAfter_retry() throws Exception {
+ mockQueryFailure("Could not load more documents.");
+
+ TestObserver observer1 = new TestObserver<>(2);
+ mDataSource.getLoadingState().observeForever(observer1);
+
+ // Kick off an initial load of 20 items
+ PageKey pageKey = new PageKey(null, null);
+ PageKeyedDataSource.LoadParams params =
+ new PageKeyedDataSource.LoadParams<>(pageKey, 20);
+ mDataSource.loadAfter(params, mAfterCallback);
+
+ // Should go from LOADING_MORE --> ERROR
+ observer1.await();
+ observer1.assertResults(Arrays.asList(LoadingState.LOADING_MORE, LoadingState.ERROR));
+
+ // Create a new observer
+ TestObserver observer2 = new TestObserver<>(3);
+ mDataSource.getLoadingState().observeForever(observer2);
+
+ // Retry the load
+ mockQuerySuccess(new ArrayList());
+ mDataSource.retry();
+
+ // Should go from ERROR --> LOADING_MORE --> SUCCESS
+ observer2.await();
+ observer2.assertResults(
+ Arrays.asList(LoadingState.ERROR, LoadingState.LOADING_MORE, LoadingState.LOADED));
+ }
+
+ private void initMockQuery() {
+ when(mMockQuery.startAfter(any())).thenReturn(mMockQuery);
+ when(mMockQuery.endBefore(any())).thenReturn(mMockQuery);
+ when(mMockQuery.limit(anyLong())).thenReturn(mMockQuery);
+ }
+
+ private void mockQuerySuccess(List snapshots) {
+ QuerySnapshot mockSnapshot = mock(QuerySnapshot.class);
+ when(mockSnapshot.getDocuments()).thenReturn(snapshots);
+
+ when(mMockQuery.get(Source.DEFAULT)).thenReturn(Tasks.forResult(mockSnapshot));
+ }
+
+ private void mockQueryFailure(String message) {
+ when(mMockQuery.get(Source.DEFAULT))
+ .thenReturn(Tasks.forException(new Exception(message)));
+ }
+
+ private static class TestObserver implements Observer {
+
+ private final List mResults = new ArrayList<>();
+ private final CountDownLatch mLatch;
+
+ public TestObserver(int expectedCount) {
+ mLatch = new CountDownLatch(expectedCount);
+ }
+
+ @Override
+ public void onChanged(@Nullable T t) {
+ if (t != null) {
+ mResults.add(t);
+ mLatch.countDown();
+ }
+ }
+
+ public List getResults() {
+ return mResults;
+ }
+
+ public void await() throws InterruptedException {
+ mLatch.await();
+ }
+
+ public void assertResults(List expected) {
+ assertEquals(expected.size(), mResults.size());
+
+ for (int i = 0; i < mResults.size(); i++) {
+ assertEquals(mResults.get(i), expected.get(i));
+ }
+ }
+
+ }
+}
diff --git a/firestore/src/main/java/com/firebase/ui/firestore/FirestoreArray.java b/firestore/src/main/java/com/firebase/ui/firestore/FirestoreArray.java
index 31cf060bb..fecb346dc 100644
--- a/firestore/src/main/java/com/firebase/ui/firestore/FirestoreArray.java
+++ b/firestore/src/main/java/com/firebase/ui/firestore/FirestoreArray.java
@@ -8,9 +8,9 @@
import com.google.firebase.firestore.EventListener;
import com.google.firebase.firestore.FirebaseFirestoreException;
import com.google.firebase.firestore.ListenerRegistration;
+import com.google.firebase.firestore.MetadataChanges;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QueryDocumentSnapshot;
-import com.google.firebase.firestore.QueryListenOptions;
import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
@@ -22,7 +22,7 @@
public class FirestoreArray extends ObservableSnapshotArray
implements EventListener {
private final Query mQuery;
- private final QueryListenOptions mOptions;
+ private final MetadataChanges mMetadataChanges;
private ListenerRegistration mRegistration;
private final List mSnapshots = new ArrayList<>();
@@ -35,19 +35,19 @@ public class FirestoreArray extends ObservableSnapshotArray
* @see ObservableSnapshotArray#ObservableSnapshotArray(SnapshotParser)
*/
public FirestoreArray(@NonNull Query query, @NonNull SnapshotParser parser) {
- this(query, new QueryListenOptions(), parser);
+ this(query, MetadataChanges.EXCLUDE, parser);
}
/**
- * @param options options for the query listen.
+ * @param changes metadata options for the query listen.
* @see #FirestoreArray(Query, SnapshotParser)
*/
public FirestoreArray(@NonNull Query query,
- @NonNull QueryListenOptions options,
+ @NonNull MetadataChanges changes,
@NonNull SnapshotParser parser) {
super(parser);
mQuery = query;
- mOptions = options;
+ mMetadataChanges = changes;
}
@NonNull
@@ -59,7 +59,7 @@ protected List getSnapshots() {
@Override
protected void onCreate() {
super.onCreate();
- mRegistration = mQuery.addSnapshotListener(mOptions, this);
+ mRegistration = mQuery.addSnapshotListener(mMetadataChanges, this);
}
@Override
@@ -77,7 +77,7 @@ public void onEvent(QuerySnapshot snapshots, FirebaseFirestoreException e) {
}
// Break down each document event
- List changes = snapshots.getDocumentChanges();
+ List changes = snapshots.getDocumentChanges(mMetadataChanges);
for (DocumentChange change : changes) {
switch (change.getType()) {
case ADDED:
diff --git a/firestore/src/main/java/com/firebase/ui/firestore/FirestoreRecyclerOptions.java b/firestore/src/main/java/com/firebase/ui/firestore/FirestoreRecyclerOptions.java
index 41247682b..8e194742e 100644
--- a/firestore/src/main/java/com/firebase/ui/firestore/FirestoreRecyclerOptions.java
+++ b/firestore/src/main/java/com/firebase/ui/firestore/FirestoreRecyclerOptions.java
@@ -4,8 +4,8 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import com.google.firebase.firestore.MetadataChanges;
import com.google.firebase.firestore.Query;
-import com.google.firebase.firestore.QueryListenOptions;
import static com.firebase.ui.common.Preconditions.assertNonNull;
import static com.firebase.ui.common.Preconditions.assertNull;
@@ -15,7 +15,7 @@
*
* @see Builder
*/
-public class FirestoreRecyclerOptions {
+public final class FirestoreRecyclerOptions {
private static final String ERR_SNAPSHOTS_SET = "Snapshot array already set. " +
"Call only one of setSnapshotArray or setQuery";
@@ -52,7 +52,7 @@ public LifecycleOwner getOwner() {
*
* @param the model class for the {@link FirestoreRecyclerAdapter}.
*/
- public static class Builder {
+ public static final class Builder {
private ObservableSnapshotArray mSnapshots;
private LifecycleOwner mOwner;
@@ -71,28 +71,19 @@ public Builder setSnapshotArray(@NonNull ObservableSnapshotArray snapshots
}
/**
- * Set the query to use (with options) and provide a custom {@link SnapshotParser}.
- *
- * Do not call this method after calling {@link #setSnapshotArray(ObservableSnapshotArray)}.
+ * Calls {@link #setQuery(Query, MetadataChanges, Class)} with metadata changes excluded.
*/
@NonNull
- public Builder setQuery(@NonNull Query query,
- @NonNull QueryListenOptions options,
- @NonNull SnapshotParser parser) {
- assertNull(mSnapshots, ERR_SNAPSHOTS_SET);
-
- mSnapshots = new FirestoreArray<>(query, options, parser);
- return this;
+ public Builder setQuery(@NonNull Query query, @NonNull SnapshotParser parser) {
+ return setQuery(query, MetadataChanges.EXCLUDE, parser);
}
-
/**
- * Calls {@link #setQuery(Query, QueryListenOptions, Class)} with the default {@link
- * QueryListenOptions}.
+ * Calls {@link #setQuery(Query, MetadataChanges, Class)} with metadata changes excluded.
*/
@NonNull
- public Builder setQuery(@NonNull Query query, @NonNull SnapshotParser parser) {
- return setQuery(query, new QueryListenOptions(), parser);
+ public Builder setQuery(@NonNull Query query, @NonNull Class modelClass) {
+ return setQuery(query, MetadataChanges.EXCLUDE, modelClass);
}
/**
@@ -103,18 +94,24 @@ public Builder setQuery(@NonNull Query query, @NonNull SnapshotParser pars
*/
@NonNull
public Builder setQuery(@NonNull Query query,
- @NonNull QueryListenOptions options,
+ @NonNull MetadataChanges changes,
@NonNull Class modelClass) {
- return setQuery(query, options, new ClassSnapshotParser<>(modelClass));
+ return setQuery(query, changes, new ClassSnapshotParser<>(modelClass));
}
/**
- * Calls {@link #setQuery(Query, QueryListenOptions, Class)} with the default {@link
- * QueryListenOptions}.
+ * Set the query to use (with options) and provide a custom {@link SnapshotParser}.
+ *
+ * Do not call this method after calling {@link #setSnapshotArray(ObservableSnapshotArray)}.
*/
@NonNull
- public Builder setQuery(@NonNull Query query, @NonNull Class modelClass) {
- return setQuery(query, new QueryListenOptions(), modelClass);
+ public Builder setQuery(@NonNull Query query,
+ @NonNull MetadataChanges changes,
+ @NonNull SnapshotParser parser) {
+ assertNull(mSnapshots, ERR_SNAPSHOTS_SET);
+
+ mSnapshots = new FirestoreArray<>(query, changes, parser);
+ return this;
}
/**
diff --git a/firestore/src/main/java/com/firebase/ui/firestore/paging/DefaultSnapshotDiffCallback.java b/firestore/src/main/java/com/firebase/ui/firestore/paging/DefaultSnapshotDiffCallback.java
new file mode 100644
index 000000000..09965ffca
--- /dev/null
+++ b/firestore/src/main/java/com/firebase/ui/firestore/paging/DefaultSnapshotDiffCallback.java
@@ -0,0 +1,33 @@
+package com.firebase.ui.firestore.paging;
+
+import android.support.annotation.RestrictTo;
+import android.support.v7.util.DiffUtil;
+
+import com.firebase.ui.firestore.SnapshotParser;
+import com.google.firebase.firestore.DocumentSnapshot;
+
+/**
+ * Default diff callback implementation for Firestore snapshots.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class DefaultSnapshotDiffCallback extends DiffUtil.ItemCallback {
+
+ private final SnapshotParser mParser;
+
+ public DefaultSnapshotDiffCallback(SnapshotParser parser) {
+ mParser = parser;
+ }
+
+ @Override
+ public boolean areItemsTheSame(DocumentSnapshot oldItem, DocumentSnapshot newItem) {
+ return oldItem.getId().equals(newItem.getId());
+ }
+
+ @Override
+ public boolean areContentsTheSame(DocumentSnapshot oldItem, DocumentSnapshot newItem) {
+ T oldModel = mParser.parseSnapshot(oldItem);
+ T newModel = mParser.parseSnapshot(newItem);
+
+ return oldModel.equals(newModel);
+ }
+}
diff --git a/firestore/src/main/java/com/firebase/ui/firestore/paging/FirestoreDataSource.java b/firestore/src/main/java/com/firebase/ui/firestore/paging/FirestoreDataSource.java
new file mode 100644
index 000000000..546bb4daf
--- /dev/null
+++ b/firestore/src/main/java/com/firebase/ui/firestore/paging/FirestoreDataSource.java
@@ -0,0 +1,220 @@
+package com.firebase.ui.firestore.paging;
+
+import android.arch.lifecycle.LiveData;
+import android.arch.lifecycle.MutableLiveData;
+import android.arch.paging.DataSource;
+import android.arch.paging.PageKeyedDataSource;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.RestrictTo;
+import android.util.Log;
+
+import com.google.android.gms.tasks.OnFailureListener;
+import com.google.android.gms.tasks.OnSuccessListener;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.Query;
+import com.google.firebase.firestore.QuerySnapshot;
+import com.google.firebase.firestore.Source;
+
+import java.util.List;
+
+/**
+ * Data source to power a {@link FirestorePagingAdapter}.
+ *
+ * Note: although loadInitial, loadBefore, and loadAfter are not called on the main thread by the
+ * paging library, we treat them as if they were so that we can facilitate retry without
+ * managing our own thread pool or requiring the user to pass us an executor.
+ */
+@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+public class FirestoreDataSource extends PageKeyedDataSource {
+
+ private static final String TAG = "FirestoreDataSource";
+
+ public static class Factory extends DataSource.Factory {
+
+ private final Query mQuery;
+ private final Source mSource;
+
+ public Factory(Query query, Source source) {
+ mQuery = query;
+ mSource = source;
+ }
+
+ @Override
+ public DataSource create() {
+ return new FirestoreDataSource(mQuery, mSource);
+ }
+ }
+
+ private final MutableLiveData mLoadingState = new MutableLiveData<>();
+
+ private final Query mBaseQuery;
+ private final Source mSource;
+
+ private Runnable mRetryRunnable;
+
+ public FirestoreDataSource(Query baseQuery, Source source) {
+ mBaseQuery = baseQuery;
+ mSource = source;
+ }
+
+ @Override
+ public void loadInitial(@NonNull final LoadInitialParams