Timeline things working right now Woohoo! #16

Merged
11166932 merged 17 commits from marijn-appje into master 2017-06-26 16:16:13 +02:00
7 changed files with 238 additions and 121 deletions
Showing only changes of commit 03d4244daf - Show all commits

View File

@@ -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();

View File

@@ -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);
}
}

View File

@@ -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<UriPost> getPostsFromServer() {
Log.d(TAG, "getPostsFromServer: Begin of function");
final ArrayList<UriPost> 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;
}
}

View File

@@ -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<UploadTask.TaskSnapshot>() {
@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<Void>() {
@Override
public void onComplete(@NonNull Task<Void> 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);
}
}

View File

@@ -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<UploadTask.TaskSnapshot>() {
@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<Void>() {
@Override
public void onComplete(@NonNull Task<Void> 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<Void>() {
@Override
public void onComplete(@NonNull Task<Void> 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);
}
}

View File

@@ -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<UploadTask.TaskSnapshot>() {
@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<Void>() {
@Override
public void onComplete(@NonNull Task<Void> 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<UploadTask.TaskSnapshot>() {
@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<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.d(TAG, "onComplete: Updated profile picture");
mListener.ProfilePictureUpdated(true);
}
});
}
public interface ProfilePictureUpdatedListener {
void ProfilePictureUpdated(Boolean success);
}
}

View File

@@ -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;
}
}