Skip to content

Commit

Permalink
Main to Dev Update (firebase#99)
Browse files Browse the repository at this point in the history
* Use Executor::CreateSerial

PiperOrigin-RevId: 316809187

* Fix future crash that cause unity editor to crash second time enter play mode.

FutureProxyManager still grabs FutureHandle that supposed to be cleaned up and released. Force release them during proxy manager's destructor.

PiperOrigin-RevId: 316809477

* Fix integration test caused by curl http2 default setting

PiperOrigin-RevId: 317136423

* Pin the Firestore pod used by the open source repo to the version from 6.26.0

PiperOrigin-RevId: 317141369

* Project import generated by Copybara.

PiperOrigin-RevId: 317141369

* Add unit tests for the Firebase libraries

PiperOrigin-RevId: 317141369

* Add empty workflow to manually trigger.

* Add a user callback executor for android.

Also fixes a flaky test because assertion is some times done before expected remote event arrives.

PiperOrigin-RevId: 317154095

* Migrating deprecated aliases for absl::StrSplit, and the corresponding predicates.

See b/158478280 and go/absl-cleanup-lsc for more details.

This change was produced using rename_function with the spec:
rename {
  rename_spec {
    new_header: "third_party/absl/strings/str_split.h"
    old_name: "strings::Split"
    new_name: "absl::StrSplit"
  }
}

Additionally, a global find/replace was done on:
strings::AllowEmpty -> absl::AllowEmpty
strings::SkipEmpty -> absl::SkipEmpty
strings::SkipWhitespace -> absl::SkipWhitespace

Tested:
    TAP sample presubmit queue
    http://test/OCL:317011231:BASE:317041434:1592460837225:fc71f604
PiperOrigin-RevId: 317399788

* Incremented version numbers to 6.15.1

PiperOrigin-RevId: 317402209

* Automated g4 rollback of changelist 317154095.

*** Reason for rollback ***

Not ready for release yet

*** Original change description ***

Add a user callback executor for android.

Also fixes a flaky test because assertion is some times done before expected remote event arrives.

***

PiperOrigin-RevId: 317736475

* Automated g4 rollback of changelist 314233757.

*** Reason for rollback ***

Not ready for release yet

*** Original change description ***

[C++] Provide a default executor with settings on iOS

***

PiperOrigin-RevId: 317791137

* Fix a missing call to `ClearListeners` in ~FirestoreInternal.

Also fix a memory leak during listener unregistration

PiperOrigin-RevId: 318538053

* Enable full stack traces for crashes in unit tests

Fix leaks in firestore_test that the HeapChecker found.

Test with `blaze test -c dbg` to get line numbers in stack frames.

PiperOrigin-RevId: 318644593

* Hooked up Persistence into Realtime Database.

PiperOrigin-RevId: 318885157

* Automated g4 rollback of changelist 317736475.

*** Reason for rollback ***

re-roll cl/317154095

SKIP_FIRESTORE_KOKORO_BUILD_TEST=true

*** Original change description ***

Automated g4 rollback of changelist 317154095.

*** Reason for rollback ***

Not ready for release yet

*** Original change description ***

Add a user callback executor for android.

Also fixes a flaky test because assertion is some times done before expected remote event arrives.

***

***

PiperOrigin-RevId: 318891491

* Removed errant include.

PiperOrigin-RevId: 318899934

* Automated g4 rollback of changelist 317791137.

*** Reason for rollback ***

Re-roll cl/314233757

SKIP_FIRESTORE_KOKORO_BUILD_TEST=true

*** Original change description ***

Automated g4 rollback of changelist 314233757.

*** Reason for rollback ***

Not ready for release yet

*** Original change description ***

[C++] Provide a default executor with settings on iOS

***

***

PiperOrigin-RevId: 318938740

* Fix issues with event accumulation in Firestore C++ integration tests

There are several related flaws fixed here:

  * The mutex in TestEventListener was not applied consistently, leading to
    data races that showed up as strangely failing tests on forge.
  * The result of FirestoreIntegrationTest::Await was implicitly trusted to
    produce some results, but this isn't the case when it times out. In this
    error case the caller would read uninitialized memory almost immediately
    after, leading to crashes before the log message about the timeout had
    necessarily been writen.
  * The result of FirestoreIntegrationTest::Await was implicitly trusted not to
    produce more results than requested, but this didn't always happen either.
    This would cause failures where a test would request `n` events, and use
    the last `n` that arrived, skipping extra events. Now the EventAccumulator
    ensures that it consumes events in sequence.

PiperOrigin-RevId: 318943435

* Fix test warm-up

Certain tests include a warm-up step to ensure that the backend was actually
available, but only waited for any event. Unfortunately this doesn't work,
because when the server is unavailable, the SDK will serve a from-cache event
indicating the document doesn't exist.

Change all these to wait for a from-cache: false event, guaranteeing that the
server is actually available and confirming the document doesn't exist.

PiperOrigin-RevId: 318948824

* Implement type map for public to internal types

This simplifies the specification of promises, cleanup functions, and
converters, since they now only need to specify the public type.

PiperOrigin-RevId: 318960642

* Split PromiseFactory out of WrapperFuture

This makes promise creation more closely match iOS and paves the way for
removing WrapperFuture altogether.

Use PromiseFactory in all internal type implementations instead of extending
WrapperFuture and then dDelete WrapperFuture.

PiperOrigin-RevId: 319025783

* Remove LastResult implementations

PiperOrigin-RevId: 319034882

* Fix enabling debug logging from Unity in iOS.

Previously, setting FirebaseFirestore.LogLevel to LogLevel.Debug would get bumped back to LogLevel.Info as an unexpected side effect of creating of a new firebase::App object. The apparent effect to users was that enabling debug logging had no effect. This made it challenging to debug issues with customers because they were unable to collect valuable debug logs when using iOS as their platform.

PiperOrigin-RevId: 319056991

* Cleanup listener callbacks on `DocumentReference` and `Query`.

This CL is the last in a series described in cl/312713181, cl/317397413, and resolves b/156024690.

In this CL the new pattern for managing listener callbacks implemented in `FirebaseFirestore.ListenForSnapshotsInSync()` is being applied to all other places where we expose listeners (i.e. `Query` and `DocumentReference`).

PiperOrigin-RevId: 319089024

* Migrate const std::string& parameters to absl::string_view.

THIS CHANGE IS BELIEVED SAFE

Templated asynchronous code can change the lifetime of string data as a result
of this change; however, the most common uses of these (lambdas and callbacks)
are excluded from this change.
Further, your TAP tests pass.

go/string-ref-to-string-view-lsc

Tested:
    TAP --sample ran all affected tests and none failed
    http://test/OCL:319219698:BASE:319213711:1593616691507:a583f044
PiperOrigin-RevId: 319286243

* Avoid double deletion of internal objects during cleanup.

This has been observed during cleanup when a DocumentReferenceInternal is
destroyed, its Future API can end up deleting orphaned Future APIs that contain
Futures holding the containing `DocumentReference`.

PiperOrigin-RevId: 320260380

* Avoid empty statement warnings in Firebase assertions

Wrapping macro bodies in do { } while(false) makes them into a statement that
legitimately should be followed by a semicolon.

PiperOrigin-RevId: 320272779

* Miscellaneous test-only fixes

  * Avoid dereferencing awaited pointers after Await has failed, preventing
    crashes after test timeouts.
  * Await `CollectionReference::Add`, preventing nondeterminism in tests.

PiperOrigin-RevId: 320449430

* Delete C++ Firestore objects when C# has no more references to them.

This was achieved by using the CppInstanceManager, which provides this functionality elsewhere in the Unity SDK. When running UIHandlerAutomated, this eliminates all 11 leaks from Firestore::GetFirestore().

PiperOrigin-RevId: 320609048

* Remove the unconditional calls to Firebase::Terminate() in test cleanup.

These calls were present as a workaround for bugs in the Firestore destructor; however, since those bugs have been fixed the calls to Terminate() are now superfluous and, worse, can hide bugs. As a result, they are being removed.

PiperOrigin-RevId: 320627333

* Change std:unique_ptr to UniquePtr

This is causing Rapid build fail with error message like "error: no template named 'make_unique' in namespace 'std'; did you mean 'MakeUnique'?"
Since we have our own implementation, we should use it consistently.

PiperOrigin-RevId: 320681249

* Update Android deps to latest

PiperOrigin-RevId: 320688041

* Make test failures in numeric transforms tests easier to read

Previously, if the value was of the wrong type, you'd get a message like:

    Value of: snap.Get("sum").is_integer()
      Actual: false
    Expected: true

Which would give no indication of what the actual type or value was. Now tests
will fail like this:

   Expected equality of these values:
     snap.Get("sum")
       Which is: 1337 (Type::kDouble)
     FieldValue::Integer(value)
       Which is: 1337 (Type::kInteger)

As an added bonus this also simplifies the calling code because now we can just
assert that a value in a snapshot is equal to some expected value and
GoogleTest will do the heavy lifting of printing the differences.

One unsolved problem with this approach is how to handle equality within
epsilon for floating point values. This turns out to be non-trivial without
writing custom matchers, which is beyond the scope of what I wanted to tackle
here. Instead of solving this I've changed the tests to use values that have an
exact representation as doubles. This is easier to do for integral values than
for fractional ones so the tests now use integer-valued doubles to achieve the
same effect of cumulative addition as before.

PiperOrigin-RevId: 321022746

* Add JNI Object wrapper and type conversion traits

This is the first in a series of commits that aims to convert our JNI usage to
a more modern approach while still remaining STLPort compatible.

PiperOrigin-RevId: 321059370

* Add JNI ownership types

These generate local and global reference subtypes of a given JNI wrapper that
make it possible to automatically emit DeleteLocalRef and DeleteGlobalRef
calls in the course of regular usage.

PiperOrigin-RevId: 321175591

* Add FIREventScreenView and params

PiperOrigin-RevId: 321183165

* Add another line in the generate constant header script

The generated headers are currently missing a newline prior to @ifdef cpp_examples which is causing doc generation to fail.

PiperOrigin-RevId: 321272103

* Add initial Env with minimal support for Strings

PiperOrigin-RevId: 321475293

* Rework ToJni conversions to enable pass-through of JNI types

Previously, all types needed to be in the JniTypeMap, but this was never
intended to be the end state because it would require an entry for all subtypes
of Object which couldn't scale.

The new implementation based on ranked choice overload selection also resolves
ambiguities. For example: unsigned char could be a uint8_t (which converts to
jbyte) or the underlying type for jboolean. Absent the ranking, an argument of
type unsigned char would resolve to multiple overloads and would be ambiguous.

PiperOrigin-RevId: 321835773

* Add support for calling methods and getting fields.

PiperOrigin-RevId: 322398533
  • Loading branch information
DellaBitta authored Jul 22, 2020
1 parent f5773b0 commit 1aff4d0
Show file tree
Hide file tree
Showing 109 changed files with 2,838 additions and 752 deletions.
20 changes: 10 additions & 10 deletions Android/firebase_dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,22 @@ import org.gradle.util.ConfigureUtil;

// A map of library to the dependencies that need to be added for it.
def firebaseDependenciesMap = [
'app' : ['com.google.firebase:firebase-analytics:17.4.1'],
'admob' : ['com.google.firebase:firebase-ads:19.1.0',
'com.google.android.gms:play-services-measurement-sdk-api:17.4.1'],
'analytics' : ['com.google.firebase:firebase-analytics:17.4.1'],
'auth' : ['com.google.firebase:firebase-auth:19.3.1'],
'database' : ['com.google.firebase:firebase-database:19.3.0'],
'app' : ['com.google.firebase:firebase-analytics:17.4.4'],
'admob' : ['com.google.firebase:firebase-ads:19.2.0',
'com.google.android.gms:play-services-measurement-sdk-api:17.4.4'],
'analytics' : ['com.google.firebase:firebase-analytics:17.4.4'],
'auth' : ['com.google.firebase:firebase-auth:19.3.2'],
'database' : ['com.google.firebase:firebase-database:19.3.1'],
'dynamic_links' : ['com.google.firebase:firebase-dynamic-links:19.1.0'],
'firestore' : ['com.google.firebase:firebase-firestore:21.4.3'],
'firestore' : ['com.google.firebase:firebase-firestore:21.5.0'],
'functions' : ['com.google.firebase:firebase-functions:19.0.2'],
'instance_id' : ['com.google.firebase:firebase-iid:20.1.7'],
'instance_id' : ['com.google.firebase:firebase-iid:20.2.3'],
'invites' : ['com.google.firebase:firebase-invites:17.0.0'],
// Messaging has an additional local dependency to include.
'messaging' : ['com.google.firebase:firebase-messaging:20.1.7',
'messaging' : ['com.google.firebase:firebase-messaging:20.2.3',
'firebase_cpp_sdk.messaging:messaging_java'],
'performance' : ['com.google.firebase:firebase-perf:19.0.7'],
'remote_config' : ['com.google.firebase:firebase-config:19.1.4'],
'remote_config' : ['com.google.firebase:firebase-config:19.2.0'],
'storage' : ['com.google.firebase:firebase-storage:19.1.1']
]

Expand Down
4 changes: 2 additions & 2 deletions admob/admob_resources/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ android {
}

dependencies {
implementation 'com.google.firebase:firebase-analytics:17.4.1'
implementation 'com.google.firebase:firebase-ads:19.1.0'
implementation 'com.google.firebase:firebase-analytics:17.4.4'
implementation 'com.google.firebase:firebase-ads:19.2.0'
}

afterEvaluate {
Expand Down
1 change: 1 addition & 0 deletions analytics/generate_constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@
(r'(?s)(@code)([^{].*using namespace firebase::analytics;'
r'.*Parameter [^{]+[^}]+}.*@endcode)',
'\n'
'///\n'
'/// @if cpp_examples\n'
'/// \\1{.cpp}'
'\\2\n\n'
Expand Down
9 changes: 9 additions & 0 deletions analytics/ios_headers/FIREventNames.h
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,15 @@ static NSString *const kFIREventPurchaseRefund NS_SWIFT_NAME(AnalyticsEventPurch
static NSString *const kFIREventRemoveFromCart NS_SWIFT_NAME(AnalyticsEventRemoveFromCart) =
@"remove_from_cart";

/// Screen View event. This event signifies a screen view. Use this when a screen transition occurs.
/// This event can be logged irrespective of whether automatic screen tracking is enabled. Params:
///
/// <ul>
/// <li>@c kFIRParameterScreenClass (NSString) (optional)</li>
/// <li>@c kFIRParameterScreenName (NSString) (optional)</li>
/// </ul>
static NSString *const kFIREventScreenView NS_SWIFT_NAME(AnalyticsEventScreenView) = @"screen_view";

/// Search event. Apps that support search features can use this event to contextualize search
/// operations by supplying the appropriate, corresponding parameters. This event can help you
/// identify the most popular content in your app. Params:
Expand Down
20 changes: 20 additions & 0 deletions analytics/ios_headers/FIRParameterNames.h
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,26 @@ static NSString *const kFIRParameterQuantity NS_SWIFT_NAME(AnalyticsParameterQua
/// </pre>
static NSString *const kFIRParameterScore NS_SWIFT_NAME(AnalyticsParameterScore) = @"score";

/// Current screen class, such as the class name of the UIViewController, logged with screen_view
/// event and added to every event (NSString). <pre>
/// NSDictionary *params = @{
/// kFIRParameterScreenClass : @"LoginViewController",
/// // ...
/// };
/// </pre>
static NSString *const kFIRParameterScreenClass NS_SWIFT_NAME(AnalyticsParameterScreenClass) =
@"screen_class";

/// Current screen name, such as the name of the UIViewController, logged with screen_view event and
/// added to every event (NSString). <pre>
/// NSDictionary *params = @{
/// kFIRParameterScreenName : @"LoginView",
/// // ...
/// };
/// </pre>
static NSString *const kFIRParameterScreenName NS_SWIFT_NAME(AnalyticsParameterScreenName) =
@"screen_name";

/// The search string/keywords used (NSString).
/// <pre>
/// NSDictionary *params = @{
Expand Down
2 changes: 1 addition & 1 deletion app/app_resources/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ android {
}

dependencies {
implementation 'com.google.firebase:firebase-analytics:17.4.1'
implementation 'com.google.firebase:firebase-analytics:17.4.4'
}

afterEvaluate {
Expand Down
2 changes: 1 addition & 1 deletion app/google_api_resources/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ android {
}

dependencies {
implementation 'com.google.firebase:firebase-analytics:17.4.1'
implementation 'com.google.firebase:firebase-analytics:17.4.4'
implementation project(':app:app_resources')
}

Expand Down
2 changes: 1 addition & 1 deletion app/invites_resources/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ android {
}

dependencies {
implementation 'com.google.firebase:firebase-analytics:17.4.1'
implementation 'com.google.firebase:firebase-analytics:17.4.4'
implementation 'com.google.firebase:firebase-dynamic-links:19.1.0'
implementation project(':app:app_resources')
}
Expand Down
7 changes: 4 additions & 3 deletions app/rest/tests/zlibwrapper_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "gmock/gmock.h"
#include "absl/base/macros.h"
#include "absl/strings/escaping.h"
#include "absl/strings/string_view.h"
#include "util/random/acmrandom.h"

// 1048576 == 2^20 == 1 MB
Expand Down Expand Up @@ -105,7 +106,7 @@ REGISTER_MODULE_INITIALIZER(zlibwrapper_unittest, {
<< " Reason: " << limiter.reason();
});

bool ReadFileToString(const std::string& filename, std::string* output,
bool ReadFileToString(absl::string_view filename, std::string* output,
int64 max_size) {
std::ifstream f;
f.open(filename);
Expand Down Expand Up @@ -696,7 +697,7 @@ class ZLibWrapperTest : public ::testing::TestWithParam<std::string> {
return dict;
}

std::string ReadFileToTest(const std::string& filename) {
std::string ReadFileToTest(absl::string_view filename) {
std::string uncompbuf;
LOG(INFO) << "Testing file: " << filename;
CHECK(ReadFileToString(filename, &uncompbuf, MAX_BUF_SIZE));
Expand Down Expand Up @@ -891,7 +892,7 @@ TEST_P(ZLibWrapperTest, ChunkedCompression) {
TestGzip(&zlib, uncompbuf);
}

// Simple helper to force specialization of strings::Split.
// Simple helper to force specialization of absl::StrSplit.
std::vector<std::string> GetFilesToProcess() {
std::string files_to_process =
FLAGS_files_to_process.empty()
Expand Down
16 changes: 8 additions & 8 deletions app/src/assert.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@
// Assert condition is true, if it's false log an assert with the specified
// expression as a string.
#define FIREBASE_ASSERT_WITH_EXPRESSION(condition, expression) \
{ \
do { \
if (!(condition)) { \
FIREBASE_NAMESPACE::LogAssert( \
FIREBASE_NAMESPACE::LogAssert( \
FIREBASE_ASSERT_MESSAGE_PREFIX FIREBASE_EXPAND_STRINGIFY( \
expression)); \
} \
}
} while (false)

// Assert condition is true, if it's false log an assert with the specified
// expression as a string. Compiled out of release builds.
Expand All @@ -60,7 +60,7 @@
FIREBASE_ASSERT_WITH_EXPRESSION(condition, expression)
#else
#define FIREBASE_DEV_ASSERT_WITH_EXPRESSION(condition, expression) \
{ (void)(condition); }
(void)(condition)
#endif // !defined(NDEBUG)

// Custom assert() implementation that is not compiled out in release builds.
Expand Down Expand Up @@ -111,14 +111,14 @@
// Assert condition is true otherwise display the specified expression,
// message and abort.
#define FIREBASE_ASSERT_MESSAGE_WITH_EXPRESSION(condition, expression, ...) \
{ \
do { \
if (!(condition)) { \
FIREBASE_NAMESPACE::LogError( \
FIREBASE_NAMESPACE::LogError( \
FIREBASE_ASSERT_MESSAGE_PREFIX FIREBASE_EXPAND_STRINGIFY( \
expression)); \
FIREBASE_NAMESPACE::LogAssert(__VA_ARGS__); \
FIREBASE_NAMESPACE::LogAssert(__VA_ARGS__); \
} \
}
} while (false)

// Assert condition is true otherwise display the specified expression,
// message and abort. Compiled out of release builds.
Expand Down
9 changes: 9 additions & 0 deletions app/src/include/firebase/internal/type_traits.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,12 @@ struct is_lvalue_reference<T&> {
#define FIREBASE_TYPE_TRAITS_NS std
#endif

template <typename T>
using decay = FIREBASE_TYPE_TRAITS_NS::decay<T>;

template <typename T>
using decay_t = typename decay<T>::type;

template <bool value, typename T = void>
using enable_if = FIREBASE_TYPE_TRAITS_NS::enable_if<value, T>;

Expand All @@ -97,6 +103,9 @@ using is_same = FIREBASE_TYPE_TRAITS_NS::is_same<T, U>;
template <typename T, T value>
using integral_constant = FIREBASE_TYPE_TRAITS_NS::integral_constant<T, value>;

using true_type = FIREBASE_TYPE_TRAITS_NS::true_type;
using false_type = FIREBASE_TYPE_TRAITS_NS::false_type;

#undef FIREBASE_TYPE_TRAITS_NS

// `is_char<T>::value` is true iff `T` is a character type (including `wchar_t`
Expand Down
5 changes: 3 additions & 2 deletions app/tests/base64_openssh_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "app/src/log.h"
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "absl/strings/string_view.h"
#include "openssl/base64.h"

namespace firebase {
Expand All @@ -31,7 +32,7 @@ size_t OpenSSHEncodedLength(size_t input_size) {
return length;
}

bool OpenSSHEncode(const std::string& input, std::string* output) {
bool OpenSSHEncode(absl::string_view input, std::string* output) {
size_t base64_length = OpenSSHEncodedLength(input.size());
output->resize(base64_length);
if (EVP_EncodeBlock(reinterpret_cast<uint8_t*>(&(*output)[0]),
Expand All @@ -52,7 +53,7 @@ size_t OpenSSHDecodedLength(size_t input_size) {
return length;
}

bool OpenSSHDecode(const std::string& input, std::string* output) {
bool OpenSSHDecode(absl::string_view input, std::string* output) {
size_t decoded_length = OpenSSHDecodedLength(input.size());
output->resize(decoded_length);
if (EVP_DecodeBase64(reinterpret_cast<uint8_t*>(&(*output)[0]),
Expand Down
4 changes: 2 additions & 2 deletions auth/auth_resources/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ android {
}

dependencies {
implementation 'com.google.firebase:firebase-analytics:17.4.1'
implementation 'com.google.firebase:firebase-auth:19.3.1'
implementation 'com.google.firebase:firebase-analytics:17.4.4'
implementation 'com.google.firebase:firebase-auth:19.3.2'
implementation project(':app:app_resources')
}

Expand Down
1 change: 0 additions & 1 deletion auth/tests/desktop/auth_desktop_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,6 @@ TEST_F(AuthDesktopTest, TestGetAccountInfo) {
EXPECT_EQ("519", user.phone_number);
EXPECT_FALSE(user.is_email_verified);
EXPECT_TRUE(user.has_email_password_credential);

}

// Test the helper function CompleteSignIn. Since we do not have the access to
Expand Down
6 changes: 3 additions & 3 deletions cpp_sdk_version.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"released": "6.15.0",
"stable": "6.15.0",
"head": "6.15.0"
"released": "6.15.1",
"stable": "6.15.1",
"head": "6.15.1"
}
4 changes: 2 additions & 2 deletions database/database_resources/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ android {
}

dependencies {
implementation 'com.google.firebase:firebase-analytics:17.4.1'
implementation 'com.google.firebase:firebase-database:19.3.0'
implementation 'com.google.firebase:firebase-analytics:17.4.4'
implementation 'com.google.firebase:firebase-database:19.3.1'
//implementation project(':app:app_resources')
}

Expand Down
Loading

0 comments on commit 1aff4d0

Please sign in to comment.