From b0a99b3ab1888735124ff8eaf739de07e8914f60 Mon Sep 17 00:00:00 2001 From: Niels Zwemmer Date: Fri, 23 Jun 2017 11:44:43 +0200 Subject: [PATCH 1/3] Bugprone version of Profilefragment. --- .../myhyvesbookplus/tagram/MainActivity.java | 3 + .../tagram/ProfileFragment.java | 58 ++++++++++++++++++- .../myhyvesbookplus/tagram/UploadClass.java | 8 ++- 3 files changed, 64 insertions(+), 5 deletions(-) diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/MainActivity.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/MainActivity.java index 053408f..47d9e7e 100644 --- a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/MainActivity.java +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/MainActivity.java @@ -71,6 +71,8 @@ public class MainActivity extends AppCompatActivity implements CameraFragment.On goToLogin(); } + Log.d(TAG, "onCreate: " + mAuth.getCurrentUser().getPhotoUrl() ); + TimelineFragment fragment = new TimelineFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); @@ -98,5 +100,6 @@ public class MainActivity extends AppCompatActivity implements CameraFragment.On protected void goToLogin() { Intent goToLogIn = new Intent(this, LoginActivity.class); startActivity(goToLogIn); + this.finish(); } } diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/ProfileFragment.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/ProfileFragment.java index ff753af..906b679 100644 --- a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/ProfileFragment.java +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/ProfileFragment.java @@ -1,10 +1,13 @@ package nl.myhyvesbookplus.tagram; +import android.app.Activity; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.app.Fragment; +import android.provider.MediaStore; import android.support.annotation.NonNull; import android.util.Log; import android.view.LayoutInflater; @@ -22,11 +25,13 @@ import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.UserProfileChangeRequest; import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.StorageReference; -import org.w3c.dom.Text; +import java.net.URI; +import static android.app.Activity.RESULT_OK; import static android.content.ContentValues.TAG; /** @@ -42,6 +47,8 @@ public class ProfileFragment extends Fragment implements View.OnClickListener { // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private static final String ARG_PARAM1 = "param1"; private static final String ARG_PARAM2 = "param2"; + static final int REQUEST_IMAGE_CAPTURE = 1; + private static Uri downloadUrl; // TODO: Rename and change types of parameters private String mParam1; @@ -124,7 +131,6 @@ public class ProfileFragment extends Fragment implements View.OnClickListener { Glide.with(this).using(new FirebaseImageLoader()).load(httpsReference).into(profilePicture); } - // TODO Remove check for getDisplayName if all users are required to enter a displayName anyways. if (user != null && user.getDisplayName() != null) { profileName.setText(user.getDisplayName()); } @@ -161,9 +167,55 @@ public class ProfileFragment extends Fragment implements View.OnClickListener { * Performs profile picture change action. */ public void profilePicOnClick() { - Log.d(TAG, "profilePicOnClick: JE KAN NOG GEEN FOTO UPLOADEN"); +// Log.d(TAG, "profilePicOnClick: JE KAN NOG GEEN FOTO UPLOADEN"); + dispatchTakePictureIntent(); } + /** + * Starts new intent for access to the built-in camera of device. + */ + private void dispatchTakePictureIntent() { + Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) { + startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); + } + } + + /** + * Grabs the image just taken by the built-in camera and pushes this image to the user account. + * @param requestCode + * @param resultCode + * @param data + */ + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { + Bundle extras = data.getExtras(); + Bitmap imageBitmap = (Bitmap) extras.get("data"); + UploadClass uploadClass = new UploadClass(); + uploadClass.uploadPicture(imageBitmap); + downloadUrl = uploadClass.getDownloadUrl(); + updateUserProfilePic(user); + } + } + + protected void updateUserProfilePic(final FirebaseUser user) { + UserProfileChangeRequest request = new UserProfileChangeRequest.Builder() + .setPhotoUri(downloadUrl) + .build(); + + user.updateProfile(request) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Log.d(TAG, "User profile updated!"); + } + } + }); + } + + // TODO Make this function into its own class for modularity. /** * Performs password reset action. diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/UploadClass.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/UploadClass.java index c3acf21..9de753c 100644 --- a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/UploadClass.java +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/UploadClass.java @@ -21,7 +21,7 @@ import java.io.ByteArrayOutputStream; public class UploadClass { private StorageReference mStorageRef; - + private static Uri downloadUrl; public UploadClass() { mStorageRef = FirebaseStorage.getInstance().getReference().child("images"); @@ -45,11 +45,15 @@ public class UploadClass { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { // Handle successful uploads on complete - Uri downloadUrl = taskSnapshot.getMetadata().getDownloadUrl(); + downloadUrl = taskSnapshot.getMetadata().getDownloadUrl(); } }); } + public Uri getDownloadUrl() { + return downloadUrl; + } + private String getUserUid() { FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null) { From 2a89827b63cf76da74e432df2105eacd504b7a23 Mon Sep 17 00:00:00 2001 From: Marijn Jansen Date: Fri, 23 Jun 2017 11:46:30 +0200 Subject: [PATCH 2/3] Added Post classess enz. --- app/MyHyvesBookPlusStagram/app/build.gradle | 6 +- .../myhyvesbookplus/tagram/MainActivity.java | 12 +++- .../myhyvesbookplus/tagram/UploadClass.java | 71 +++++++++++++++++-- .../tagram/model/BitmapPost.java | 28 ++++++++ .../nl/myhyvesbookplus/tagram/model/Post.java | 44 ++++++++++++ .../myhyvesbookplus/tagram/model/UriPost.java | 27 +++++++ .../src/main/res/layout/fragment_timeline.xml | 5 ++ .../app/src/main/res/values/strings.xml | 3 + 8 files changed, 188 insertions(+), 8 deletions(-) create mode 100644 app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/model/BitmapPost.java create mode 100644 app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/model/Post.java create mode 100644 app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/model/UriPost.java diff --git a/app/MyHyvesBookPlusStagram/app/build.gradle b/app/MyHyvesBookPlusStagram/app/build.gradle index dadf17f..253b374 100644 --- a/app/MyHyvesBookPlusStagram/app/build.gradle +++ b/app/MyHyvesBookPlusStagram/app/build.gradle @@ -26,11 +26,11 @@ dependencies { }) compile 'com.android.support:appcompat-v7:25.3.1' compile 'com.android.support:design:25.3.1' - compile 'com.google.firebase:firebase-database:10.0.1' - compile 'com.google.firebase:firebase-auth:10.0.1' compile 'com.android.support.constraint:constraint-layout:1.0.2' compile 'com.android.support:support-v4:25.3.1' - compile 'com.google.firebase:firebase-storage:10.0.1' + compile 'com.google.firebase:firebase-database:11.0.1' + compile 'com.google.firebase:firebase-auth:11.0.1' + compile 'com.google.firebase:firebase-storage:11.0.1' testCompile 'junit:junit:4.12' } diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/MainActivity.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/MainActivity.java index 7fecbba..9b97de3 100644 --- a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/MainActivity.java +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/MainActivity.java @@ -3,6 +3,7 @@ package nl.myhyvesbookplus.tagram; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.Intent; +import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; @@ -15,6 +16,8 @@ import android.view.View; import com.google.firebase.auth.FirebaseAuth; +import nl.myhyvesbookplus.tagram.model.BitmapPost; + public class MainActivity extends AppCompatActivity implements CameraFragment.OnFragmentInteractionListener, ProfileFragment.OnFragmentInteractionListener, TimelineFragment.OnFragmentInteractionListener { final static private String TAG = "MainScreen"; @@ -91,11 +94,18 @@ public class MainActivity extends AppCompatActivity implements CameraFragment.On public void logOutOnClick(View view) { FirebaseAuth.getInstance().signOut(); goToLogin(); - this.finish(); } protected void goToLogin() { Intent goToLogIn = new Intent(this, LoginActivity.class); startActivity(goToLogIn); + this.finish(); + } + + public void testCreatePost(View view) { + UploadClass uploadClass = new UploadClass(); + Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ALPHA_8); + BitmapPost bitmapPost = new BitmapPost(bitmap, "Dit is een Test!"); + uploadClass.uploadPicture(bitmapPost); } } diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/UploadClass.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/UploadClass.java index c3acf21..674709b 100644 --- a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/UploadClass.java +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/UploadClass.java @@ -3,17 +3,26 @@ package nl.myhyvesbookplus.tagram; import android.graphics.Bitmap; import android.net.Uri; import android.support.annotation.NonNull; +import android.util.Log; +import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; +import com.google.android.gms.tasks.Task; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.UserProfileChangeRequest; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.StorageReference; import com.google.firebase.storage.UploadTask; import java.io.ByteArrayOutputStream; +import nl.myhyvesbookplus.tagram.model.BitmapPost; +import nl.myhyvesbookplus.tagram.model.UriPost; + /** * Created by marijnjansen on 20/06/2017. */ @@ -21,31 +30,57 @@ import java.io.ByteArrayOutputStream; public class UploadClass { private StorageReference mStorageRef; + private DatabaseReference mDataRef; + private static final String TAG = "UploadClass"; public UploadClass() { - mStorageRef = FirebaseStorage.getInstance().getReference().child("images"); + mStorageRef = FirebaseStorage.getInstance().getReference(); + mDataRef = FirebaseDatabase.getInstance().getReference(); } + /// Helpers /// + private byte[] bitmapToBytes(Bitmap bitmap) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); return baos.toByteArray(); } - public void uploadPicture(Bitmap bitmap) { - UploadTask uploadTask = mStorageRef.putBytes(bitmapToBytes(bitmap)); + /// Post Uploads /// + + public void uploadPicture(final BitmapPost post) { + + + UploadTask uploadTask = mStorageRef.child("posts").child("UniquePostName").putBytes(bitmapToBytes(post.getBitmap())); uploadTask.addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { - + Log.d(TAG, "onFailure: Upload Failed"); } }) .addOnSuccessListener(new OnSuccessListener() { @Override public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { // Handle successful uploads on complete + Log.d(TAG, "onSuccess: Upload Success!"); Uri downloadUrl = taskSnapshot.getMetadata().getDownloadUrl(); +// putPostInDatabase(post.getUriPost(downloadUrl)); + } + }); + } + + private void putPostInDatabase(UriPost post) { + DatabaseReference ref = mDataRef.child("posts").child("UniquePostName" + ".jpg"); // TODO: Naam voor post. + ref.setValue(post) // FIXME: Grote boos veroorzaker + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Log.d(TAG, "onComplete: Added post to database"); + } else { + Log.d(TAG, "onComplete: " + task.getException().getLocalizedMessage()); + } } }); } @@ -57,4 +92,32 @@ public class UploadClass { } return ""; } + + /// Profile picture /// + + protected void uploadProfilePicture(Bitmap picture) { + byte[] uploadPhoto = bitmapToBytes(picture); + UploadTask photoUpload = mStorageRef.child("profile").child(getUserUid()).putBytes(uploadPhoto); + photoUpload.addOnSuccessListener(new OnSuccessListener() { + @Override + public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { + Uri downloadUrl = taskSnapshot.getDownloadUrl(); + updateProfilePictureInUser(downloadUrl); + } + }); + } + + private void updateProfilePictureInUser(Uri url) { + FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); + UserProfileChangeRequest request = new UserProfileChangeRequest.Builder() + .setPhotoUri(url) + .build(); + user.updateProfile(request) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + Log.d(TAG, "onComplete: Updated profile picture"); + } + }); + } } diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/model/BitmapPost.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/model/BitmapPost.java new file mode 100644 index 0000000..5caf80a --- /dev/null +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/model/BitmapPost.java @@ -0,0 +1,28 @@ +package nl.myhyvesbookplus.tagram.model; + +import android.graphics.Bitmap; +import android.net.Uri; + +import java.util.Date; + +public class BitmapPost extends Post { + private Bitmap photo; + + public BitmapPost(Bitmap photo, String comment, Date date, int nietSlechts, String poster) { + super(comment, date, nietSlechts, poster); + this.photo = photo; + } + + public BitmapPost(Bitmap photo, String comment) { + super(comment); + this.photo = photo; + } + + public Bitmap getBitmap() { + return photo; + } + + public UriPost getUriPost(Uri url) { + return new UriPost(url, getComment(), getDate(), getNietSlechts(), getPoster()); + } +} \ No newline at end of file diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/model/Post.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/model/Post.java new file mode 100644 index 0000000..7345abe --- /dev/null +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/model/Post.java @@ -0,0 +1,44 @@ +package nl.myhyvesbookplus.tagram.model; + +import com.google.firebase.auth.FirebaseAuth; + +import java.util.Date; + +/** + * Created by marijnjansen on 22/06/2017. + */ + +abstract class Post { + + private Date date; + private String comment; + private int nietSlechts; + private String poster; + + Post(String comment, Date date, int nietSlechts, String poster) { + this.date = date; + this.comment = comment; + this.nietSlechts = nietSlechts; + this.poster = poster; + } + + Post(String comment) { + this(comment, new Date(), 0, FirebaseAuth.getInstance().getCurrentUser().getUid()); + } + + public Date getDate() { + return date; + } + + public String getComment() { + return comment; + } + + public int getNietSlechts() { + return nietSlechts; + } + + public String getPoster() { + return poster; + } +} \ No newline at end of file diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/model/UriPost.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/model/UriPost.java new file mode 100644 index 0000000..460b9a7 --- /dev/null +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/model/UriPost.java @@ -0,0 +1,27 @@ +package nl.myhyvesbookplus.tagram.model; + +import android.net.Uri; + +import java.util.Date; + +public class UriPost extends Post { + private Uri photo; + + public UriPost() { + + } + + public UriPost(Uri photo, String comment, Date date, int nietSlechts, String poster) { + super(comment, date, nietSlechts, poster); + this.photo = photo; + } + + public UriPost(Uri photo, String comment) { + super(comment); + this.photo = photo; + } + + public Uri getUri() { + return photo; + } +} \ No newline at end of file diff --git a/app/MyHyvesBookPlusStagram/app/src/main/res/layout/fragment_timeline.xml b/app/MyHyvesBookPlusStagram/app/src/main/res/layout/fragment_timeline.xml index 629607b..09f32ca 100644 --- a/app/MyHyvesBookPlusStagram/app/src/main/res/layout/fragment_timeline.xml +++ b/app/MyHyvesBookPlusStagram/app/src/main/res/layout/fragment_timeline.xml @@ -9,5 +9,10 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:text="@string/hello_blank_fragment" /> +