Skip to content

Commit 838c510

Browse files
committed
Updated storage for Android
1 parent da5a439 commit 838c510

File tree

7 files changed

+319
-34
lines changed

7 files changed

+319
-34
lines changed

README.md

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -525,20 +525,6 @@ takePicture() {
525525
}
526526
```
527527

528-
#### storage attribute
529-
530-
To retrieve a stored file, we can get the url to download it from using the `storage` attribute. This method allows us to call right through to the native JavaScript object provided by the Firebase library:
531-
532-
```javascript
533-
firestack.storage.ref(photo.fullPath)
534-
.getDownloadURL()
535-
.then(url => {
536-
// url contains the download url
537-
}).catch(err => {
538-
console.error('Error downloading photo', err);
539-
})
540-
```
541-
542528
### Realtime Database
543529

544530
#### database attribute

android/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,5 @@ dependencies {
2323
compile 'com.google.firebase:firebase-auth:9.4.0'
2424
compile 'com.google.firebase:firebase-analytics:9.4.0'
2525
compile 'com.google.firebase:firebase-database:9.4.0'
26+
compile 'com.google.firebase:firebase-storage:9.4.0'
2627
}

android/src/main/java/io/fullstack/firestack/FirestackAuth.java

Lines changed: 136 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import android.content.Context;
44
import android.util.Log;
5+
import java.util.Map;
6+
import android.net.Uri;
57
import android.support.annotation.NonNull;
68
import android.support.annotation.Nullable;
79

@@ -12,6 +14,7 @@
1214
import com.facebook.react.bridge.Callback;
1315
import com.facebook.react.bridge.WritableMap;
1416
import com.facebook.react.bridge.ReadableMap;
17+
import com.facebook.react.bridge.ReadableNativeMap;
1518
import com.facebook.react.modules.core.DeviceEventManagerModule;
1619
import com.facebook.react.bridge.ReactContext;
1720

@@ -23,13 +26,15 @@
2326

2427
import com.google.firebase.auth.AuthCredential;
2528
import com.google.firebase.auth.AuthResult;
29+
import com.google.firebase.auth.UserProfileChangeRequest;
2630
import com.google.firebase.auth.FacebookAuthProvider;
2731
import com.google.firebase.auth.FirebaseAuth;
2832
import com.google.firebase.auth.FirebaseUser;
2933
import com.google.firebase.auth.GetTokenResult;
3034
import com.google.firebase.auth.GoogleAuthProvider;
3135

3236
class FirestackAuthModule extends ReactContextBaseJavaModule {
37+
private final int NO_CURRENT_USER = 100;
3338
private static final String TAG = "FirestackAuth";
3439

3540
private Context context;
@@ -121,26 +126,85 @@ public void signInWithProvider(final String provider, final String authToken, fi
121126

122127
@ReactMethod
123128
public void signInWithCustomToken(final String customToken, final Callback callback) {
124-
// TODO
125-
FirestackUtils.todoNote(TAG, "signInWithCustomToken", callback);
129+
mAuth = FirebaseAuth.getInstance();
130+
131+
mAuth.signInWithCustomToken(customToken)
132+
.addOnCompleteListener(new OnCompleteListener<AuthResult>() {
133+
@Override
134+
public void onComplete(@NonNull Task<AuthResult> task) {
135+
Log.d(TAG, "signInWithCustomToken:onComplete:" + task.isSuccessful());
136+
if (task.isSuccessful()) {
137+
user = task.getResult().getUser();
138+
userCallback(user, callback);
139+
} else {
140+
userErrorCallback(task, callback);
141+
}
142+
}
143+
});
126144
}
127145

128146
@ReactMethod
129147
public void reauthenticateWithCredentialForProvider(final String provider, final String authToken, final String authSecret, final Callback callback) {
130148
// TODO:
131-
FirestackUtils.todoNote(TAG, "reauthenticateWithCredentialForProvider", callback);
149+
// FirestackUtils.todoNote(TAG, "reauthenticateWithCredentialForProvider", callback);
150+
AuthCredential credential;
151+
Log.d(TAG, "reauthenticateWithCredentialForProvider called with: " + provider);
132152
}
133153

134154
@ReactMethod
135155
public void updateUserEmail(final String email, final Callback callback) {
136-
// TODO
137-
FirestackUtils.todoNote(TAG, "updateUserEmail", callback);
156+
// FirestackUtils.todoNote(TAG, "updateUserEmail", callback);
157+
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
158+
159+
if (user != null) {
160+
user.updateEmail(email)
161+
.addOnCompleteListener(new OnCompleteListener<Void>() {
162+
@Override
163+
public void onComplete(@NonNull Task<Void> task) {
164+
if (task.isSuccessful()) {
165+
Log.d(TAG, "User email address updated");
166+
FirebaseUser u = FirebaseAuth.getInstance().getCurrentUser();
167+
userCallback(u, callback);
168+
} else {
169+
userErrorCallback(task, callback);
170+
}
171+
}
172+
});
173+
} else {
174+
WritableMap err = Arguments.createMap();
175+
err.putInt("errorCode", NO_CURRENT_USER);
176+
err.putString("errorMessage", "No current user");
177+
callback.invoke(err);
178+
}
138179
}
139180

140181
@ReactMethod
141182
public void updateUserPassword(final String newPassword, final Callback callback) {
142183
// TODO
143-
FirestackUtils.todoNote(TAG, "updateUserPassword", callback);
184+
// FirestackUtils.todoNote(TAG, "updateUserPassword", callback);
185+
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
186+
187+
if (user != null) {
188+
user.updatePassword(newPassword)
189+
.addOnCompleteListener(new OnCompleteListener<Void>() {
190+
@Override
191+
public void onComplete(@NonNull Task<Void> task) {
192+
if (task.isSuccessful()) {
193+
Log.d(TAG, "User password updated");
194+
195+
FirebaseUser u = FirebaseAuth.getInstance().getCurrentUser();
196+
userCallback(u, callback);
197+
} else {
198+
userErrorCallback(task, callback);
199+
}
200+
}
201+
});
202+
} else {
203+
WritableMap err = Arguments.createMap();
204+
err.putInt("errorCode", NO_CURRENT_USER);
205+
err.putString("errorMessage", "No current user");
206+
callback.invoke(err);
207+
}
144208
}
145209

146210
@ReactMethod
@@ -165,7 +229,31 @@ public void onComplete(@NonNull Task<Void> task) {
165229
@ReactMethod
166230
public void deleteUser(final Callback callback) {
167231
// TODO
168-
FirestackUtils.todoNote(TAG, "deleteUser", callback);
232+
// FirestackUtils.todoNote(TAG, "deleteUser", callback);
233+
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
234+
235+
if (user != null) {
236+
user.delete()
237+
.addOnCompleteListener(new OnCompleteListener<Void>() {
238+
@Override
239+
public void onComplete(@NonNull Task<Void> task) {
240+
if (task.isSuccessful()) {
241+
Log.d(TAG, "User account deleted");
242+
WritableMap resp = Arguments.createMap();
243+
resp.putString("status", "complete");
244+
resp.putString("msg", "User account deleted");
245+
callback.invoke(null, resp);
246+
} else {
247+
userErrorCallback(task, callback);
248+
}
249+
}
250+
});
251+
} else {
252+
WritableMap err = Arguments.createMap();
253+
err.putInt("errorCode", NO_CURRENT_USER);
254+
err.putString("errorMessage", "No current user");
255+
callback.invoke(err);
256+
}
169257
}
170258

171259
@ReactMethod
@@ -175,15 +263,53 @@ public void getToken(final Callback callback) {
175263
}
176264

177265
@ReactMethod
178-
public void updateUserProfile(final ReadableMap props, final Callback callback) {
266+
public void updateUserProfile(ReadableMap props, final Callback callback) {
179267
// TODO
180-
FirestackUtils.todoNote(TAG, "updateUserProfile", callback);
268+
// FirestackUtils.todoNote(TAG, "updateUserProfile", callback);
269+
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
270+
271+
UserProfileChangeRequest.Builder profileBuilder = new UserProfileChangeRequest.Builder();
272+
273+
Map<String, Object> m = FirestackUtils.recursivelyDeconstructReadableMap(props);
274+
275+
if (m.containsKey("displayName")) {
276+
String displayName = (String) m.get("displayName");
277+
profileBuilder.setDisplayName(displayName);
278+
}
279+
280+
if (m.containsKey("photoUri")) {
281+
String photoUriStr = (String) m.get("photoUri");
282+
Uri uri = Uri.parse(photoUriStr);
283+
profileBuilder.setPhotoUri(uri);
284+
}
285+
286+
UserProfileChangeRequest profileUpdates = profileBuilder.build();
287+
288+
user.updateProfile(profileUpdates)
289+
.addOnCompleteListener(new OnCompleteListener<Void>() {
290+
@Override
291+
public void onComplete(@NonNull Task<Void> task) {
292+
if (task.isSuccessful()) {
293+
Log.d(TAG, "User profile updated");
294+
FirebaseUser u = FirebaseAuth.getInstance().getCurrentUser();
295+
userCallback(u, callback);
296+
} else {
297+
userErrorCallback(task, callback);
298+
}
299+
}
300+
});
181301
}
182302

183303
@ReactMethod
184304
public void signOut(final Callback callback) {
185305
// TODO
186306
FirestackUtils.todoNote(TAG, "signOut", callback);
307+
FirebaseAuth.getInstance().signOut();
308+
309+
WritableMap resp = Arguments.createMap();
310+
resp.putString("status", "complete");
311+
resp.putString("msg", "User signed out");
312+
callback.invoke(null, resp);
187313
}
188314

189315
@ReactMethod
@@ -198,13 +324,6 @@ public void getCurrentUser(final Callback callback) {
198324
}
199325
}
200326

201-
@ReactMethod
202-
public void logEventWithName(final String name, final String props, final Callback callback) {
203-
// TODO
204-
FirestackUtils.todoNote(TAG, "logEventWithName", callback);
205-
}
206-
207-
208327
// TODO: Check these things
209328
@ReactMethod
210329
public void googleLogin(String IdToken, final Callback callback) {
@@ -285,7 +404,7 @@ public void noUserCallback(final Callback callback) {
285404
callback.invoke(null, message);
286405
}
287406

288-
public void userErrorCallback(Task<AuthResult> task, final Callback onFail) {
407+
public void userErrorCallback(Task task, final Callback onFail) {
289408
WritableMap error = Arguments.createMap();
290409
error.putInt("errorCode", task.getException().hashCode());
291410
error.putString("errorMessage", task.getException().getMessage());

android/src/main/java/io/fullstack/firestack/FirestackDatabase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ private DatabaseReference getDatabaseReferenceAtPath(final String path) {
172172
}
173173

174174
private WritableMap dataSnapshotToMap(String name, DataSnapshot dataSnapshot) {
175-
WritableMap data = Arguments.cregateMap();
175+
WritableMap data = Arguments.createMap();
176176

177177
data.putString("key", dataSnapshot.getKey());
178178
data.putBoolean("exists", dataSnapshot.exists());

0 commit comments

Comments
 (0)