diff --git a/app/src/main/java/ch/xero88/goodmood/Data/Position.java b/app/src/main/java/ch/xero88/goodmood/Data/Position.java index 88856b0..b3296a3 100644 --- a/app/src/main/java/ch/xero88/goodmood/Data/Position.java +++ b/app/src/main/java/ch/xero88/goodmood/Data/Position.java @@ -8,6 +8,14 @@ public class Position { private Double latitude; private Double longitude; + public Position() { + } + + public Position(Double latitude, Double longitude) { + this.latitude = latitude; + this.longitude = longitude; + } + public Double getLatitude() { return latitude; } diff --git a/app/src/main/java/ch/xero88/goodmood/Map/MoodMarkerRendered.java b/app/src/main/java/ch/xero88/goodmood/Map/MoodMarkerRendered.java index 8d9de68..5a3196e 100644 --- a/app/src/main/java/ch/xero88/goodmood/Map/MoodMarkerRendered.java +++ b/app/src/main/java/ch/xero88/goodmood/Map/MoodMarkerRendered.java @@ -16,15 +16,18 @@ */ public class MoodMarkerRendered extends DefaultClusterRenderer { + private Context context; + public MoodMarkerRendered(Context context, GoogleMap map, ClusterManager clusterManager) { super(context, map, clusterManager); + this.context = context; } @Override protected void onBeforeClusterItemRendered(Mood item, MarkerOptions markerOptions) { markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_goodmood)); - markerOptions.title(item.getId()); + markerOptions.title(item.getDisplayName() + " " + context.getString(R.string.has_a_good_mood_here)); super.onBeforeClusterItemRendered(item, markerOptions); } } \ No newline at end of file diff --git a/app/src/main/java/ch/xero88/goodmood/Mood/FirebaseRepository.java b/app/src/main/java/ch/xero88/goodmood/Mood/FirebaseRepository.java index f4a6825..5ac51f5 100644 --- a/app/src/main/java/ch/xero88/goodmood/Mood/FirebaseRepository.java +++ b/app/src/main/java/ch/xero88/goodmood/Mood/FirebaseRepository.java @@ -3,6 +3,7 @@ import android.support.annotation.NonNull; import android.util.Log; +import com.google.firebase.database.ChildEventListener; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; @@ -31,7 +32,7 @@ public FirebaseRepository() { @Override public void getMoods(@NonNull final LoadMoodsCallback callback) { - ValueEventListener listener = new ValueEventListener() { + final ValueEventListener listener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { ArrayList moods = new ArrayList<>(); @@ -40,6 +41,7 @@ public void onDataChange(DataSnapshot dataSnapshot) { moods.add(mood); } callback.onMoodLoaded(moods); + } @Override @@ -53,13 +55,50 @@ public void onCancelled(DatabaseError databaseError) { } + + @Override + public void getChangedMoods(@NonNull final ChangedMoodsCallback callback) { + + final ChildEventListener listener = new ChildEventListener() { + @Override + public void onChildAdded(DataSnapshot dataSnapshot, String s) { + Mood mood = dataSnapshot.getValue(Mood.class); + callback.onMoodAdded(mood); + } + + @Override + public void onChildChanged(DataSnapshot dataSnapshot, String s) { + // TODO: 07/07/2016 + } + + @Override + public void onChildRemoved(DataSnapshot dataSnapshot) { + // TODO: 07/07/2016 + } + + @Override + public void onChildMoved(DataSnapshot dataSnapshot, String s) { + // TODO: 07/07/2016 + } + + @Override + public void onCancelled(DatabaseError databaseError) { + // TODO: 07/07/2016 + } + + }; + mRef.addChildEventListener(listener); + + } + + @Override public void getMood(@NonNull String noteId, @NonNull GetMoodCallback callback) { // TODO: 05/07/2016 } @Override - public void saveMood(@NonNull Mood note) { - // TODO: 05/07/2016 + public void saveMood(@NonNull Mood mood) { + mRef.child(mood.getId()).setValue(mood); } } diff --git a/app/src/main/java/ch/xero88/goodmood/Mood/Mood.java b/app/src/main/java/ch/xero88/goodmood/Mood/Mood.java index 15995e1..7f9b2ea 100644 --- a/app/src/main/java/ch/xero88/goodmood/Mood/Mood.java +++ b/app/src/main/java/ch/xero88/goodmood/Mood/Mood.java @@ -2,6 +2,7 @@ import com.google.android.gms.maps.model.LatLng; +import com.google.firebase.database.Exclude; import com.google.maps.android.clustering.ClusterItem; import ch.xero88.goodmood.Data.Position; @@ -13,8 +14,11 @@ public class Mood implements ClusterItem { private String id; private String name; + @Exclude private LatLng latLng; private Position position; + private String email; + private String displayName; public String getId() { return id; @@ -37,6 +41,7 @@ public LatLng getPosition() { return latLng; } + @Exclude public Position getMoodPosition() { return position; } @@ -45,4 +50,20 @@ public void setPosition(Position position) { this.position = position; this.latLng = new LatLng(position.getLatitude(), position.getLongitude()); } + + public void setEmail(String email) { + this.email = email; + } + + public String getEmail() { + return email; + } + + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + public String getDisplayName() { + return displayName; + } } diff --git a/app/src/main/java/ch/xero88/goodmood/Mood/MoodRepository.java b/app/src/main/java/ch/xero88/goodmood/Mood/MoodRepository.java index beaf920..b93d2cd 100644 --- a/app/src/main/java/ch/xero88/goodmood/Mood/MoodRepository.java +++ b/app/src/main/java/ch/xero88/goodmood/Mood/MoodRepository.java @@ -2,6 +2,9 @@ import android.support.annotation.NonNull; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; + import java.util.List; /** @@ -15,12 +18,21 @@ interface LoadMoodsCallback { void onMoodFailed(); } + interface ChangedMoodsCallback{ + void onMoodAdded(Mood mood); + void onMoodChanged(Mood mood); + void onMoodRemoved(Mood moods); + void onMoodMoved(Mood mood); + void onCancelled(); + } + interface GetMoodCallback { void onMoodLoaded(Mood mood); } void getMoods(@NonNull LoadMoodsCallback callback); + void getChangedMoods(@NonNull ChangedMoodsCallback callback); void getMood(@NonNull String noteId, @NonNull GetMoodCallback callback); void saveMood(@NonNull Mood note); } diff --git a/app/src/main/java/ch/xero88/goodmood/Utils/StringUtil.java b/app/src/main/java/ch/xero88/goodmood/Utils/StringUtil.java new file mode 100644 index 0000000..dda5d5e --- /dev/null +++ b/app/src/main/java/ch/xero88/goodmood/Utils/StringUtil.java @@ -0,0 +1,19 @@ +package ch.xero88.goodmood.Utils; + +import java.security.SecureRandom; + +/** + * Created by Xero88 on 06/07/2016. + */ +public class StringUtil { + + static final String AB = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + static SecureRandom rnd = new SecureRandom(); + + public static String randomString( int len ){ + StringBuilder sb = new StringBuilder( len ); + for( int i = 0; i < len; i++ ) + sb.append( AB.charAt( rnd.nextInt(AB.length()) ) ); + return sb.toString(); + } +} diff --git a/app/src/main/java/ch/xero88/goodmood/View/LoginActivity.java b/app/src/main/java/ch/xero88/goodmood/View/LoginActivity.java index f9cc8f1..b73775a 100644 --- a/app/src/main/java/ch/xero88/goodmood/View/LoginActivity.java +++ b/app/src/main/java/ch/xero88/goodmood/View/LoginActivity.java @@ -3,11 +3,8 @@ import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; -import android.support.v4.app.FragmentActivity; import android.support.v7.app.AppCompatActivity; import android.util.Log; -import android.view.View; -import android.widget.Button; import android.widget.Toast; import com.facebook.AccessToken; @@ -18,7 +15,6 @@ import com.facebook.appevents.AppEventsLogger; import com.facebook.login.LoginResult; import com.facebook.login.widget.LoginButton; -import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthCredential; @@ -26,10 +22,6 @@ import com.google.firebase.auth.FacebookAuthProvider; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; -import com.google.maps.android.clustering.ClusterManager; - -import ch.xero88.goodmood.Mood.Mood; -import ch.xero88.goodmood.Mood.MoodRepository; import ch.xero88.goodmood.R; /** @@ -61,6 +53,10 @@ public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { if (user != null) { // User is signed in Log.e(TAG, "onAuthStateChanged:signed_in:" + user.getUid()); + + Intent intent = new Intent(LoginActivity.this, MapsActivity.class); + startActivity(intent); + } else { // User is signed out Log.e(TAG, "onAuthStateChanged:signed_out"); diff --git a/app/src/main/java/ch/xero88/goodmood/View/MapsActivity.java b/app/src/main/java/ch/xero88/goodmood/View/MapsActivity.java index dca3454..5cd1825 100644 --- a/app/src/main/java/ch/xero88/goodmood/View/MapsActivity.java +++ b/app/src/main/java/ch/xero88/goodmood/View/MapsActivity.java @@ -8,13 +8,12 @@ import android.support.v4.content.ContextCompat; import android.util.Log; -import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; -import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; -import com.google.android.gms.maps.model.MarkerOptions; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; import com.google.maps.android.clustering.ClusterManager; import java.util.List; @@ -25,6 +24,7 @@ import ch.xero88.goodmood.Mood.MoodRepositories; import ch.xero88.goodmood.Mood.MoodRepository; import ch.xero88.goodmood.R; +import ch.xero88.goodmood.Utils.StringUtil; public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { @@ -46,6 +46,22 @@ protected void onCreate(Bundle savedInstanceState) { SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); + + // TODO: 06/07/2016 delete + Mood mood = new Mood(); + mood.setId(StringUtil.randomString(20)); + Position position = new Position(46.233122, 7.360626); + mood.setPosition(position); + + FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); + if (user != null) { + String email = user.getEmail(); + mood.setEmail(email); + mood.setDisplayName(user.getDisplayName()); + } + + MoodRepository repository = MoodRepositories.getFirebaseRepoInstance(); + repository.saveMood(mood); } @Override @@ -59,18 +75,50 @@ public void onMapReady(GoogleMap googleMap) { // Set up cluster setUpClusterer(); - // get moods repository = MoodRepositories.getFirebaseRepoInstance(); + // get moods + /* repository.getMoods(new MoodRepository.LoadMoodsCallback() { @Override public void onMoodLoaded(List moods) { placeMoodsOnMap(moods); + Log.e(TAG, "Place moods on map (must be called once)"); } @Override public void onMoodFailed() { Log.e(TAG, "Moods failed"); } + });*/ + + // get new moods if any + repository.getChangedMoods(new MoodRepository.ChangedMoodsCallback() { + + @Override + public void onMoodAdded(Mood mood) { + placeMoodOnMap(mood); + Log.e(TAG, "Place a mood"); + } + + @Override + public void onMoodChanged(Mood mood) { + + } + + @Override + public void onMoodRemoved(Mood moods) { + + } + + @Override + public void onMoodMoved(Mood mood) { + + } + + @Override + public void onCancelled() { + + } }); } @@ -89,10 +137,16 @@ private void setUpClusterer() { mMap.setOnMarkerClickListener(mClusterManager); } + private void placeMoodOnMap(Mood mood) { + mClusterManager.addItem(mood); + mClusterManager.cluster(); + } + private void placeMoodsOnMap(List moods) { + // place on map moods for (Mood mood: moods) { - mClusterManager.addItem(mood); + placeMoodOnMap(mood); } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c2deb76..2dda19f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,5 @@ Good Mood 1732205433701723 + has a good mood here !