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 51b3a3b..b8d1e62 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,7 +3,6 @@ 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,10 +14,10 @@ import android.view.View; import com.google.firebase.auth.FirebaseAuth; -import nl.myhyvesbookplus.tagram.controller.UploadClass; -import nl.myhyvesbookplus.tagram.model.BitmapPost; +import nl.myhyvesbookplus.tagram.controller.DownloadClass; +import nl.myhyvesbookplus.tagram.controller.ProfilePictureUploader; -public class MainActivity extends AppCompatActivity implements CameraFragment.OnFragmentInteractionListener, ProfileFragment.OnFragmentInteractionListener, TimelineFragment.OnFragmentInteractionListener, UploadClass.ProfilePictureUpdatedListener { +public class MainActivity extends AppCompatActivity implements CameraFragment.OnFragmentInteractionListener, ProfileFragment.OnFragmentInteractionListener, TimelineFragment.OnFragmentInteractionListener, ProfilePictureUploader.ProfilePictureUpdatedListener { final static private String TAG = "MainScreen"; FirebaseAuth mAuth; @@ -102,10 +101,8 @@ public class MainActivity extends AppCompatActivity implements CameraFragment.On } public void testCreatePost(View view) { - UploadClass uploadClass = new UploadClass(this); - Bitmap bitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ALPHA_8); - BitmapPost bitmapPost = new BitmapPost(bitmap, "Dit is een Test!"); - uploadClass.uploadPicture(bitmapPost); + DownloadClass downloadClass = new DownloadClass(); + downloadClass.getPosts(); } @Override @@ -114,6 +111,7 @@ public class MainActivity extends AppCompatActivity implements CameraFragment.On FragmentManager man = getFragmentManager(); ProfileFragment frag = (ProfileFragment) man.findFragmentById(R.id.content); FragmentTransaction transaction = man.beginTransaction(); + frag.progressDialog.dismiss(); transaction.detach(frag) .attach(frag) .commit(); 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 5f87eb2..191a3ef 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,6 +1,7 @@ package nl.myhyvesbookplus.tagram; import android.app.Fragment; +import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; @@ -26,7 +27,7 @@ import com.google.firebase.auth.FirebaseUser; import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.StorageReference; -import nl.myhyvesbookplus.tagram.controller.UploadClass; +import nl.myhyvesbookplus.tagram.controller.ProfilePictureUploader; import static android.app.Activity.RESULT_OK; @@ -54,6 +55,7 @@ public class ProfileFragment extends Fragment implements View.OnClickListener { protected TextView profileName; protected ImageView profilePicture; protected FirebaseUser user; + ProgressDialog progressDialog; // TODO: Rename and change types of parameters private String mParam1; private String mParam2; @@ -189,8 +191,9 @@ public class ProfileFragment extends Fragment implements View.OnClickListener { if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { Bundle extras = data.getExtras(); Bitmap imageBitmap = (Bitmap) extras.get("data"); - UploadClass uploadClass = new UploadClass(getActivity()); - uploadClass.uploadProfilePicture(imageBitmap); + progressDialog = ProgressDialog.show(getActivity(), getString(R.string.please_wait), "bezig met uploaden", false, false); + ProfilePictureUploader profilePictureUploader = new ProfilePictureUploader(getActivity()); + profilePictureUploader.uploadProfilePicture(imageBitmap); } } diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/DownloadClass.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/DownloadClass.java index 1ddaf17..28a97a6 100644 --- a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/DownloadClass.java +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/DownloadClass.java @@ -1,9 +1,14 @@ package nl.myhyvesbookplus.tagram.controller; +import android.util.Log; + +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.storage.FirebaseStorage; -import com.google.firebase.storage.StorageReference; +import com.google.firebase.database.ValueEventListener; + +import java.util.ArrayList; import nl.myhyvesbookplus.tagram.model.UriPost; @@ -13,16 +18,37 @@ import nl.myhyvesbookplus.tagram.model.UriPost; public class DownloadClass { private static final String TAG = "DownloadClass"; - private StorageReference mStorageRef; + // private StorageReference mStorageRef; private DatabaseReference mDataRef; public DownloadClass() { - mStorageRef = FirebaseStorage.getInstance().getReference(); +// mStorageRef = FirebaseStorage.getInstance().getReference(); mDataRef = FirebaseDatabase.getInstance().getReference(); } public UriPost[] getPosts() { UriPost[] posts = new UriPost[10]; + getPostsFromServer().toArray(posts); + return posts; } + + private ArrayList getPostsFromServer() { + Log.d(TAG, "getPostsFromServer: Begin of function"); + final ArrayList list = new ArrayList<>(); + mDataRef.child("posts").addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(DataSnapshot dataSnapshot) { + for (DataSnapshot data : dataSnapshot.getChildren()) { + list.add(data.getValue(UriPost.class)); + } + } + + @Override + public void onCancelled(DatabaseError databaseError) { + Log.d(TAG, "onCancelled: " + databaseError.getDetails() + databaseError.getMessage()); + } + }); + return list; + } } diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/PostUploader.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/PostUploader.java new file mode 100644 index 0000000..7076169 --- /dev/null +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/PostUploader.java @@ -0,0 +1,83 @@ +package nl.myhyvesbookplus.tagram.controller; + +import android.content.Context; +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.database.DatabaseReference; +import com.google.firebase.storage.UploadTask; + +import nl.myhyvesbookplus.tagram.model.BitmapPost; +import nl.myhyvesbookplus.tagram.model.UriPost; + +import static java.lang.System.currentTimeMillis; + +/** + * Created by marijnjansen on 25/06/2017. + */ + +public class PostUploader extends UploadClass { + + final private static String TAG = "PostUploader"; + + private PostUploadListener mListener; + + public PostUploader(Context context) { + super(); + if (context instanceof PostUploadListener) { + mListener = (PostUploadListener) context; + } else { + throw new RuntimeException(context.toString() + + " must implement PostUploadListener"); + } + } + + public void uploadPicture(final BitmapPost post) { + final String name = getUserUid() + currentTimeMillis(); + + UploadTask uploadTask = mStorageRef.child("posts").child(name + ".jpg").putBytes(bitmapToBytes(post.getBitmap())); + uploadTask.addOnFailureListener(new OnFailureListener() { + @Override + public void onFailure(@NonNull Exception e) { + Log.d(TAG, "onFailure: Upload Failed"); + mListener.PostUploadComplete(false); + } + }) + .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), name); + } + }); + } + + private void putPostInDatabase(UriPost post, String name) { + DatabaseReference ref = mDataRef.child("posts").child(name); + ref.setValue(post) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Log.d(TAG, "onComplete: Added post to database"); + mListener.PostUploadComplete(true); + } else { + Log.d(TAG, "onComplete: " + task.getException().getLocalizedMessage()); + mListener.PostUploadComplete(false); + + } + } + }); + } + + public interface PostUploadListener { + void PostUploadComplete(Boolean success); + } +} diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/ProfilePictureUploader.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/ProfilePictureUploader.java new file mode 100644 index 0000000..1137d5d --- /dev/null +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/ProfilePictureUploader.java @@ -0,0 +1,94 @@ +package nl.myhyvesbookplus.tagram.controller; + +import android.content.Context; +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.UserProfileChangeRequest; +import com.google.firebase.storage.FirebaseStorage; +import com.google.firebase.storage.StorageReference; +import com.google.firebase.storage.UploadTask; + +import static java.lang.System.currentTimeMillis; + +/** + * Created by marijnjansen on 25/06/2017. + */ + +public class ProfilePictureUploader extends UploadClass { + + final static private String TAG = "PPUploader"; + + private Uri oldPicture; + private ProfilePictureUpdatedListener mListener; + + public ProfilePictureUploader(Context context) { + super(); + + if (context instanceof ProfilePictureUpdatedListener) { + mListener = (ProfilePictureUpdatedListener) context; + } else { + throw new RuntimeException(context.toString() + + " must implement ProfilePictureUpdatedListener"); + } + } + + public void uploadProfilePicture(Bitmap picture) { + byte[] uploadPhoto = bitmapToBytes(picture); + oldPicture = mUser.getPhotoUrl(); + UploadTask photoUpload = mStorageRef.child("profile").child(getUserUid() + "_" + currentTimeMillis()).putBytes(uploadPhoto); + photoUpload.addOnSuccessListener(new OnSuccessListener() { + @Override + public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { + Uri downloadUrl = taskSnapshot.getDownloadUrl(); + updateProfilePictureInUser(downloadUrl); + } + }) + .addOnFailureListener(new OnFailureListener() { + @Override + public void onFailure(@NonNull Exception e) { + mListener.ProfilePictureUpdated(false); + } + }); + } + + private void updateProfilePictureInUser(Uri url) { + UserProfileChangeRequest request = new UserProfileChangeRequest.Builder() + .setPhotoUri(url) + .build(); + mUser.updateProfile(request) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + Log.d(TAG, "onComplete: Updated profile picture"); + mListener.ProfilePictureUpdated(true); + removeOldPicture(); + } + }); + } + + private void removeOldPicture() { + StorageReference ref = FirebaseStorage.getInstance().getReferenceFromUrl(oldPicture.toString()); + ref.delete() + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Log.d(TAG, "onComplete: Delete successfull"); + } else { + Log.d(TAG, "onComplete: " + task.getException().getLocalizedMessage()); + } + } + }); + } + + public interface ProfilePictureUpdatedListener { + void ProfilePictureUpdated(Boolean success); + } +} diff --git a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/UploadClass.java b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/UploadClass.java index 3f104a2..8d838f8 100644 --- a/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/UploadClass.java +++ b/app/MyHyvesBookPlusStagram/app/src/main/java/nl/myhyvesbookplus/tagram/controller/UploadClass.java @@ -1,132 +1,44 @@ package nl.myhyvesbookplus.tagram.controller; -import android.content.Context; 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; - -import static java.lang.System.currentTimeMillis; - /** * Class that does all the photo uploading things. */ -public class UploadClass { +public abstract class UploadClass { private static final String TAG = "UploadClass"; - private StorageReference mStorageRef; - private DatabaseReference mDataRef; + StorageReference mStorageRef; + DatabaseReference mDataRef; + FirebaseUser mUser; - private ProfilePictureUpdatedListener mListener; - - public UploadClass(Context context) { + UploadClass() { mStorageRef = FirebaseStorage.getInstance().getReference(); mDataRef = FirebaseDatabase.getInstance().getReference(); - mListener = (ProfilePictureUpdatedListener) context; + mUser = FirebaseAuth.getInstance().getCurrentUser(); } /// Helpers /// - private byte[] bitmapToBytes(Bitmap bitmap) { + byte[] bitmapToBytes(Bitmap bitmap) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); return baos.toByteArray(); } - private String getUserUid() { - FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); - if (user != null) { - return user.getUid(); + String getUserUid() { + if (mUser != null) { + return mUser.getUid(); } return ""; } - - /// Post Uploads /// - - public void uploadPicture(final BitmapPost post) { - final String name = getUserUid() + currentTimeMillis(); - - UploadTask uploadTask = mStorageRef.child("posts").child(name + ".jpg").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), name); - } - }); - } - - private void putPostInDatabase(UriPost post, String name) { - DatabaseReference ref = mDataRef.child("posts").child(name); - ref.setValue(post) - .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()); - } - } - }); - } - - /// Profile picture /// - - public void uploadProfilePicture(Bitmap picture) { - byte[] uploadPhoto = bitmapToBytes(picture); - UploadTask photoUpload = mStorageRef.child("profile").child(getUserUid() + "_" + currentTimeMillis()).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"); - mListener.ProfilePictureUpdated(true); - } - }); - } - - public interface ProfilePictureUpdatedListener { - void ProfilePictureUpdated(Boolean success); - } } 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 index 2b80ad6..25358be 100644 --- 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 @@ -8,28 +8,29 @@ import java.util.Date; * UriPost is a Class for a Post with a Uri as an image. */ public class UriPost extends Post { - private String photo; + private String uri; public UriPost() { // Default constructor required for calls to DataSnapshot.getValue(UriPost.class) } - public UriPost(Uri photo, String comment, Date date, int nietSlechts, String poster) { + public UriPost(Uri uri, String comment, Date date, int nietSlechts, String poster) { super(comment, date, nietSlechts, poster); - this.photo = photo.toString(); + this.uri = uri.toString(); } - public UriPost(String photo, String comment) { + public UriPost(String uri, String comment) { super(comment); - this.photo = photo; + this.uri = uri; } public String getUri() { - return photo; + return uri; } - public void setPhoto(String photo) { - this.photo = photo; + + public void setUri(String uri) { + this.uri = uri; } } \ No newline at end of file