Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.example.mw_sc;
- import androidx.annotation.NonNull;
- import androidx.annotation.Nullable;
- import androidx.appcompat.app.AlertDialog;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.core.app.ActivityCompat;
- import androidx.core.content.ContextCompat;
- import android.Manifest;
- import android.app.ActionBar;
- import android.content.ContentValues;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.content.pm.PackageManager;
- import android.graphics.Bitmap;
- import android.graphics.drawable.BitmapDrawable;
- import android.net.Uri;
- import android.os.Bundle;
- import android.provider.MediaStore;
- import android.text.TextUtils;
- import android.view.View;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.ImageView;
- import android.widget.ProgressBar;
- import android.widget.Toast;
- 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.database.DataSnapshot;
- import com.google.firebase.database.DatabaseError;
- import com.google.firebase.database.DatabaseReference;
- import com.google.firebase.database.FirebaseDatabase;
- import com.google.firebase.database.Query;
- import com.google.firebase.database.ValueEventListener;
- import com.google.firebase.storage.FirebaseStorage;
- import com.google.firebase.storage.StorageReference;
- import com.google.firebase.storage.UploadTask;
- import java.io.ByteArrayOutputStream;
- import java.text.SimpleDateFormat;
- import java.util.Calendar;
- import java.util.HashMap;
- public class Add_post extends AppCompatActivity {
- //Components
- EditText caption;
- Button up;
- ImageView imgV;
- ProgressBar uploadProgress;
- Uri image_uri=null;
- //permission constant
- private static final int CAMERA_REQUEST_CODE = 100;
- private static final int STORAGE_REQUEST_CODE = 200;
- //Image pick constant
- private static final int IMAGE_PICK_CAMERA_CODE = 300;
- private static final int IMAGE_PICK_GALLERY_CODE = 400;
- String[] cameraPermissions;
- String[] storagePermissions;
- byte[] data;
- //Firebase
- public String dateTime;
- String name,dp,time,uid,downloadUri,propic,email;
- FirebaseAuth firebaseAuth;
- DatabaseReference userdbref;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_add_post);
- //init permission array
- cameraPermissions = new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE};
- storagePermissions = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE};
- firebaseAuth=FirebaseAuth.getInstance();
- checkUserStatus();
- caption = findViewById(R.id.caption);
- up = findViewById(R.id.upload_post);
- imgV = findViewById(R.id.imgV);
- uploadProgress= findViewById(R.id.uploadProgress);
- uploadProgress.setVisibility(View.GONE);
- imgV.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- showImagePickDialog();
- }
- });
- //Post button
- up.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- //Get data from fields
- String desc = caption.getText().toString().trim();
- if(TextUtils.isEmpty(desc)){
- Toast.makeText(Add_post.this,"Please enter the description/status",Toast.LENGTH_SHORT);
- return;
- }
- if(image_uri==null){
- uploadData(email, desc, "noImage");
- }else{
- //Post with image
- uploadData(email, desc, String.valueOf(image_uri));
- }
- }
- });
- }
- public void checkUserStatus(){
- FirebaseUser user=firebaseAuth.getCurrentUser();
- if(user!=null){
- uid=user.getUid();
- }
- else{
- startActivity(new Intent(this, LogIn.class));
- finish();
- }
- }
- private void uploadData(String email, final String desc, String uri) {
- uploadProgress.setVisibility(View.VISIBLE);
- //getUserData
- getUserData();
- //For post
- final String timestamp=String.valueOf(System.currentTimeMillis());
- String filePathAndName="Posts/"+"post_"+ timestamp;
- if (!uri.equals("noImage")) {
- //get image from imageview
- Bitmap bitmap = ((BitmapDrawable) imgV.getDrawable()).getBitmap();
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- //image compress
- bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
- data = baos.toByteArray();
- //POST WITH IMAGE
- StorageReference ref = FirebaseStorage.getInstance().getReference().child(filePathAndName);
- ref.putBytes(data)
- .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
- @Override
- public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
- //Success to firebase storage
- Task<Uri> uriTask = taskSnapshot.getStorage().getDownloadUrl();
- while (!uriTask.isSuccessful());
- downloadUri = uriTask.getResult().toString();
- if (uriTask.isSuccessful()) {
- //url is received upload post to firebase db
- HashMap<Object, String> hashMap = new HashMap<>();
- //post info
- hashMap.put("uid", uid);
- hashMap.put("uname", name);
- hashMap.put("pid", timestamp);
- hashMap.put("pdesc", desc);
- hashMap.put("pimage", downloadUri);
- hashMap.put("ptime", dateTime);
- hashMap.put("propic", propic);
- //Path to store data
- DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Posts");
- //feeding data to ref
- ref.child(timestamp).setValue(hashMap)
- .addOnSuccessListener(new OnSuccessListener<Void>() {
- @Override
- public void onSuccess(Void aVoid) {
- uploadProgress.setVisibility(View.GONE);
- Toast.makeText(Add_post.this, "Post saved :)", Toast.LENGTH_SHORT).show();
- //resetting fields
- caption.setText("");
- imgV.setImageAlpha(R.drawable.image_up_icon);
- image_uri = null;
- }
- })
- .addOnFailureListener(new OnFailureListener() {
- @Override
- public void onFailure(@NonNull Exception e) {
- uploadProgress.setVisibility(View.GONE);
- Toast.makeText(Add_post.this, "Post saving failed :(", Toast.LENGTH_SHORT).show();
- //resetting fields
- caption.setText("");
- imgV.setImageAlpha(R.drawable.image_up_icon);
- image_uri=null;
- }
- });
- }
- }
- })
- .addOnFailureListener(new OnFailureListener() {
- @Override
- public void onFailure(@NonNull Exception e) {
- Toast.makeText(Add_post.this, "Failed Uploading image", Toast.LENGTH_SHORT).show();
- }
- });
- }
- else{
- getUserData();
- //post without image
- HashMap<Object, String> hashMap= new HashMap<>();
- //post info
- hashMap.put("uid", uid);
- hashMap.put("uname", name);
- hashMap.put("pid", timestamp);
- hashMap.put("pdesc", desc);
- hashMap.put("pimage", "noImage");
- hashMap.put("ptime", dateTime);
- hashMap.put("propic", propic);
- //Path to store data
- DatabaseReference ref=FirebaseDatabase.getInstance().getReference("Posts");
- //feeding data to ref
- ref.child(timestamp).setValue(hashMap)
- .addOnSuccessListener(new OnSuccessListener<Void>() {
- @Override
- public void onSuccess(Void aVoid) {
- uploadProgress.setVisibility(View.GONE);
- Toast.makeText(Add_post.this, "Post saved :)", Toast.LENGTH_SHORT).show();
- //resetting fields
- caption.setText("");
- imgV.setImageAlpha(R.drawable.image_up_icon);
- image_uri=null;
- }
- })
- .addOnFailureListener(new OnFailureListener() {
- @Override
- public void onFailure(@NonNull Exception e) {
- uploadProgress.setVisibility(View.GONE);
- Toast.makeText(Add_post.this, "Post saving failed :(", Toast.LENGTH_SHORT).show();
- //resetting fields
- caption.setText("");
- imgV.setImageAlpha(R.drawable.image_up_icon);
- image_uri=null;
- }
- });
- }
- }
- private void showImagePickDialog() {
- //Options
- String[] options = {"Camera", "Gallery"};
- //Show Options
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle("Select image from : ");
- //set options
- builder.setItems(options, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- if (which == 0) {
- //Camera option
- if (!checkCameraPermission()) {
- requestCameraPermission();
- } else {
- PickFromCamera();
- }
- }
- if (which == 1) {
- //Gallery option
- if (!checkStoragePermission()) {
- requestStoragePermission();
- } else {
- PickFromGallery();
- }
- }
- }
- });
- builder.create().show();
- }
- private boolean checkStoragePermission() {
- boolean result = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == (PackageManager.PERMISSION_GRANTED);
- return result;
- }
- private void requestStoragePermission() {
- ActivityCompat.requestPermissions(this, storagePermissions, STORAGE_REQUEST_CODE);
- }
- private boolean checkCameraPermission() {
- boolean result = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == (PackageManager.PERMISSION_GRANTED);
- boolean result1 = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == (PackageManager.PERMISSION_GRANTED);
- return result && result1;
- }
- private void requestCameraPermission() {
- ActivityCompat.requestPermissions(this, cameraPermissions, CAMERA_REQUEST_CODE);
- }
- //handle permission result
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- switch (requestCode) {
- case CAMERA_REQUEST_CODE: {
- if (grantResults.length > 0) {
- boolean cameraAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
- boolean storageAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
- if (cameraAccepted && storageAccepted) {
- PickFromCamera();
- } else {
- Toast.makeText(this, "Camera and Storage both permission are necessary...", Toast.LENGTH_SHORT).show();
- }
- } else {
- }
- }
- break;
- case STORAGE_REQUEST_CODE: {
- if (grantResults.length > 0) {
- boolean storageAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
- if(storageAccepted){
- PickFromGallery();
- } else {
- Toast.makeText(this, "Storage permission is necessary...", Toast.LENGTH_SHORT).show();
- }
- }
- }
- }
- }
- private void PickFromCamera() {
- ContentValues cv=new ContentValues();
- cv.put(MediaStore.Images.Media.TITLE,"Temp pick");
- cv.put(MediaStore.Images.Media.DESCRIPTION,"Temp descp");
- image_uri=getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, cv);
- Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- intent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri);
- startActivityForResult(intent, IMAGE_PICK_CAMERA_CODE);
- }
- private void PickFromGallery() {
- Intent intent=new Intent(Intent.ACTION_PICK);
- intent.setType("image/*");
- startActivityForResult(intent, IMAGE_PICK_GALLERY_CODE);
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- if(resultCode==RESULT_OK)
- {
- if(requestCode== IMAGE_PICK_GALLERY_CODE)
- {
- //picked from gallery
- image_uri=data.getData();
- imgV.setImageURI(image_uri);
- }
- else if(requestCode==IMAGE_PICK_CAMERA_CODE){
- imgV.setImageURI(image_uri);
- }
- }
- super.onActivityResult(requestCode, resultCode, data);
- }
- public void getUserData(){
- //Date and time
- Calendar calender=Calendar.getInstance();
- SimpleDateFormat simpleDateFormat=new SimpleDateFormat(" EEEE, dd-MM-yyyy hh:mm:ss a");
- dateTime = simpleDateFormat.format(calender.getTime());
- //User Data
- firebaseAuth = FirebaseAuth.getInstance();
- final String current_user_id = firebaseAuth.getCurrentUser().getUid();
- userdbref= FirebaseDatabase.getInstance().getReference().child("Student");
- Query query=userdbref.orderByChild("uid").equalTo(current_user_id);
- query.addValueEventListener(new ValueEventListener() {
- @Override
- public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
- for (DataSnapshot ds:dataSnapshot.getChildren()){
- name=""+ds.child("username").getValue();
- propic=""+ds.child("propic").getValue();
- }
- }
- @Override
- public void onCancelled(@NonNull DatabaseError databaseError) {
- }
- });
- }
- }
Add Comment
Please, Sign In to add comment