Guest User

Upload Post Code

a guest
Apr 15th, 2020
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 16.37 KB | None | 0 0
  1. package com.example.mw_sc;
  2.  
  3. import androidx.annotation.NonNull;
  4. import androidx.annotation.Nullable;
  5. import androidx.appcompat.app.AlertDialog;
  6. import androidx.appcompat.app.AppCompatActivity;
  7. import androidx.core.app.ActivityCompat;
  8. import androidx.core.content.ContextCompat;
  9.  
  10. import android.Manifest;
  11. import android.app.ActionBar;
  12. import android.content.ContentValues;
  13. import android.content.DialogInterface;
  14. import android.content.Intent;
  15. import android.content.pm.PackageManager;
  16. import android.graphics.Bitmap;
  17. import android.graphics.drawable.BitmapDrawable;
  18. import android.net.Uri;
  19. import android.os.Bundle;
  20. import android.provider.MediaStore;
  21. import android.text.TextUtils;
  22. import android.view.View;
  23. import android.widget.Button;
  24. import android.widget.EditText;
  25. import android.widget.ImageView;
  26. import android.widget.ProgressBar;
  27. import android.widget.Toast;
  28.  
  29. import com.google.android.gms.tasks.OnFailureListener;
  30. import com.google.android.gms.tasks.OnSuccessListener;
  31. import com.google.android.gms.tasks.Task;
  32. import com.google.firebase.auth.FirebaseAuth;
  33. import com.google.firebase.auth.FirebaseUser;
  34. import com.google.firebase.database.DataSnapshot;
  35. import com.google.firebase.database.DatabaseError;
  36. import com.google.firebase.database.DatabaseReference;
  37. import com.google.firebase.database.FirebaseDatabase;
  38. import com.google.firebase.database.Query;
  39. import com.google.firebase.database.ValueEventListener;
  40. import com.google.firebase.storage.FirebaseStorage;
  41. import com.google.firebase.storage.StorageReference;
  42. import com.google.firebase.storage.UploadTask;
  43.  
  44. import java.io.ByteArrayOutputStream;
  45. import java.text.SimpleDateFormat;
  46. import java.util.Calendar;
  47. import java.util.HashMap;
  48.  
  49. public class Add_post extends AppCompatActivity {
  50.  
  51.     //Components
  52.     EditText caption;
  53.     Button up;
  54.     ImageView imgV;
  55.     ProgressBar uploadProgress;
  56.     Uri image_uri=null;
  57.     //permission constant
  58.     private static final int CAMERA_REQUEST_CODE = 100;
  59.     private static final int STORAGE_REQUEST_CODE = 200;
  60.     //Image pick constant
  61.     private static final int IMAGE_PICK_CAMERA_CODE = 300;
  62.     private static final int IMAGE_PICK_GALLERY_CODE = 400;
  63.     String[] cameraPermissions;
  64.     String[] storagePermissions;
  65.     byte[] data;
  66.     //Firebase
  67.     public String dateTime;
  68.     String name,dp,time,uid,downloadUri,propic,email;
  69.     FirebaseAuth firebaseAuth;
  70.     DatabaseReference userdbref;
  71.  
  72.     @Override
  73.     protected void onCreate(Bundle savedInstanceState) {
  74.         super.onCreate(savedInstanceState);
  75.         setContentView(R.layout.activity_add_post);
  76.  
  77.         //init permission array
  78.         cameraPermissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
  79.         storagePermissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
  80.  
  81.         firebaseAuth=FirebaseAuth.getInstance();
  82.         checkUserStatus();
  83.  
  84.         caption = findViewById(R.id.caption);
  85.         up = findViewById(R.id.upload_post);
  86.         imgV = findViewById(R.id.imgV);
  87.         uploadProgress= findViewById(R.id.uploadProgress);
  88.         uploadProgress.setVisibility(View.GONE);
  89.  
  90.         imgV.setOnClickListener(new View.OnClickListener() {
  91.             @Override
  92.             public void onClick(View v) {
  93.                 showImagePickDialog();
  94.             }
  95.         });
  96.  
  97.         //Post button
  98.         up.setOnClickListener(new View.OnClickListener() {
  99.             @Override
  100.             public void onClick(View v) {
  101.                 //Get data from fields
  102.                 String desc = caption.getText().toString().trim();
  103.  
  104.                 if(TextUtils.isEmpty(desc)){
  105.                     Toast.makeText(Add_post.this,"Please enter the description/status",Toast.LENGTH_SHORT);
  106.                     return;
  107.                 }
  108.  
  109.                 if(image_uri==null){
  110.                     uploadData(email, desc, "noImage");
  111.                 }else{
  112.                     //Post with image
  113.                     uploadData(email, desc, String.valueOf(image_uri));
  114.                 }
  115.  
  116.             }
  117.         });
  118.     }
  119.  
  120.     public void checkUserStatus(){
  121.  
  122.         FirebaseUser user=firebaseAuth.getCurrentUser();
  123.         if(user!=null){
  124.             uid=user.getUid();
  125.         }
  126.         else{
  127.             startActivity(new Intent(this, LogIn.class));
  128.             finish();
  129.         }
  130.  
  131.     }
  132.  
  133.     private void uploadData(String email, final String desc, String uri) {
  134.         uploadProgress.setVisibility(View.VISIBLE);
  135.  
  136.         //getUserData
  137.         getUserData();
  138.         //For post
  139.         final String timestamp=String.valueOf(System.currentTimeMillis());
  140.         String filePathAndName="Posts/"+"post_"+ timestamp;
  141.  
  142.         if (!uri.equals("noImage")) {
  143.             //get image from imageview
  144.             Bitmap bitmap = ((BitmapDrawable) imgV.getDrawable()).getBitmap();
  145.             ByteArrayOutputStream baos = new ByteArrayOutputStream();
  146.             //image compress
  147.             bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
  148.             data = baos.toByteArray();
  149.  
  150.  
  151.             //POST WITH IMAGE
  152.             StorageReference ref = FirebaseStorage.getInstance().getReference().child(filePathAndName);
  153.             ref.putBytes(data)
  154.                     .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
  155.                         @Override
  156.                         public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
  157.                             //Success to firebase storage
  158.                             Task<Uri> uriTask = taskSnapshot.getStorage().getDownloadUrl();
  159.                             while (!uriTask.isSuccessful());
  160.                             downloadUri = uriTask.getResult().toString();
  161.  
  162.                             if (uriTask.isSuccessful()) {
  163.                                 //url is received upload post to firebase db
  164.  
  165.                                 HashMap<Object, String> hashMap = new HashMap<>();
  166.                                 //post info
  167.                                 hashMap.put("uid", uid);
  168.                                 hashMap.put("uname", name);
  169.                                 hashMap.put("pid", timestamp);
  170.                                 hashMap.put("pdesc", desc);
  171.                                 hashMap.put("pimage", downloadUri);
  172.                                 hashMap.put("ptime", dateTime);
  173.                                 hashMap.put("propic", propic);
  174.  
  175.                                 //Path to store data
  176.                                 DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Posts");
  177.                                 //feeding data to ref
  178.                                 ref.child(timestamp).setValue(hashMap)
  179.                                         .addOnSuccessListener(new OnSuccessListener<Void>() {
  180.                                             @Override
  181.                                             public void onSuccess(Void aVoid) {
  182.                                                 uploadProgress.setVisibility(View.GONE);
  183.                                                 Toast.makeText(Add_post.this, "Post saved :)", Toast.LENGTH_SHORT).show();
  184.                                                 //resetting fields
  185.                                                 caption.setText("");
  186.                                                 imgV.setImageAlpha(R.drawable.image_up_icon);
  187.                                                 image_uri = null;
  188.                                             }
  189.                                         })
  190.                                         .addOnFailureListener(new OnFailureListener() {
  191.                                             @Override
  192.                                             public void onFailure(@NonNull Exception e) {
  193.                                                 uploadProgress.setVisibility(View.GONE);
  194.                                                 Toast.makeText(Add_post.this, "Post saving failed :(", Toast.LENGTH_SHORT).show();
  195.                                                 //resetting fields
  196.                                                 caption.setText("");
  197.                                                 imgV.setImageAlpha(R.drawable.image_up_icon);
  198.                                                 image_uri=null;
  199.                                             }
  200.                                         });
  201.                             }
  202.  
  203.                         }
  204.                     })
  205.                     .addOnFailureListener(new OnFailureListener() {
  206.                         @Override
  207.                         public void onFailure(@NonNull Exception e) {
  208.                             Toast.makeText(Add_post.this, "Failed Uploading image", Toast.LENGTH_SHORT).show();
  209.                         }
  210.                     });
  211.  
  212.         }
  213.         else{
  214.             getUserData();
  215.             //post without image
  216.             HashMap<Object, String> hashMap= new HashMap<>();
  217.             //post info
  218.             hashMap.put("uid", uid);
  219.             hashMap.put("uname", name);
  220.             hashMap.put("pid", timestamp);
  221.             hashMap.put("pdesc", desc);
  222.             hashMap.put("pimage", "noImage");
  223.             hashMap.put("ptime", dateTime);
  224.             hashMap.put("propic", propic);
  225.  
  226.             //Path to store data
  227.             DatabaseReference ref=FirebaseDatabase.getInstance().getReference("Posts");
  228.             //feeding data to ref
  229.             ref.child(timestamp).setValue(hashMap)
  230.                     .addOnSuccessListener(new OnSuccessListener<Void>() {
  231.                         @Override
  232.                         public void onSuccess(Void aVoid) {
  233.                             uploadProgress.setVisibility(View.GONE);
  234.                             Toast.makeText(Add_post.this, "Post saved :)", Toast.LENGTH_SHORT).show();
  235.                             //resetting fields
  236.                             caption.setText("");
  237.                             imgV.setImageAlpha(R.drawable.image_up_icon);
  238.                             image_uri=null;
  239.                         }
  240.                     })
  241.                     .addOnFailureListener(new OnFailureListener() {
  242.                         @Override
  243.                         public void onFailure(@NonNull Exception e) {
  244.                             uploadProgress.setVisibility(View.GONE);
  245.                             Toast.makeText(Add_post.this, "Post saving failed :(", Toast.LENGTH_SHORT).show();
  246.                             //resetting fields
  247.                             caption.setText("");
  248.                             imgV.setImageAlpha(R.drawable.image_up_icon);
  249.                             image_uri=null;
  250.                         }
  251.                     });
  252.         }
  253.  
  254.     }
  255.  
  256.     private void showImagePickDialog() {
  257.         //Options
  258.         String[] options = {"Camera", "Gallery"};
  259.         //Show Options
  260.         AlertDialog.Builder builder = new AlertDialog.Builder(this);
  261.         builder.setTitle("Select image from : ");
  262.  
  263.         //set options
  264.         builder.setItems(options, new DialogInterface.OnClickListener() {
  265.             @Override
  266.             public void onClick(DialogInterface dialog, int which) {
  267.                 if (which == 0) {
  268.                     //Camera option
  269.                     if (!checkCameraPermission()) {
  270.                         requestCameraPermission();
  271.                     } else {
  272.                         PickFromCamera();
  273.                     }
  274.                 }
  275.                 if (which == 1) {
  276.                     //Gallery option
  277.                     if (!checkStoragePermission()) {
  278.                         requestStoragePermission();
  279.                     } else {
  280.                         PickFromGallery();
  281.                     }
  282.                 }
  283.  
  284.             }
  285.         });
  286.         builder.create().show();
  287.     }
  288.  
  289.     private boolean checkStoragePermission() {
  290.         boolean result = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == (PackageManager.PERMISSION_GRANTED);
  291.         return result;
  292.     }
  293.  
  294.     private void requestStoragePermission() {
  295.         ActivityCompat.requestPermissions(this, storagePermissions, STORAGE_REQUEST_CODE);
  296.     }
  297.  
  298.     private boolean checkCameraPermission() {
  299.         boolean result = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == (PackageManager.PERMISSION_GRANTED);
  300.         boolean result1 = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == (PackageManager.PERMISSION_GRANTED);
  301.         return result && result1;
  302.     }
  303.  
  304.     private void requestCameraPermission() {
  305.         ActivityCompat.requestPermissions(this, cameraPermissions, CAMERA_REQUEST_CODE);
  306.     }
  307.  
  308.     //handle permission result
  309.     @Override
  310.     public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  311.         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  312.  
  313.         switch (requestCode) {
  314.             case CAMERA_REQUEST_CODE: {
  315.                 if (grantResults.length > 0) {
  316.                     boolean cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
  317.                     boolean storageAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
  318.                     if (cameraAccepted && storageAccepted) {
  319.                         PickFromCamera();
  320.                     } else {
  321.                         Toast.makeText(this, "Camera and Storage both permission are necessary...", Toast.LENGTH_SHORT).show();
  322.                     }
  323.                 } else {
  324.                 }
  325.             }
  326.             break;
  327.             case STORAGE_REQUEST_CODE: {
  328.                 if (grantResults.length > 0) {
  329.                     boolean storageAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
  330.                     if(storageAccepted){
  331.                         PickFromGallery();
  332.                     } else {
  333.                         Toast.makeText(this, "Storage permission is necessary...", Toast.LENGTH_SHORT).show();
  334.                     }
  335.                 }
  336.             }
  337.         }
  338.     }
  339.  
  340.     private void PickFromCamera() {
  341.         ContentValues cv=new ContentValues();
  342.         cv.put(MediaStore.Images.Media.TITLE,"Temp pick");
  343.         cv.put(MediaStore.Images.Media.DESCRIPTION,"Temp descp");
  344.         image_uri=getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, cv);
  345.  
  346.         Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
  347.         intent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri);
  348.         startActivityForResult(intent, IMAGE_PICK_CAMERA_CODE);
  349.  
  350.     }
  351.     private void PickFromGallery() {
  352.         Intent intent=new Intent(Intent.ACTION_PICK);
  353.         intent.setType("image/*");
  354.         startActivityForResult(intent, IMAGE_PICK_GALLERY_CODE);
  355.     }
  356.  
  357.  
  358.     @Override
  359.     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  360.         if(resultCode==RESULT_OK)
  361.         {
  362.             if(requestCode== IMAGE_PICK_GALLERY_CODE)
  363.             {
  364.                 //picked from gallery
  365.                 image_uri=data.getData();
  366.                 imgV.setImageURI(image_uri);
  367.             }
  368.             else if(requestCode==IMAGE_PICK_CAMERA_CODE){
  369.                 imgV.setImageURI(image_uri);
  370.             }
  371.         }
  372.         super.onActivityResult(requestCode, resultCode, data);
  373.     }
  374.  
  375.     public void getUserData(){
  376.         //Date and time
  377.         Calendar calender=Calendar.getInstance();
  378.         SimpleDateFormat simpleDateFormat=new SimpleDateFormat(" EEEE, dd-MM-yyyy hh:mm:ss a");
  379.         dateTime = simpleDateFormat.format(calender.getTime());
  380.         //User Data
  381.         firebaseAuth = FirebaseAuth.getInstance();
  382.         final String current_user_id = firebaseAuth.getCurrentUser().getUid();
  383.         userdbref= FirebaseDatabase.getInstance().getReference().child("Student");
  384.         Query query=userdbref.orderByChild("uid").equalTo(current_user_id);
  385.         query.addValueEventListener(new ValueEventListener() {
  386.             @Override
  387.             public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
  388.                 for (DataSnapshot ds:dataSnapshot.getChildren()){
  389.                     name=""+ds.child("username").getValue();
  390.                     propic=""+ds.child("propic").getValue();
  391.                 }
  392.             }
  393.  
  394.             @Override
  395.             public void onCancelled(@NonNull DatabaseError databaseError) {
  396.  
  397.             }
  398.         });
  399.  
  400.     }
  401. }
Add Comment
Please, Sign In to add comment