Alvaro2112/Money_run

View on GitHub
app/src/main/java/sdp/moneyrun/database/DatabaseProxy.java

Summary

Maintainability
A
0 mins
Test Coverage
A
92%
package sdp.moneyrun.database;

import android.content.Context;
import android.util.Log;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class DatabaseProxy {

    private static final String ONLINE_MESSAGE = "You are now online";
    private static final String OFFLINE_MESSAGE = "You are now offline";
    private final static DatabaseReference connectedRef = FirebaseDatabase.getInstance().getReference(".info/connected");
    @Nullable
    private static ValueEventListener listener = null;
    private static boolean isConnected = false;
    @NonNull
    private final DatabaseReference ref;
    @NonNull
    private final FirebaseDatabase db;

    public DatabaseProxy() {
        db = FirebaseDatabase.getInstance();
        ref = db.getReference();
    }

    /**
     * Add a listener on the database that displays a toast on connect/disconnect
     *
     * @param context
     * @param TAG
     */
    public static void addOfflineListener(Context context, String TAG) {

        listener = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                boolean connected = snapshot.getValue(Boolean.class); //this is the db value
                if (connected && !isConnected) {
                    Log.d(TAG, "connected");
                    Toast.makeText(context, ONLINE_MESSAGE, Toast.LENGTH_SHORT).show();
                } else if (!connected && isConnected) {
                    Log.d(TAG, "not connected");
                    Toast.makeText(context, OFFLINE_MESSAGE, Toast.LENGTH_SHORT).show();
                }
                isConnected = connected;
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {
                Log.w(TAG, "Listener was cancelled");
            }
        };
        connectedRef.addValueEventListener(listener);
    }

    /**
     * removes the offline listener if it was attached
     */
    public static void removeOfflineListener() {
        if (listener != null) {
            connectedRef.removeEventListener(listener);
        }
    }

    @NonNull
    public DatabaseReference getReference() {
        return ref;
    }

    @NonNull
    public FirebaseDatabase getDatabase() {
        return db;
    }
}