diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 876e6316e8bed496896946899e6818b3c3dc896e..aeb7799212d674ea17ebd1291335de6224b2ec45 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,8 @@ <uses-feature android:name="android.hardware.camera2" /> + + <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> @@ -19,7 +21,7 @@ android:theme="@style/AppTheme"> <provider android:name="android.support.v4.content.FileProvider" - android:authorities="com.example.android.fileprovider" + android:authorities="com.mapps.seproject.provider" android:exported="false" android:grantUriPermissions="true"> <meta-data @@ -27,6 +29,8 @@ android:resource="@xml/file_paths" /> </provider> + + <activity android:name=".LoginActivity"> </activity> diff --git a/app/src/main/java/com/mapps/seproject/CameraFragment.java b/app/src/main/java/com/mapps/seproject/CameraFragment.java index be458dfa76ec82fa0c54e2709344b785bbb76676..7e706567d40067f78852cda7fd10cf63fafa51fc 100644 --- a/app/src/main/java/com/mapps/seproject/CameraFragment.java +++ b/app/src/main/java/com/mapps/seproject/CameraFragment.java @@ -1,23 +1,43 @@ package com.mapps.seproject; import android.app.Fragment; +import android.app.ProgressDialog; import android.content.Intent; +import android.content.pm.PackageManager; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.media.Image; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; +import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; +import android.support.v4.content.FileProvider; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import android.widget.ImageView; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnFailureListener; +import com.google.android.gms.tasks.OnSuccessListener; +import com.google.firebase.storage.FirebaseStorage; +import com.google.firebase.storage.OnProgressListener; +import com.google.firebase.storage.StorageReference; +import com.google.firebase.storage.UploadTask; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Locale; +import static android.app.Activity.RESULT_CANCELED; import static android.app.Activity.RESULT_OK; /** @@ -26,9 +46,20 @@ import static android.app.Activity.RESULT_OK; public class CameraFragment extends Fragment { - private Uri file; - static final int REQUEST_IMAGE_CAPTURE = 1; + + private static final String IMAGE_DIRECTORY_NAME = "Hello_Camera"; View view; + private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100; + public static final int MEDIA_TYPE_IMAGE = 1; + private static int RESULT_LOAD_IMAGE = 2; + private Uri fileUri; + private Uri imageUri; + public static Uri images; + private Button btnCapturePicture; + private Button choose_image; + StorageReference mStorageRef; + + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -36,6 +67,25 @@ public class CameraFragment extends Fragment { // Inflate the layout for this fragment view = inflater.inflate(R.layout.fragment_camera, container, false); + mStorageRef = FirebaseStorage.getInstance().getReference(); + btnCapturePicture = (Button) view.findViewById(R.id.btnCapturePicture); + choose_image = (Button) view.findViewById(R.id.choose_image); + btnCapturePicture.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + // capture picture + captureImage(); + } + }); + choose_image.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent cameraIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI); + startActivityForResult(cameraIntent,RESULT_LOAD_IMAGE); + } + }); + return view; } @@ -47,67 +97,219 @@ public class CameraFragment extends Fragment { getActivity().setTitle("Menu1"); } - private void dispatchTakePictureIntent() { + private boolean isDeviceSupportCamera() { + if (getActivity().getPackageManager().hasSystemFeature( + PackageManager.FEATURE_CAMERA)) { + // this device has a camera + return true; + } else { + // no camera on this device + return false; + } + } - Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); - try { - file = Uri.fromFile(createImageFile()); - }catch (Exception e){ + private void captureImage() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); - } - takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,file); + // fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); + fileUri = FileProvider.getUriForFile(getActivity(), "com.mapps.seproject.provider", getOutputMediaFile(MEDIA_TYPE_IMAGE)); - if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) { - startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE); - } + intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); + + // start the image capture Intent + startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { + // if the result is capturing Image + if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) { + if (resultCode == RESULT_OK) { + uploadFile(); + } else if (resultCode == RESULT_CANCELED) { + // user cancelled Image capture + Toast.makeText(getActivity(), + "User cancelled image capture", Toast.LENGTH_SHORT) + .show(); + } else { + // failed to capture image + Toast.makeText(getActivity(), + "Sorry! Failed to capture image", Toast.LENGTH_SHORT) + .show(); + } + } + if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null) { + + imageUri = data.getData(); + Toast.makeText(getActivity().getBaseContext(), "Image Added. Press Compose to transfer to Mail Window", Toast.LENGTH_SHORT).show(); + uploadFiles(); + } + + } + + - ImageView mImageView = (ImageView) view.findViewById(R.id.imageView); - if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) { - Bundle extras = data.getExtras(); - Bitmap imageBitmap = (Bitmap) extras.get("data"); - if(imageBitmap==null){ - // No image was taken - }else { + private static File getOutputMediaFile(int type) { - mImageView.setImageBitmap(imageBitmap); + // External sdcard location + File mediaStorageDir = new File( + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), + IMAGE_DIRECTORY_NAME); + + // Create the storage directory if it does not exist + if (!mediaStorageDir.exists()) { + if (!mediaStorageDir.mkdirs()) { + Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create " + + IMAGE_DIRECTORY_NAME + " directory"); + return null; } } + + // Create a media file name + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", + Locale.getDefault()).format(new Date()); + File mediaFile; + if (type == MEDIA_TYPE_IMAGE) { + mediaFile = new File(mediaStorageDir.getPath() + File.separator + + "IMG_" + timeStamp + ".jpg"); + } else { + return null; + } + + return mediaFile; } - String mCurrentPhotoPath; - - private File createImageFile() throws IOException { - // Create an image file name - String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); - String imageFileName = "JPEG_" + timeStamp + "_"; - File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); - File image = File.createTempFile( - imageFileName, /* prefix */ - ".jpg", /* suffix */ - storageDir /* directory */ - ); - - // Save a file: path for use with ACTION_VIEW intents - mCurrentPhotoPath = image.getAbsolutePath(); - return image; + + + private void uploadFile() { + //if there is a file to upload + if (fileUri != null) { + //displaying a progress dialog while upload is going on + final ProgressDialog progressDialog = new ProgressDialog(getActivity()); + progressDialog.setTitle("Uploading"); + progressDialog.show(); + + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", + Locale.getDefault()).format(new Date()); + + StorageReference riversRef = mStorageRef.child("images/"+ timeStamp+"pic.jpg"); + riversRef.putFile(fileUri) + .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { + @Override + public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { + //if the upload is successfull + //hiding the progress dialog + progressDialog.dismiss(); + + //and displaying a success toast + Toast.makeText(getActivity().getBaseContext(), "File Uploaded ", Toast.LENGTH_LONG).show(); + } + }) + .addOnFailureListener(new OnFailureListener() { + @Override + public void onFailure(@NonNull Exception exception) { + //if the upload is not successfull + //hiding the progress dialog + progressDialog.dismiss(); + + //and displaying error message + Toast.makeText(getActivity().getBaseContext(), exception.getMessage(), Toast.LENGTH_LONG).show(); + } + }) + .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { + @SuppressWarnings("VisibleForTests") + @Override + public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { + //calculating progress percentage + + double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount(); + + //displaying percentage in progress dialog + progressDialog.setMessage("Uploaded " + ((int) progress) + "%..."); + } + }); + } + //if there is not any file + else { + //you can display an error toast + } } + private void uploadFiles() { + //if there is a file to upload + if (imageUri != null) { + //displaying a progress dialog while upload is going on + final ProgressDialog progressDialog = new ProgressDialog(getActivity()); + progressDialog.setTitle("Uploading"); + progressDialog.show(); + + String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", + Locale.getDefault()).format(new Date()); + StorageReference riversRef = mStorageRef.child("images/"+ timeStamp+"pic.jpg"); + riversRef.putFile(imageUri) + .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { + @Override + public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { + //if the upload is successfull + //hiding the progress dialog + progressDialog.dismiss(); + + //and displaying a success toast + Toast.makeText(getActivity().getBaseContext(), "File Uploaded ", Toast.LENGTH_LONG).show(); + } + }) + .addOnFailureListener(new OnFailureListener() { + @Override + public void onFailure(@NonNull Exception exception) { + //if the upload is not successfull + //hiding the progress dialog + progressDialog.dismiss(); + + //and displaying error message + Toast.makeText(getActivity().getBaseContext(), exception.getMessage(), Toast.LENGTH_LONG).show(); + } + }) + .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { + @SuppressWarnings("VisibleForTests") + @Override + public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { + //calculating progress percentage + + double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount(); + + //displaying percentage in progress dialog + progressDialog.setMessage("Uploaded " + ((int) progress) + "%..."); + } + }); + } + //if there is not any file + else { + //you can display an error toast + } + } + + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + // save file url in bundle as it will be null on scren orientation + // changes + outState.putParcelable("file_uri", fileUri); + } + /* @Override public void onStart(){ super.onStart(); dispatchTakePictureIntent(); } + */ } diff --git a/app/src/main/java/com/mapps/seproject/ComposeFragment.java b/app/src/main/java/com/mapps/seproject/ComposeFragment.java index 39fe20ce945fd5e0d3a3598fc83db0fadb38f977..54853dc933401a0d243d5870e98b966dbc0095a7 100644 --- a/app/src/main/java/com/mapps/seproject/ComposeFragment.java +++ b/app/src/main/java/com/mapps/seproject/ComposeFragment.java @@ -1,15 +1,21 @@ package com.mapps.seproject; +import android.*; +import android.Manifest; import android.app.AlertDialog; import android.app.Fragment; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; +import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.provider.MediaStore; import android.support.annotation.NonNull; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -29,6 +35,9 @@ import com.google.firebase.storage.StorageReference; import com.google.firebase.storage.UploadTask; import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; import static android.app.Activity.RESULT_OK; @@ -43,15 +52,15 @@ public class ComposeFragment extends Fragment implements View.OnClickListener{ Spinner dropdown; TextView emailText; - private StorageReference mStorageRef; - Button bAddImage; + private Uri imageUri = CameraFragment.images; + + + //Button bAddImage; View view; - private Uri imageUri; Button upload; - private static int RESULT_LOAD_IMAGE = 1; - private static int RESULT_MAIL = 2; + //private static int RESULT_LOAD_IMAGE = 1; private Button b_get; private com.mapps.seproject.TrackGPS gps; @@ -73,16 +82,12 @@ public class ComposeFragment extends Fragment implements View.OnClickListener{ bComposeMail = (Button) view.findViewById(R.id.bComposeMail); emailText = (TextView) view.findViewById(R.id.tvEmailMessage); - bAddImage = (Button) view.findViewById(R.id.bAddImage); b_get = (Button) view.findViewById(R.id.button2); - upload = (Button) view.findViewById(R.id.upload_image); - mStorageRef = FirebaseStorage.getInstance().getReference(); - bAddImage.setOnClickListener(this); + bComposeMail.setOnClickListener(this); b_get.setOnClickListener(this); - upload.setOnClickListener(this); return view; } @@ -161,17 +166,7 @@ public class ComposeFragment extends Fragment implements View.OnClickListener{ } - if(v == bAddImage) { - Intent cameraIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI); - startActivityForResult(cameraIntent,RESULT_LOAD_IMAGE); - - } - - //Upload Image - if(v == upload){ - uploadFile(); - } //Location if(v == b_get){ @@ -204,75 +199,8 @@ public class ComposeFragment extends Fragment implements View.OnClickListener{ - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - - if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null) { - - imageUri = data.getData(); - Toast.makeText(getActivity().getBaseContext(), "Image Added. Press Compose to transfer to Mail Window", Toast.LENGTH_SHORT).show(); - - } - - - - - } - //Upload image - private void uploadFile() { - //if there is a file to upload - if (imageUri != null) { - //displaying a progress dialog while upload is going on - final ProgressDialog progressDialog = new ProgressDialog(getActivity()); - progressDialog.setTitle("Uploading"); - progressDialog.show(); - - StorageReference riversRef = mStorageRef.child("images/pic.jpg"); - riversRef.putFile(imageUri) - .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { - @Override - public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { - //if the upload is successfull - //hiding the progress dialog - progressDialog.dismiss(); - - //and displaying a success toast - Toast.makeText(getActivity().getBaseContext(), "File Uploaded ", Toast.LENGTH_LONG).show(); - } - }) - .addOnFailureListener(new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception exception) { - //if the upload is not successfull - //hiding the progress dialog - progressDialog.dismiss(); - - //and displaying error message - Toast.makeText(getActivity().getBaseContext(), exception.getMessage(), Toast.LENGTH_LONG).show(); - } - }) - .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { - @SuppressWarnings("VisibleForTests") - @Override - public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { - //calculating progress percentage - - double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount(); - - //displaying percentage in progress dialog - progressDialog.setMessage("Uploaded " + ((int) progress) + "%..."); - } - }); - } - //if there is not any file - else { - //you can display an error toast - } - } - @Override public void onActivityCreated(Bundle savedInstanceState) { diff --git a/app/src/main/java/com/mapps/seproject/RegisterActivity.java b/app/src/main/java/com/mapps/seproject/RegisterActivity.java index 9056dcf18acaf245ba26b7a3d80337f97c17731c..89f7f8417515826d691527a808281d77bb5f1aed 100644 --- a/app/src/main/java/com/mapps/seproject/RegisterActivity.java +++ b/app/src/main/java/com/mapps/seproject/RegisterActivity.java @@ -58,13 +58,6 @@ public class RegisterActivity extends AppCompatActivity implements View.OnClickL b.setOnClickListener(this); loginText.setOnClickListener(this); - - - - - - - } @@ -88,9 +81,6 @@ public class RegisterActivity extends AppCompatActivity implements View.OnClickL return; } - - - progress.setMessage("Registering"); // Progress Bar progress.show(); diff --git a/app/src/main/java/com/mapps/seproject/StartActivty.java b/app/src/main/java/com/mapps/seproject/StartActivty.java index 23a8f94adf4077f0e264751e9c16895953428258..eb24cb324b905061418ac4730c80470114cd3012 100644 --- a/app/src/main/java/com/mapps/seproject/StartActivty.java +++ b/app/src/main/java/com/mapps/seproject/StartActivty.java @@ -1,6 +1,15 @@ package com.mapps.seproject; +import android.*; +import android.Manifest; +import android.annotation.TargetApi; import android.content.Intent; +import android.content.pm.PackageManager; +import android.os.Build; +import android.support.annotation.NonNull; +import android.support.design.widget.Snackbar; +import android.support.v4.app.ActivityCompat; +import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; @@ -10,18 +19,111 @@ public class StartActivty extends AppCompatActivity implements View.OnClickListe Button user; Button municipal; + public static final int PERMISSIONS_MULTIPLE_REQUEST = 123; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_start_activty); + checkAndroidVersion(); user = (Button) findViewById(R.id.user_entry); municipal = (Button) findViewById(R.id.municipal_entry); user.setOnClickListener(this); municipal.setOnClickListener(this); } + private void checkAndroidVersion() { + if (Build.VERSION.SDK_INT >= 23) { + + checkPermission(); + } else { + // write your logic here + } + + } + + @TargetApi(Build.VERSION_CODES.M) + private void checkPermission() { + if (ContextCompat.checkSelfPermission(this, + android.Manifest.permission.READ_EXTERNAL_STORAGE) + ContextCompat + .checkSelfPermission(this, android.Manifest.permission.CAMERA) + ContextCompat + .checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) + ContextCompat + .checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) + != PackageManager.PERMISSION_GRANTED) { + + if (ActivityCompat.shouldShowRequestPermissionRationale + (this, android.Manifest.permission.READ_EXTERNAL_STORAGE) || + ActivityCompat.shouldShowRequestPermissionRationale + (this, android.Manifest.permission.CAMERA) || + ActivityCompat.shouldShowRequestPermissionRationale + (this, Manifest.permission.ACCESS_COARSE_LOCATION) || + ActivityCompat.shouldShowRequestPermissionRationale + (this, Manifest.permission.ACCESS_FINE_LOCATION)) { + + Snackbar.make(findViewById(android.R.id.content), + "Please Grant Permissions ", + Snackbar.LENGTH_INDEFINITE).setAction("ENABLE", + new View.OnClickListener() { + @Override + public void onClick(View v) { + requestPermissions( + new String[]{android.Manifest.permission + .READ_EXTERNAL_STORAGE, android.Manifest.permission.CAMERA, Manifest.permission + .ACCESS_FINE_LOCATION, Manifest.permission + .ACCESS_COARSE_LOCATION},PERMISSIONS_MULTIPLE_REQUEST); + } + }).show(); + } else { + requestPermissions( + new String[]{android.Manifest.permission + .READ_EXTERNAL_STORAGE, android.Manifest.permission.CAMERA, Manifest.permission + .ACCESS_FINE_LOCATION, Manifest.permission + .ACCESS_COARSE_LOCATION},PERMISSIONS_MULTIPLE_REQUEST); + } + } else { + // write your logic code if permission already granted + } + } + + @Override + @TargetApi(Build.VERSION_CODES.M) + public void onRequestPermissionsResult(int requestCode, + @NonNull String[] permissions, @NonNull int[] grantResults) { + + switch (requestCode) { + case PERMISSIONS_MULTIPLE_REQUEST: + if (grantResults.length > 0) { + boolean cameraPermission = grantResults[1] == PackageManager.PERMISSION_GRANTED; + boolean readExternalFile = grantResults[0] == PackageManager.PERMISSION_GRANTED; + + + if(cameraPermission && readExternalFile) + { + // write your logic here + Snackbar.make(findViewById(android.R.id.content), + "Please Grant Permissions to upload profile photo", + Snackbar.LENGTH_INDEFINITE).setAction("ENABLE", + new View.OnClickListener() { + @Override + public void onClick(View v) { + requestPermissions( + new String[]{android.Manifest.permission + .READ_EXTERNAL_STORAGE, android.Manifest.permission.CAMERA, Manifest.permission + .ACCESS_FINE_LOCATION, Manifest.permission + .ACCESS_COARSE_LOCATION},PERMISSIONS_MULTIPLE_REQUEST); + } + }).show(); + } else { + + } + } + break; + } + } + + + @Override public void onClick(View v) { if(v==user){ diff --git a/app/src/main/java/com/mapps/seproject/UserActivityFragment.java b/app/src/main/java/com/mapps/seproject/UserActivityFragment.java index e81d46424b4377fb3088d63a99a8b95f897431e3..d3500beb6124ddf329abe38da9e42cbcb1874ade 100644 --- a/app/src/main/java/com/mapps/seproject/UserActivityFragment.java +++ b/app/src/main/java/com/mapps/seproject/UserActivityFragment.java @@ -3,25 +3,54 @@ package com.mapps.seproject; import android.app.Fragment; import android.content.Context; import android.content.Intent; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.os.Bundle; +import android.support.v7.app.ActionBarActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; +import android.widget.ListView; import android.widget.TextView; +import com.android.volley.Cache; +import com.android.volley.Request; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.VolleyLog; +import com.android.volley.toolbox.JsonObjectRequest; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; +import com.mapps.seproject.adapter.FeedListAdapter; +import com.mapps.seproject.app.AppController; +import com.mapps.seproject.data.FeedItem; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.UnsupportedEncodingException; +import java.util.ArrayList; +import java.util.List; + +import static android.content.ContentValues.TAG; public class UserActivityFragment extends Fragment { Button bSignOut; - TextView welcome; + + FirebaseUser user; FirebaseAuth firebaseAuth; - Button bComposeScreen; + + private ListView listView; + private FeedListAdapter listAdapter; + private List<FeedItem> feedItems; + private String URL_FEED = "https://se-project-4a6c6.firebaseapp.com/feeds/feeds.json"; + View view; @@ -41,11 +70,11 @@ public class UserActivityFragment extends Fragment { } - FirebaseUser user = firebaseAuth.getCurrentUser(); + user = firebaseAuth.getCurrentUser(); + + - welcome = (TextView) view.findViewById(R.id.tvWelcome); - welcome.setText("Welcome "+user.getEmail()); // Get Email' bSignOut = (Button) view.findViewById(R.id.bSignOut); bSignOut.setOnClickListener(new View.OnClickListener() { @@ -59,6 +88,58 @@ public class UserActivityFragment extends Fragment { } }); + listView = (ListView) view.findViewById(R.id.lists); + + feedItems = new ArrayList<FeedItem>(); + + listAdapter = new FeedListAdapter(getActivity(), feedItems); + listView.setAdapter(listAdapter); + + // These two lines not needed, + // just to get the look of facebook (changing background color & hiding the icon) + + + + // We first check for cached request + Cache cache = AppController.getInstance().getRequestQueue().getCache(); + Cache.Entry entry = cache.get(URL_FEED); + if (entry != null) { + // fetch the data from cache + try { + String data = new String(entry.data, "UTF-8"); + try { + parseJsonFeed(new JSONObject(data)); + } catch (JSONException e) { + e.printStackTrace(); + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + } else { + // making fresh volley request and getting json + JsonObjectRequest jsonReq = new JsonObjectRequest(Request.Method.GET, + URL_FEED, null, new Response.Listener<JSONObject>() { + + @Override + public void onResponse(JSONObject response) { + VolleyLog.d(TAG, "Response: " + response.toString()); + if (response != null) { + parseJsonFeed(response); + } + } + }, new Response.ErrorListener() { + + @Override + public void onErrorResponse(VolleyError error) { + VolleyLog.d(TAG, "Error: " + error.getMessage()); + } + }); + + // Adding request to volley request queue + AppController.getInstance().addToRequestQueue(jsonReq); + } + return view; @@ -67,13 +148,42 @@ public class UserActivityFragment extends Fragment { @Override public void onViewCreated(View view,Bundle savedInstanceState){ super.onViewCreated(view,savedInstanceState); - getActivity().setTitle("Menu1"); + getActivity().setTitle("Welcome "+ user.getEmail()); } + private void parseJsonFeed(JSONObject response) { + try { + JSONArray feedArray = response.getJSONArray("feed"); + + for (int i = 0; i < feedArray.length(); i++) { + JSONObject feedObj = (JSONObject) feedArray.get(i); + + FeedItem item = new FeedItem(); + item.setId(feedObj.getInt("id")); + item.setName(feedObj.getString("name")); + String image = feedObj.isNull("image") ? null : feedObj + .getString("image"); + item.setImge(image); + item.setStatus(feedObj.getString("status")); + item.setProfilePic(feedObj.getString("profilePic")); + item.setTimeStamp(feedObj.getString("timeStamp")); + + String feedUrl = feedObj.isNull("url") ? null : feedObj + .getString("url"); + item.setUrl(feedUrl); + + feedItems.add(item); + } + + listAdapter.notifyDataSetChanged(); + } catch (JSONException e) { + e.printStackTrace(); + } + } } diff --git a/app/src/main/res/layout/fragment_camera.xml b/app/src/main/res/layout/fragment_camera.xml index 8e70568025fc5ffa69d4d2993041af9cad741f7e..a9df2dcf80ff0f3f11043cb9f27f66d13133dfb2 100644 --- a/app/src/main/res/layout/fragment_camera.xml +++ b/app/src/main/res/layout/fragment_camera.xml @@ -4,11 +4,23 @@ android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> - <ImageView - android:id="@+id/imageView" - android:layout_width="match_parent" - android:layout_height="300dp" + + <Button + android:id="@+id/btnCapturePicture" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" android:layout_alignParentStart="true" - android:layout_marginStart="13dp" - app:srcCompat="@drawable/googleg_standard_color_18" /> + android:layout_marginBottom="114dp" + android:layout_marginStart="53dp" + android:text="Take Image" /> + + <Button + android:id="@+id/choose_image" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignTop="@+id/btnCapturePicture" + android:layout_marginEnd="42dp" + android:text="Choose Image" /> </RelativeLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_compose.xml b/app/src/main/res/layout/fragment_compose.xml index c3a360955196d08c86ded02e7a53891fe58730da..5decb7b011f5a76f7855da25307f731410edf824 100644 --- a/app/src/main/res/layout/fragment_compose.xml +++ b/app/src/main/res/layout/fragment_compose.xml @@ -23,24 +23,16 @@ android:layout_alignParentTop="true" android:layout_alignParentStart="true" /> + + <Button android:text="Compose Email" - android:layout_width="wrap_content" + android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/bComposeMail" - android:layout_marginBottom="28dp" android:layout_alignParentBottom="true" android:layout_alignParentStart="true" /> - <Button - android:text="Add Image" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:id="@+id/bAddImage" - android:layout_above="@+id/bComposeMail" - android:layout_alignParentStart="true" - android:layout_marginBottom="12dp" /> - <EditText android:layout_width="match_parent" android:inputType="textPersonName" @@ -48,27 +40,22 @@ android:id="@+id/tvEmailMessage" android:visibility="visible" android:layout_height="280dp" - android:layout_above="@+id/bAddImage" + android:layout_above="@+id/bComposeMail" android:layout_alignParentStart="true" android:layout_marginBottom="19dp" - android:hint="Enter your complaint here" /> + android:hint="Enter your complaint here" + android:layout_alignParentEnd="true" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_alignTop="@+id/tvEmailMessage" + android:text="Get Location" + android:layout_above="@+id/tvEmailMessage" android:layout_centerHorizontal="true" - android:text="Get Location" /> + android:layout_marginBottom="19dp" /> + - <Button - android:id="@+id/upload_image" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="Upload Image" - android:layout_alignBaseline="@+id/bComposeMail" - android:layout_alignBottom="@+id/bComposeMail" - android:layout_toEndOf="@+id/button2" /> </RelativeLayout> diff --git a/app/src/main/res/layout/fragment_user_activity.xml b/app/src/main/res/layout/fragment_user_activity.xml index b48415f2297221c42b5d9091b29299b962170b2c..3e0b260cda16f6d7747ddc6d7641497d62f6ecf7 100644 --- a/app/src/main/res/layout/fragment_user_activity.xml +++ b/app/src/main/res/layout/fragment_user_activity.xml @@ -11,20 +11,17 @@ - <TextView - android:text="TextView" - android:layout_width="wrap_content" + <ListView + android:id="@+id/lists" + android:layout_width="fill_parent" android:layout_height="wrap_content" - android:layout_centerVertical="true" - android:layout_centerHorizontal="true" - android:textSize="24sp" - android:id="@+id/tvWelcome" /> + android:divider="@null" /> <Button android:text="Sign Out" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_below="@+id/tvWelcome" + android:layout_below="@id/lists" android:layout_centerHorizontal="true" android:layout_marginTop="76dp" android:id="@+id/bSignOut" /> diff --git a/app/src/main/res/xml/file_paths.xml b/app/src/main/res/xml/file_paths.xml index 34ba0fb44a87c4ee22277c472721d887b32bd9f8..f14046316f659d24135051b2767c477dacd960c7 100644 --- a/app/src/main/res/xml/file_paths.xml +++ b/app/src/main/res/xml/file_paths.xml @@ -1,4 +1,5 @@ <?xml version="1.0" encoding="utf-8"?> <paths xmlns:android="http://schemas.android.com/apk/res/android"> - <external-path name="my_images" path="Android/data/com.example.kishore.afinal/files/Pictures" /> + <external-path name="my_images" path="/Pictures" /> + </paths> \ No newline at end of file