1 package abi47_0_0.expo.modules.firebase.core;
2 
3 import android.content.Context;
4 
5 import com.google.firebase.FirebaseApp;
6 import com.google.firebase.FirebaseOptions;
7 
8 import abi47_0_0.expo.modules.core.interfaces.InternalModule;
9 
10 import java.util.List;
11 import java.util.Collections;
12 
13 public class FirebaseCoreService implements InternalModule, FirebaseCoreInterface {
14 
15   protected static final String DEFAULT_APP_NAME = "[DEFAULT]";
16 
17   private Context mContext;
18 
FirebaseCoreService(Context context)19   public FirebaseCoreService(Context context) {
20     super();
21     mContext = context;
22   }
23 
24   @Override
getExportedInterfaces()25   public List<Class> getExportedInterfaces() {
26     return Collections.singletonList((Class) FirebaseCoreInterface.class);
27   }
28 
29   // FirebaseCoreInterface
30 
getDefaultApp()31   public FirebaseApp getDefaultApp() {
32     return getFirebaseApp(getAppName());
33   }
34 
35   // Overridable
36 
getAppName()37   protected String getAppName() {
38     FirebaseApp app = getFirebaseApp(null);
39     return (app != null) ? app.getName() : DEFAULT_APP_NAME;
40   }
41 
getAppOptions()42   protected FirebaseOptions getAppOptions() {
43     FirebaseApp app = getFirebaseApp(null);
44     return (app != null) ? app.getOptions() : FirebaseOptions.fromResource(mContext);
45   }
46 
isAppAccessible(final String name)47   protected boolean isAppAccessible(final String name) {
48     return true;
49   }
50 
updateFirebaseApp(final FirebaseOptions options, final String name)51   protected FirebaseApp updateFirebaseApp(final FirebaseOptions options, final String name) {
52     FirebaseApp app = getFirebaseApp(name);
53     if (app != null) {
54       if (options == null) {
55         app.delete();
56       } else {
57         if (!FirebaseCoreOptions.isEqual(options, app.getOptions())) {
58           app.delete();
59           if (name == null) {
60             app = FirebaseApp.initializeApp(mContext, options);
61           } else {
62             app = FirebaseApp.initializeApp(mContext, options, name);
63           }
64         }
65       }
66     } else {
67       if (options != null) {
68         if (name == null) {
69           app = FirebaseApp.initializeApp(mContext, options);
70         } else {
71           app = FirebaseApp.initializeApp(mContext, options, name);
72         }
73       }
74     }
75 
76     return app;
77   }
78 
79   // Static
80 
getFirebaseApp(String name)81   protected static FirebaseApp getFirebaseApp(String name) {
82     FirebaseApp app;
83     try {
84       return (name == null) ? FirebaseApp.getInstance() : FirebaseApp.getInstance(name);
85     } catch (Exception e) {
86       return null;
87     }
88   }
89 }
90