Commit eea5b411 authored by MUTTINENI NAVYA's avatar MUTTINENI NAVYA

resolved conflicts

parents 151a4c05 5643adf7
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="JavadocGenerationManager"> <component name="JavadocGenerationManager">
<option name="OUTPUT_DIRECTORY" value="$USER_HOME$" /> <option name="OUTPUT_DIRECTORY" value="$USER_HOME$/InstiLostAndFoundDoc" />
</component> </component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK" /> <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project> </project>
\ No newline at end of file
This diff is collapsed.
...@@ -42,9 +42,6 @@ ...@@ -42,9 +42,6 @@
android:name="com.google.android.geo.API_KEY" android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" /> android:value="@string/google_maps_key" />
<activity
android:name=".MapsActivity"
android:label="@string/title_activity_maps"></activity>
<activity android:name=".ItemClaim" /> <activity android:name=".ItemClaim" />
<activity android:name=".NewsFeedLost"></activity> <activity android:name=".NewsFeedLost"></activity>
<activity android:name=".MyPostsLostRV" /> <activity android:name=".MyPostsLostRV" />
......
package com.example.instilostandfound; package com.example.instilostandfound;
/**
* Configuration class for email setups
*/
public class Config { public class Config {
public static final String EMAIL = "hackoholicgirls@gmail.com"; public static final String EMAIL = "hackoholicgirls@gmail.com";
public static final String PASSWORD = "hackoholicgirls123"; public static final String PASSWORD = "hackoholicgirls123";
......
...@@ -7,9 +7,11 @@ import java.io.Serializable; ...@@ -7,9 +7,11 @@ import java.io.Serializable;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
/**
* Creates a database object for each item found or lost
*/
public class CreateFoundObject implements Serializable { public class CreateFoundObject implements Serializable {
//private String mLDAPID;
private String mImageUrl; private String mImageUrl;
private String mKey; private String mKey;
private String mTitle; private String mTitle;
...@@ -21,17 +23,23 @@ public class CreateFoundObject implements Serializable { ...@@ -21,17 +23,23 @@ public class CreateFoundObject implements Serializable {
private String mDateFound; private String mDateFound;
private String mtype; private String mtype;
public CreateFoundObject() { /**
* Constructor to initilaise objects of the class object found /lost
} * @param LDAPID LDAP id of the user
* @param title title of the post
* @param imageUrl image url of the object as stored in firebase storage
* @param location location of the object
* @param desc description of the object
* @param category Category of the object
* @param datefound Date when object was lost/found
* @param type type of item -> lost/found
*/
public CreateFoundObject(String LDAPID,String title ,String imageUrl, String location, String desc, public CreateFoundObject(String LDAPID,String title ,String imageUrl, String location, String desc,
String category, String datefound,String type) { String category, String datefound,String type) {
if (LDAPID.trim().equals("")) { if (LDAPID.trim().equals("")) {
mLDAP = "No Name"; mLDAP = "No Name";
} }
//mLDAPID = LDAPID;
mImageUrl = imageUrl; mImageUrl = imageUrl;
mLDAP = FirebaseAuth.getInstance().getCurrentUser().getEmail(); mLDAP = FirebaseAuth.getInstance().getCurrentUser().getEmail();
mDescription = desc; mDescription = desc;
...@@ -49,47 +57,69 @@ public class CreateFoundObject implements Serializable { ...@@ -49,47 +57,69 @@ public class CreateFoundObject implements Serializable {
} }
/**
* Get LDAP id
* @return LDAP of user
*/
public String getLDAP() { public String getLDAP() {
return mLDAP; return mLDAP;
} }
/**
* Setting LDAP credentials
* @param LDAP LDAP id of user
*/
public void setLDAP(String LDAP) { mLDAP= LDAP; } public void setLDAP(String LDAP) { mLDAP= LDAP; }
/**
* Set the title of post
* @return title of post
*/
public String getmTitle() { public String getmTitle() {
return mTitle; return mTitle;
} }
public void setmTitle(String mTitle) { /**
this.mTitle = mTitle; * get the image url
} * @return image url
*/
public String getImageUrl() public String getImageUrl()
{ {
return mImageUrl; return mImageUrl;
} }
public void setImageUrl(String imageUrl)
{
mImageUrl = imageUrl;
}
/**
* get category of post
* @return category of post
*/
public String getmCategory() public String getmCategory()
{ return mCategory; } {
public void setmCategory(String category) return mCategory;
{ mCategory = category; } }
/**
* get date when object was lost/found
* @return date of lost/found
*/
public String getmDateFound() public String getmDateFound()
{ return mDateFound; } {
public void setmDateFound(String dateFound) return mDateFound;
{ mDateFound = dateFound; } }
/**
* description of post
* @return description
*/
public String getmDescription() public String getmDescription()
{ return mDescription; } { return mDescription; }
public void setmDescription(String desc)
{ mDescription = desc; }
/**
* Get the location of object
* @return location coordinates
*/
public String getmLocation() public String getmLocation()
{return mLocation;} {return mLocation;}
public void setmLocation(String location)
{ mLocation = location;}
@Exclude @Exclude
public String getKey() public String getKey()
...@@ -102,8 +132,13 @@ public class CreateFoundObject implements Serializable { ...@@ -102,8 +132,13 @@ public class CreateFoundObject implements Serializable {
mKey = key; mKey = key;
} }
/**
* Get date of item lost/found
* @return date item
*/
public String getDate() public String getDate()
{ return mDate; } {
public void setDate(String date) return mDate;
{ mDate = date; } }
} }
package com.example.instilostandfound; package com.example.instilostandfound;
import com.example.instilostandfound.R;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.StorageTask;
import com.google.firebase.storage.UploadTask;
import android.Manifest;
import android.app.Activity;
import android.app.DatePickerDialog; import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.icu.text.SimpleDateFormat;
import android.net.Uri; import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
...@@ -43,7 +24,6 @@ import androidx.fragment.app.Fragment; ...@@ -43,7 +24,6 @@ import androidx.fragment.app.Fragment;
import android.os.Environment; import android.os.Environment;
import android.os.Handler; import android.os.Handler;
import android.provider.MediaStore;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.webkit.MimeTypeMap; import android.webkit.MimeTypeMap;
...@@ -55,22 +35,30 @@ import android.widget.Spinner; ...@@ -55,22 +35,30 @@ import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import java.io.ByteArrayOutputStream; import androidx.annotation.NonNull;
import java.io.File; import androidx.annotation.RequiresApi;
import java.io.FileOutputStream; import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException; import androidx.appcompat.widget.Toolbar;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
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.StorageTask;
import com.google.firebase.storage.UploadTask;
import com.squareup.picasso.Picasso;
import java.io.Serializable; import java.io.Serializable;
import java.net.URI;
import java.net.URL;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
import java.util.Random;
//import static android.app.Activity.RESULT_OK;
//import com.squareup.picasso.Picasso;
/**
* Activity to post the details of the found item -> includes image
*/
public class FoundItem extends AppCompatActivity implements View.OnClickListener, Serializable { public class FoundItem extends AppCompatActivity implements View.OnClickListener, Serializable {
private static final String TAG = FoundItem.class.getSimpleName(); ; private static final String TAG = FoundItem.class.getSimpleName();
//private FirebaseAuth mAuth;
EditText title; EditText title;
TextView place; TextView place;
EditText desc; EditText desc;
...@@ -78,11 +66,8 @@ public class FoundItem extends AppCompatActivity implements View.OnClickListener ...@@ -78,11 +66,8 @@ public class FoundItem extends AppCompatActivity implements View.OnClickListener
Spinner category; Spinner category;
String username; String username;
ImageView camera; ImageView camera;
// various item categries defined here
public static String[] items = new String[]{"Others","Electronics", "Documents", "Clothes","Furniture","Accessories"}; public static String[] items = new String[]{"Others","Electronics", "Documents", "Clothes","Furniture","Accessories"};
private static final int CAMERA_REQUEST = 1888;
private ImageView imageView;
private static final int MY_CAMERA_PERMISSION_CODE = 100;
private DatabaseReference mDatabase;
public Uri mImageUri; public Uri mImageUri;
public Uri uploadSessionUri; public Uri uploadSessionUri;
int PICK_IMAGE_REQUEST = 111; int PICK_IMAGE_REQUEST = 111;
...@@ -93,13 +78,14 @@ public class FoundItem extends AppCompatActivity implements View.OnClickListener ...@@ -93,13 +78,14 @@ public class FoundItem extends AppCompatActivity implements View.OnClickListener
public String tempUri; public String tempUri;
DatePickerDialog.OnDateSetListener dateSetListener; DatePickerDialog.OnDateSetListener dateSetListener;
// ...
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = FirebaseDatabase.getInstance().getReference("FoundData"); DatabaseReference myRef = FirebaseDatabase.getInstance().getReference("FoundData");
StorageReference mStorage = FirebaseStorage.getInstance().getReference("Images"); StorageReference mStorage = FirebaseStorage.getInstance().getReference("Images");
FirebaseStorage mStorageRef = FirebaseStorage.getInstance(); FirebaseStorage mStorageRef = FirebaseStorage.getInstance();
/**
* On create method for found item activity takes input the details of the object found
* @param savedInstanceState default param
*/
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -120,7 +106,7 @@ public class FoundItem extends AppCompatActivity implements View.OnClickListener ...@@ -120,7 +106,7 @@ public class FoundItem extends AppCompatActivity implements View.OnClickListener
pd.setMessage("Uploading...."); pd.setMessage("Uploading....");
date.setOnClickListener(this); date.setOnClickListener(this);
if(callingclass.equals("MyPosts")) if(callingclass.equals("MyPosts"))
{ {
CreateFoundObject objectfound = (CreateFoundObject)getIntent().getSerializableExtra("FoundObject"); CreateFoundObject objectfound = (CreateFoundObject)getIntent().getSerializableExtra("FoundObject");
...@@ -142,6 +128,9 @@ public class FoundItem extends AppCompatActivity implements View.OnClickListener ...@@ -142,6 +128,9 @@ public class FoundItem extends AppCompatActivity implements View.OnClickListener
} }
/**
* Stores the data in firebase db
*/
private void SubmitFound() { private void SubmitFound() {
final String Title = title.getText().toString().trim(); final String Title = title.getText().toString().trim();
final String Place = place.getText().toString().trim(); final String Place = place.getText().toString().trim();
...@@ -283,11 +272,12 @@ public class FoundItem extends AppCompatActivity implements View.OnClickListener ...@@ -283,11 +272,12 @@ public class FoundItem extends AppCompatActivity implements View.OnClickListener
startActivity(intent); startActivity(intent);
finish(); finish();
} }
} }
/**Method to get extension of type of image uploaded
*
* @param uri image url
* @return extension name
*/
private String getExtension(Uri uri) private String getExtension(Uri uri)
{ {
ContentResolver cr = getContentResolver(); ContentResolver cr = getContentResolver();
...@@ -297,9 +287,10 @@ public class FoundItem extends AppCompatActivity implements View.OnClickListener ...@@ -297,9 +287,10 @@ public class FoundItem extends AppCompatActivity implements View.OnClickListener
@RequiresApi(api = Build.VERSION_CODES.N) @RequiresApi(api = Build.VERSION_CODES.N)
/**
* On click for views and buttons of activity
*/
public void onClick(View view) public void onClick(View view)
{ {
switch (view.getId()) switch (view.getId())
......
package com.example.instilostandfound;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.squareup.picasso.Picasso;
import java.util.List;
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> {
private Context mContext;
private List<CreateFoundObject> mUploads;
public ImageAdapter(Context context, List<CreateFoundObject> uploads) {
mContext = context;
mUploads = uploads;
}
@Override
public ImageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mContext).inflate(R.layout.image_item, parent, false);
return new ImageViewHolder(v);
}
@Override
public void onBindViewHolder(ImageViewHolder holder, int position) {
CreateFoundObject uploadCurrent = mUploads.get(position);
holder.textViewName.setText(uploadCurrent.getmTitle());
Picasso.with(mContext)
.load(uploadCurrent.getImageUrl())
.placeholder(R.mipmap.ic_launcher)
.fit()
.centerCrop()
.into(holder.imageView);
}
@Override
public int getItemCount() {
return mUploads.size();
}
public class ImageViewHolder extends RecyclerView.ViewHolder {
public TextView textViewName;
public ImageView imageView;
public ImageViewHolder(View itemView) {
super(itemView);
textViewName = itemView.findViewById(R.id.text_view_name);
imageView = itemView.findViewById(R.id.image_view_upload);
}
}
}
package com.example.instilostandfound; package com.example.instilostandfound;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import com.squareup.picasso.Picasso; import com.squareup.picasso.Picasso;
/**
* Activity to see details and claim the item
*/
public class ItemClaim extends AppCompatActivity implements View.OnClickListener{ public class ItemClaim extends AppCompatActivity implements View.OnClickListener{
private String username =null; private String username =null;
CreateFoundObject objectfound; CreateFoundObject objectfound;
...@@ -41,6 +41,11 @@ public class ItemClaim extends AppCompatActivity implements View.OnClickListene ...@@ -41,6 +41,11 @@ public class ItemClaim extends AppCompatActivity implements View.OnClickListene
.centerCrop() .centerCrop()
.into(camera); .into(camera);
} }
/**
* Executed on click of claim button
* @param v claim button
*/
@Override @Override
public void onClick(View v) { public void onClick(View v) {
switch (v.getId()) { switch (v.getId()) {
......
package com.example.instilostandfound; package com.example.instilostandfound;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.TextView; import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import com.squareup.picasso.Picasso; import com.squareup.picasso.Picasso;
/**
* Activity to display object details
*/
public class ItemDetails extends AppCompatActivity { public class ItemDetails extends AppCompatActivity {
String category, name, key;
int type;
Bundle details_bundle;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -36,28 +33,6 @@ Bundle details_bundle; ...@@ -36,28 +33,6 @@ Bundle details_bundle;
.centerCrop() .centerCrop()
.into(camera); .into(camera);
// findViewById(R.id.edit_post).setOnClickListener(this);
// findViewById(R.id.resolve_post).setOnClickListener(this);
} }
/* @Override
public void onClick(View v) {
switch (v.getId()){
case R.id.edit_post:
if(details_bundle.getString("type").equals("lost")){
Intent intent = new Intent(ItemDetails.this, LostItem.class);
intent.putExtras(details_bundle);
startActivity(intent);
}
else if(details_bundle.getString("type").equals("found")){
Intent intent = new Intent(ItemDetails.this, FoundItem.class);
intent.putExtras(details_bundle);
startActivity(intent);
}
break;
case R.id.resolve_post:
break;
}
}*/
} }
...@@ -26,7 +26,6 @@ import androidx.annotation.RequiresApi; ...@@ -26,7 +26,6 @@ import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import android.os.Handler; import android.os.Handler;
import android.util.Log; import android.util.Log;
import android.view.View; import android.view.View;
...@@ -39,12 +38,29 @@ import android.widget.Spinner; ...@@ -39,12 +38,29 @@ import android.widget.Spinner;
import android.widget.TextView; import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import org.w3c.dom.Text; import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
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.StorageTask;
import com.google.firebase.storage.UploadTask;
import com.squareup.picasso.Picasso;
import java.io.Serializable; import java.io.Serializable;
import java.util.Calendar; import java.util.Calendar;
import java.util.Date; import java.util.Date;
/**
* Activity to post the details of the lost item -> includes image
*/
public class LostItem extends AppCompatActivity implements View.OnClickListener, Serializable { public class LostItem extends AppCompatActivity implements View.OnClickListener, Serializable {
private static final String TAG = LostItem.class.getSimpleName(); ; private static final String TAG = LostItem.class.getSimpleName(); ;
...@@ -55,6 +71,7 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener, ...@@ -55,6 +71,7 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener,
Spinner category; Spinner category;
String username; String username;
ImageView camera; ImageView camera;
// various item categries defined here
String[] items = new String[]{"Others","Electronics", "Documents", "Clothes","Furniture","Accessories"}; String[] items = new String[]{"Others","Electronics", "Documents", "Clothes","Furniture","Accessories"};
private static final int CAMERA_REQUEST = 1888; private static final int CAMERA_REQUEST = 1888;
private ImageView imageView; private ImageView imageView;
...@@ -75,6 +92,10 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener, ...@@ -75,6 +92,10 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener,
FirebaseStorage mStorageRef = FirebaseStorage.getInstance(); FirebaseStorage mStorageRef = FirebaseStorage.getInstance();
DatePickerDialog.OnDateSetListener dateSetListener; DatePickerDialog.OnDateSetListener dateSetListener;
/**
* On create method for lost item activity
* @param savedInstanceState default param takes input the details of the object lost
*/
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -118,7 +139,7 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener, ...@@ -118,7 +139,7 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener,
} }
/** /**
* * Stores the data in firebase db
*/ */
private void SubmitLost() { private void SubmitLost() {
final String Title = title.getText().toString().trim(); final String Title = title.getText().toString().trim();
...@@ -266,10 +287,10 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener, ...@@ -266,10 +287,10 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener,
} }
/** /**Method to get extension of type of image uploaded
* *
* @param uri * @param uri image url
* @return * @return extension name
*/ */
private String getExtension(Uri uri) private String getExtension(Uri uri)
{ {
...@@ -279,8 +300,9 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener, ...@@ -279,8 +300,9 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener,
} }
/**
* On click for views and buttons of activity
*/
@RequiresApi(api = Build.VERSION_CODES.N) @RequiresApi(api = Build.VERSION_CODES.N)
public void onClick(View view) public void onClick(View view)
{ {
...@@ -348,6 +370,13 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener, ...@@ -348,6 +370,13 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener,
break; break;
} }
} }
/**
* Executed after image is selected
* @param requestCode default param
* @param resultCode default param
* @param data default param
*/
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data); super.onActivityResult(requestCode, resultCode, data);
...@@ -356,11 +385,6 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener, ...@@ -356,11 +385,6 @@ public class LostItem extends AppCompatActivity implements View.OnClickListener,
mImageUri = data.getData(); mImageUri = data.getData();
try { try {
//getting image from gallery
//Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), mImageUri);
//Setting image to ImageView
//camera.setImageBitmap(bitmap);
Picasso.with(LostItem.this).load(mImageUri) Picasso.with(LostItem.this).load(mImageUri)
.fit() .fit()
.centerCrop() .centerCrop()
......
...@@ -27,9 +27,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe ...@@ -27,9 +27,6 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
// ...
// Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance(); mAuth = FirebaseAuth.getInstance();
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); setContentView(R.layout.activity_main);
......
package com.example.instilostandfound;
import androidx.fragment.app.FragmentActivity;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import java.util.Map;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnMarkerClickListener, GoogleMap.OnMarkerDragListener, LocationListener, View.OnClickListener {
private GoogleMap mMap;
Marker my_marker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
// Obtain the SupportMapFragment and get notified when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
findViewById(R.id.select_location).setOnClickListener(this);
}
/**
* Manipulates the map once available.
* This callback is triggered when the map is ready to be used.
* This is where we can add markers or lines, add listeners or move the camera. In this case,
* we just add a marker near Sydney, Australia.
* If Google Play services is not installed on the device, the user will be prompted to install
* it inside the SupportMapFragment. This method will only be triggered once the user has
* installed Google Play services and returned to the app.
*/
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(-34, 151);
my_marker = mMap.addMarker(new MarkerOptions().position(sydney).draggable(true));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
mMap.setOnMarkerClickListener(this);
mMap.setOnMarkerDragListener(this);
}
@Override
public boolean onMarkerClick(Marker marker) {
LatLng my_marker_location = marker.getPosition();
Toast.makeText(MapsActivity.this, my_marker_location.toString(), Toast.LENGTH_SHORT).show();
return false;
}
@Override
public void onMarkerDragStart(Marker marker) {
}
@Override
public void onMarkerDrag(Marker marker) {
}
@Override
public void onMarkerDragEnd(Marker marker) {
my_marker = marker;
}
@Override
public void onLocationChanged(Location location) {
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.select_location:
Intent intent = new Intent(MapsActivity.this, FoundItem.class);
CreateFoundObject item = (CreateFoundObject)getIntent().getSerializableExtra("FoundObject");
item.setmLocation(my_marker.toString());
//CreateFoundObject item = new CreateFoundObject(null, getIntent().getStringExtra("title"), null, null, null,
// null, null, null);
intent.putExtra("FoundObject", item);
startActivity(intent);
break;
}
}
}
package com.example.instilostandfound; package com.example.instilostandfound;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.ListView; import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query; import com.google.firebase.database.Query;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
public class MyPosts extends AppCompatActivity { public class MyPosts extends AppCompatActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
......
...@@ -17,6 +17,9 @@ import com.squareup.picasso.Picasso; ...@@ -17,6 +17,9 @@ import com.squareup.picasso.Picasso;
import java.util.List; import java.util.List;
/**
* Adaptor class for my posts
*/
public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHolder> { public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHolder> {
private Context mcontext; private Context mcontext;
private List<CreateFoundObject> mUploads; private List<CreateFoundObject> mUploads;
...@@ -27,6 +30,12 @@ public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHo ...@@ -27,6 +30,12 @@ public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHo
mUploads=uploads; mUploads=uploads;
} }
/**
* Creates view holder for adapter class
* @param parent default parent
* @param viewType type
* @return
*/
@NonNull @NonNull
@Override @Override
public MyPostsAdaptor.myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public MyPostsAdaptor.myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
...@@ -34,6 +43,11 @@ public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHo ...@@ -34,6 +43,11 @@ public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHo
return new myViewHolder(v); return new myViewHolder(v);
} }
/**
* Sets the image uri onto the view
* @param holder image holder view layout
* @param position position of image
*/
@Override @Override
public void onBindViewHolder(@NonNull MyPostsAdaptor.myViewHolder holder, int position) { public void onBindViewHolder(@NonNull MyPostsAdaptor.myViewHolder holder, int position) {
CreateFoundObject current_post = mUploads.get(position); CreateFoundObject current_post = mUploads.get(position);
...@@ -44,11 +58,18 @@ public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHo ...@@ -44,11 +58,18 @@ public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHo
.into(holder.imageView); .into(holder.imageView);
} }
/**
* Gets the count of total data /objects
* @return count value
*/
@Override @Override
public int getItemCount() { public int getItemCount() {
return mUploads.size(); return mUploads.size();
} }
/**
* Creates recycler view for viewing item image and the title
*/
public class myViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, public class myViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,
View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener{ View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener{
...@@ -75,7 +96,12 @@ public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHo ...@@ -75,7 +96,12 @@ public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHo
} }
/**
* Menu that comes up when user right clicks image
* @param menu menu item default
* @param v view default
* @param menuInfo menu default
*/
@Override @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Select Action"); menu.setHeaderTitle("Select Action");
...@@ -86,6 +112,11 @@ public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHo ...@@ -86,6 +112,11 @@ public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHo
delete.setOnMenuItemClickListener(this); delete.setOnMenuItemClickListener(this);
} }
/**
* Method executed when user long clicks item
* @param item
* @return
*/
@Override @Override
public boolean onMenuItemClick(MenuItem item) { public boolean onMenuItemClick(MenuItem item) {
if (mListener != null) { if (mListener != null) {
...@@ -106,15 +137,33 @@ public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHo ...@@ -106,15 +137,33 @@ public class MyPostsAdaptor extends RecyclerView.Adapter<MyPostsAdaptor.myViewHo
} }
} }
public interface OnItemClickListener { /**
void onItemClick(int position); * Implements item on click methods on the recycler view
*/
public interface OnItemClickListener {
/**
* Executed when item is clicked once
* @param position position of item on the screen
*/
void onItemClick(int position);
/**
* Executed when user clicks edit option
* @param position position of item on the screen
*/
void oneditClick(int position); void oneditClick(int position);
/**
* Executed when user clicks delete option
* @param position position of item on the screen
*/
void onDeleteClick(int position); void onDeleteClick(int position);
} }
public void setOnItemClickListener(OnItemClickListener listener) { /**
* Declaration for on click listener
* @param listener listener
*/
public void setOnItemClickListener(OnItemClickListener listener) {
mListener = listener; mListener = listener;
} }
} }
package com.example.instilostandfound; package com.example.instilostandfound;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.gms.tasks.OnSuccessListener; import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.DatabaseReference;
...@@ -27,6 +24,9 @@ import java.io.Serializable; ...@@ -27,6 +24,9 @@ import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
/**
* Activity that displays all found items for the current user
*/
public class MyPostsFoundRV extends AppCompatActivity implements MyPostsAdaptor.OnItemClickListener,Serializable { public class MyPostsFoundRV extends AppCompatActivity implements MyPostsAdaptor.OnItemClickListener,Serializable {
private RecyclerView mrecyclerView; private RecyclerView mrecyclerView;
private MyPostsAdaptor mAdaptor; private MyPostsAdaptor mAdaptor;
...@@ -37,7 +37,10 @@ public class MyPostsFoundRV extends AppCompatActivity implements MyPostsAdaptor. ...@@ -37,7 +37,10 @@ public class MyPostsFoundRV extends AppCompatActivity implements MyPostsAdaptor.
private String username =null; private String username =null;
/**
* Populates the view based on filter values via shared preferences
* @param savedInstanceState Current state
*/
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -79,6 +82,11 @@ public class MyPostsFoundRV extends AppCompatActivity implements MyPostsAdaptor. ...@@ -79,6 +82,11 @@ public class MyPostsFoundRV extends AppCompatActivity implements MyPostsAdaptor.
} }
}); });
} }
/**
* Method to open the item details activity
* @param position Position of the item on the screen
*/
@Override @Override
public void onItemClick(int position) { public void onItemClick(int position) {
Log.v("position =",String.valueOf(position)); Log.v("position =",String.valueOf(position));
...@@ -91,6 +99,10 @@ public class MyPostsFoundRV extends AppCompatActivity implements MyPostsAdaptor. ...@@ -91,6 +99,10 @@ public class MyPostsFoundRV extends AppCompatActivity implements MyPostsAdaptor.
startActivity(intent); startActivity(intent);
} }
/**
* Method to open item edit activity
* @param position Position of the item on the screen
*/
@Override @Override
public void oneditClick(int position) { public void oneditClick(int position) {
Log.v("position =",String.valueOf(position)); Log.v("position =",String.valueOf(position));
...@@ -102,7 +114,10 @@ public class MyPostsFoundRV extends AppCompatActivity implements MyPostsAdaptor. ...@@ -102,7 +114,10 @@ public class MyPostsFoundRV extends AppCompatActivity implements MyPostsAdaptor.
intent.putExtra("username",username); intent.putExtra("username",username);
startActivity(intent); startActivity(intent);
} }
/**
* Method to delete item
* @param position Position of the item on the screen
*/
@Override @Override
public void onDeleteClick(int position) { public void onDeleteClick(int position) {
Log.v("position =",String.valueOf(position)); Log.v("position =",String.valueOf(position));
......
...@@ -26,6 +26,9 @@ import com.google.firebase.storage.StorageReference; ...@@ -26,6 +26,9 @@ import com.google.firebase.storage.StorageReference;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
/**
* Activity that displays all lost items for the current user
*/
public class MyPostsLostRV extends AppCompatActivity implements MyPostsAdaptor.OnItemClickListener,Serializable { public class MyPostsLostRV extends AppCompatActivity implements MyPostsAdaptor.OnItemClickListener,Serializable {
private RecyclerView mrecyclerView; private RecyclerView mrecyclerView;
...@@ -37,7 +40,10 @@ public class MyPostsLostRV extends AppCompatActivity implements MyPostsAdaptor.O ...@@ -37,7 +40,10 @@ public class MyPostsLostRV extends AppCompatActivity implements MyPostsAdaptor.O
private String username =null; private String username =null;
/**
* Populates the view based on filter values via shared preferences
* @param savedInstanceState Current state
*/
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -79,6 +85,10 @@ public class MyPostsLostRV extends AppCompatActivity implements MyPostsAdaptor.O ...@@ -79,6 +85,10 @@ public class MyPostsLostRV extends AppCompatActivity implements MyPostsAdaptor.O
} }
}); });
} }
/**
* Method to open the item details activity
* @param position Position of the item on the screen
*/
@Override @Override
public void onItemClick(int position) { public void onItemClick(int position) {
Log.v("position =",String.valueOf(position)); Log.v("position =",String.valueOf(position));
...@@ -90,7 +100,10 @@ public class MyPostsLostRV extends AppCompatActivity implements MyPostsAdaptor.O ...@@ -90,7 +100,10 @@ public class MyPostsLostRV extends AppCompatActivity implements MyPostsAdaptor.O
intent.putExtra("username",username); intent.putExtra("username",username);
startActivity(intent); startActivity(intent);
} }
/**
* Method to open item edit activity
* @param position Position of the item on the screen
*/
@Override @Override
public void oneditClick(int position) { public void oneditClick(int position) {
Log.v("position =",String.valueOf(position)); Log.v("position =",String.valueOf(position));
...@@ -102,7 +115,10 @@ public class MyPostsLostRV extends AppCompatActivity implements MyPostsAdaptor.O ...@@ -102,7 +115,10 @@ public class MyPostsLostRV extends AppCompatActivity implements MyPostsAdaptor.O
intent.putExtra("username",username); intent.putExtra("username",username);
startActivity(intent); startActivity(intent);
} }
/**
* Method to delete item
* @param position Position of the item on the screen
*/
@Override @Override
public void onDeleteClick(int position) { public void onDeleteClick(int position) {
Log.v("position =",String.valueOf(position)); Log.v("position =",String.valueOf(position));
......
package com.example.instilostandfound; package com.example.instilostandfound;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBarDrawerToggle; import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
...@@ -7,19 +13,19 @@ import androidx.appcompat.widget.Toolbar; ...@@ -7,19 +13,19 @@ import androidx.appcompat.widget.Toolbar;
import androidx.core.view.GravityCompat; import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout; import androidx.drawerlayout.widget.DrawerLayout;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.material.navigation.NavigationView; import com.google.android.material.navigation.NavigationView;
/**
* Home activity to navigate news feed and other activity screens
*/
public class Navigation extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, View.OnClickListener { public class Navigation extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, View.OnClickListener {
private String username = null; private String username = null;
private DrawerLayout drawerLayout; private DrawerLayout drawerLayout;
/**
* Method for implementing drawer layout for navigation
* @param savedInstanceState current instance
*/
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -46,11 +52,11 @@ public class Navigation extends AppCompatActivity implements NavigationView.OnNa ...@@ -46,11 +52,11 @@ public class Navigation extends AppCompatActivity implements NavigationView.OnNa
drawerLayout.addDrawerListener(navigation_toggle); drawerLayout.addDrawerListener(navigation_toggle);
navigation_toggle.syncState(); navigation_toggle.syncState();
/* if(savedInstanceState==null){
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new MainActivity()).commit();
}*/
} }
/**
* Close and open navigation drawer on back pressed
*/
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)) { if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
...@@ -59,6 +65,11 @@ public class Navigation extends AppCompatActivity implements NavigationView.OnNa ...@@ -59,6 +65,11 @@ public class Navigation extends AppCompatActivity implements NavigationView.OnNa
super.onBackPressed(); super.onBackPressed();
} }
/**
* Method to migrate to other activities based on selection of menu
* @param menuItem the list of menu items on navigation drawer
* @return
*/
@Override @Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) { public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch ((menuItem.getItemId())) { switch ((menuItem.getItemId())) {
...@@ -93,7 +104,10 @@ public class Navigation extends AppCompatActivity implements NavigationView.OnNa ...@@ -93,7 +104,10 @@ public class Navigation extends AppCompatActivity implements NavigationView.OnNa
} }
/**
* On click methods for news feed for lost and found items
* @param v view layout
*/
@Override @Override
public void onClick(View v) { public void onClick(View v) {
switch (v.getId()){ switch (v.getId()){
......
...@@ -8,19 +8,31 @@ import android.net.ConnectivityManager; ...@@ -8,19 +8,31 @@ import android.net.ConnectivityManager;
import android.net.NetworkInfo; import android.net.NetworkInfo;
import android.provider.Settings; import android.provider.Settings;
/**
* Class that contains various methods for network connection checking and displays messages accordingly
*/
public class NetworkConnection { public class NetworkConnection {
public static final String ERR_DIALOG_TITLE = "No internet connection detected !"; public static final String ERR_DIALOG_TITLE = "No internet connection detected !";
private static final String ERR_DIALOG_MSG = "Please check your device's network settings."; private static final String ERR_DIALOG_MSG = "Please check your device's network settings.";
private static final String ERR_DIALOG_POSITIVE_BTN = "Settings"; private static final String ERR_DIALOG_POSITIVE_BTN = "Settings";
private static final String ERR_DIALOG_NEGATIVE_BTN = "Dismiss"; private static final String ERR_DIALOG_NEGATIVE_BTN = "Dismiss";
/**
* Check whether device is connected to internet
* @param context the class object
* @return true or false value
*/
public static boolean isConnectedToInternet(Context context) { public static boolean isConnectedToInternet(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnectedOrConnecting(); return networkInfo != null && networkInfo.isConnectedOrConnecting();
} }
/**
* Check whether devide is connected to wifi
* @param context the class object
* @return true or false value
*/
public static boolean isConnectedToWifi(Context context) { public static boolean isConnectedToWifi(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
...@@ -29,7 +41,11 @@ public class NetworkConnection { ...@@ -29,7 +41,11 @@ public class NetworkConnection {
networkInfo.getType() == ConnectivityManager.TYPE_WIFI; networkInfo.getType() == ConnectivityManager.TYPE_WIFI;
} }
/**
* Check whether device is connected to internet via mobile network
* @param context the class object
* @return true or false value
*/
public static boolean isConnectedToMobileNetwork(Context context) { public static boolean isConnectedToMobileNetwork(Context context) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
...@@ -38,6 +54,10 @@ public class NetworkConnection { ...@@ -38,6 +54,10 @@ public class NetworkConnection {
networkInfo.getType() == ConnectivityManager.TYPE_MOBILE; networkInfo.getType() == ConnectivityManager.TYPE_MOBILE;
} }
/**
* Method that displays dialog in case no internet is available
* @param context class object
*/
public static void showNoInternetAvailableErrorDialog(final Context context) { public static void showNoInternetAvailableErrorDialog(final Context context) {
new AlertDialog.Builder(context) new AlertDialog.Builder(context)
.setTitle(ERR_DIALOG_TITLE) .setTitle(ERR_DIALOG_TITLE)
......
package com.example.instilostandfound; package com.example.instilostandfound;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.MenuItemCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
...@@ -18,20 +10,28 @@ import android.view.MenuItem; ...@@ -18,20 +10,28 @@ import android.view.MenuItem;
import android.widget.SearchView; import android.widget.SearchView;
import android.widget.Toast; import android.widget.Toast;
import com.google.android.gms.tasks.OnSuccessListener; import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.MenuItemCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener; import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
/**
* Activity displaying the news feed of found items
*/
public class NewsFeedFound extends AppCompatActivity implements NewsfeedAdaptor.OnItemClickListener, Serializable { public class NewsFeedFound extends AppCompatActivity implements NewsfeedAdaptor.OnItemClickListener, Serializable {
private RecyclerView mrecyclerView; private RecyclerView mrecyclerView;
private NewsfeedAdaptor mAdaptor; private NewsfeedAdaptor mAdaptor;
...@@ -41,7 +41,10 @@ public class NewsFeedFound extends AppCompatActivity implements NewsfeedAdaptor. ...@@ -41,7 +41,10 @@ public class NewsFeedFound extends AppCompatActivity implements NewsfeedAdaptor.
private FirebaseStorage mStorage; private FirebaseStorage mStorage;
private List<CreateFoundObject> mPosts; private List<CreateFoundObject> mPosts;
private String username =null; private String username =null;
/**
* Displays the found items based on applied category filter
* @param savedInstanceState
*/
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -87,12 +90,15 @@ public class NewsFeedFound extends AppCompatActivity implements NewsfeedAdaptor. ...@@ -87,12 +90,15 @@ public class NewsFeedFound extends AppCompatActivity implements NewsfeedAdaptor.
} }
}); });
mLayoutManager = new LinearLayoutManager(this); mLayoutManager = new LinearLayoutManager(this);
//this will load the items from bottom means newest first
mLayoutManager.setReverseLayout(true); mLayoutManager.setReverseLayout(true);
mLayoutManager.setStackFromEnd(true); mLayoutManager.setStackFromEnd(true);
} }
/**
* Displays the details of the item and the claim button
* @param position position of the item on the screen
*/
@Override @Override
public void onItemClick(int position) { public void onItemClick(int position) {
Log.v("position =",String.valueOf(position)); Log.v("position =",String.valueOf(position));
...@@ -106,7 +112,11 @@ public class NewsFeedFound extends AppCompatActivity implements NewsfeedAdaptor. ...@@ -106,7 +112,11 @@ public class NewsFeedFound extends AppCompatActivity implements NewsfeedAdaptor.
} }
/**
* Create filter and search options for the user
* @param menu menu items
* @return
*/
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
//inflate the menu; this adds items to the action bar if it present //inflate the menu; this adds items to the action bar if it present
...@@ -143,7 +153,9 @@ public class NewsFeedFound extends AppCompatActivity implements NewsfeedAdaptor. ...@@ -143,7 +153,9 @@ public class NewsFeedFound extends AppCompatActivity implements NewsfeedAdaptor.
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
/**
* Displays the categories via which user can sort items
*/
private void showSortDialog() { private void showSortDialog() {
//options to display in dialog //options to display in dialog
final String[] sortOptions = {"Others","Electronics", "Documents", "Clothes","Furniture","Accessories"}; final String[] sortOptions = {"Others","Electronics", "Documents", "Clothes","Furniture","Accessories"};
...@@ -178,8 +190,6 @@ public class NewsFeedFound extends AppCompatActivity implements NewsfeedAdaptor. ...@@ -178,8 +190,6 @@ public class NewsFeedFound extends AppCompatActivity implements NewsfeedAdaptor.
builder.show(); builder.show();
} }
} }
package com.example.instilostandfound; package com.example.instilostandfound;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.MenuItemCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences; import android.content.SharedPreferences;
...@@ -18,20 +10,28 @@ import android.view.MenuItem; ...@@ -18,20 +10,28 @@ import android.view.MenuItem;
import android.widget.SearchView; import android.widget.SearchView;
import android.widget.Toast; import android.widget.Toast;
import com.google.android.gms.tasks.OnSuccessListener; import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.MenuItemCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.Query;
import com.google.firebase.database.ValueEventListener; import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
/**
* Activity displaying the news feed of lost items
*/
public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.OnItemClickListener, Serializable { public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.OnItemClickListener, Serializable {
private RecyclerView mrecyclerView; private RecyclerView mrecyclerView;
private NewsfeedAdaptor mAdaptor; private NewsfeedAdaptor mAdaptor;
...@@ -42,6 +42,10 @@ public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.O ...@@ -42,6 +42,10 @@ public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.O
private List<CreateFoundObject> mPosts; private List<CreateFoundObject> mPosts;
private String username =null; private String username =null;
/**
* Displays the lost items based on applied category filter
* @param savedInstanceState
*/
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
...@@ -56,14 +60,11 @@ public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.O ...@@ -56,14 +60,11 @@ public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.O
mDatabaseRef = FirebaseDatabase.getInstance().getReference("LostData"); mDatabaseRef = FirebaseDatabase.getInstance().getReference("LostData");
mStorage = FirebaseStorage.getInstance(); mStorage = FirebaseStorage.getInstance();
//Query usernamequery = mDatabaseRef.orderByChild("ldap").equalTo((username+"@iitb.ac.in").toLowerCase());
//Log.v("query",usernamequery.toString());
ActionBar actionBar = getSupportActionBar(); ActionBar actionBar = getSupportActionBar();
//set title
mSharedPref = getSharedPreferences("SortSettings", MODE_PRIVATE); mSharedPref = getSharedPreferences("SortSettings", MODE_PRIVATE);
String mSorting = mSharedPref.getString("Sort", "Others");//where if no settingsis selected newest will be default String mSorting = mSharedPref.getString("Sort", "Others");//where if no settingsis selected newest will be default
//if (mSorting.equals("newest")) {
mDatabaseRef.orderByChild("mCategory").equalTo(mSorting).addValueEventListener(new ValueEventListener() { mDatabaseRef.orderByChild("mCategory").equalTo(mSorting).addValueEventListener(new ValueEventListener() {
@Override @Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) { public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
...@@ -93,6 +94,11 @@ public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.O ...@@ -93,6 +94,11 @@ public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.O
mLayoutManager.setStackFromEnd(true); mLayoutManager.setStackFromEnd(true);
} }
/**
* Displays the details of the item and the claim button
* @param position position of the item on the screen
*/
@Override @Override
public void onItemClick(int position) { public void onItemClick(int position) {
Log.v("position =",String.valueOf(position)); Log.v("position =",String.valueOf(position));
...@@ -105,6 +111,11 @@ public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.O ...@@ -105,6 +111,11 @@ public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.O
startActivity(intent); startActivity(intent);
} }
/**
* Create filter and search options for the user
* @param menu menu items
* @return
*/
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
//inflate the menu; this adds items to the action bar if it present //inflate the menu; this adds items to the action bar if it present
...@@ -142,6 +153,9 @@ public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.O ...@@ -142,6 +153,9 @@ public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.O
return super.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);
} }
/**
* Displays the categories via which user can sort items
*/
private void showSortDialog() { private void showSortDialog() {
//options to display in dialog //options to display in dialog
final String[] sortOptions = {"Others","Electronics", "Documents", "Clothes","Furniture","Accessories"}; final String[] sortOptions = {"Others","Electronics", "Documents", "Clothes","Furniture","Accessories"};
...@@ -177,7 +191,6 @@ public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.O ...@@ -177,7 +191,6 @@ public class NewsFeedLost extends AppCompatActivity implements NewsfeedAdaptor.O
} }
} }
package com.example.instilostandfound; package com.example.instilostandfound;
import android.content.Context; import android.content.Context;
import android.view.ContextMenu;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageView; import android.widget.ImageView;
...@@ -17,6 +14,9 @@ import com.squareup.picasso.Picasso; ...@@ -17,6 +14,9 @@ import com.squareup.picasso.Picasso;
import java.util.List; import java.util.List;
/**
* Adapter class for news feed
*/
public class NewsfeedAdaptor extends RecyclerView.Adapter<NewsfeedAdaptor.myViewHolder> { public class NewsfeedAdaptor extends RecyclerView.Adapter<NewsfeedAdaptor.myViewHolder> {
private Context mcontext; private Context mcontext;
private List<CreateFoundObject> mUploads; private List<CreateFoundObject> mUploads;
...@@ -26,14 +26,23 @@ public class NewsfeedAdaptor extends RecyclerView.Adapter<NewsfeedAdaptor.myView ...@@ -26,14 +26,23 @@ public class NewsfeedAdaptor extends RecyclerView.Adapter<NewsfeedAdaptor.myView
mcontext = context; mcontext = context;
mUploads=uploads; mUploads=uploads;
} }
/**
* Creates view holder for adapter class
* @param parent default parent
* @param viewType type
* @return
*/
@NonNull @NonNull
@Override @Override
public NewsfeedAdaptor.myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public NewsfeedAdaptor.myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(mcontext).inflate(R.layout.list_item, parent, false); View v = LayoutInflater.from(mcontext).inflate(R.layout.list_item, parent, false);
return new myViewHolder(v); return new myViewHolder(v);
} }
/**
* Sets the image uri onto the view
* @param holder image holder view layout
* @param position position of image
*/
@Override @Override
public void onBindViewHolder(@NonNull NewsfeedAdaptor.myViewHolder holder, int position) { public void onBindViewHolder(@NonNull NewsfeedAdaptor.myViewHolder holder, int position) {
CreateFoundObject current_post = mUploads.get(position); CreateFoundObject current_post = mUploads.get(position);
...@@ -43,12 +52,17 @@ public class NewsfeedAdaptor extends RecyclerView.Adapter<NewsfeedAdaptor.myView ...@@ -43,12 +52,17 @@ public class NewsfeedAdaptor extends RecyclerView.Adapter<NewsfeedAdaptor.myView
.centerCrop() .centerCrop()
.into(holder.imageView); .into(holder.imageView);
} }
/**
* Gets the count of total data /objects
* @return count value
*/
@Override @Override
public int getItemCount() { public int getItemCount() {
return mUploads.size(); return mUploads.size();
} }
/**
* Creates recycler view for viewing item image and the title
*/
public class myViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ public class myViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView textViewname; public TextView textViewname;
...@@ -75,10 +89,25 @@ public class NewsfeedAdaptor extends RecyclerView.Adapter<NewsfeedAdaptor.myView ...@@ -75,10 +89,25 @@ public class NewsfeedAdaptor extends RecyclerView.Adapter<NewsfeedAdaptor.myView
} }
/**
* Implements item on click methods on the recycler view
*/
public interface OnItemClickListener { public interface OnItemClickListener {
/**
* Executed when item is clicked once
* @param position position of item on the screen
*/
void onItemClick(int position); void onItemClick(int position);
}
/**
* Executed when user clicks edit option
* @param position position of item on the screen
*/
}
/**
* Declaration for on click listener
* @param listener listener
*/
public void setOnItemClickListener(OnItemClickListener listener) { public void setOnItemClickListener(OnItemClickListener listener) {
mListener = listener; mListener = listener;
} }
......
package com.example.instilostandfound; package com.example.instilostandfound;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
/**
* Activity that redireccts user's posts to lost or found item activity
*/
public class RedirectMyPosts extends AppCompatActivity implements View.OnClickListener { public class RedirectMyPosts extends AppCompatActivity implements View.OnClickListener {
String username; String username;
@Override @Override
...@@ -19,6 +22,10 @@ public class RedirectMyPosts extends AppCompatActivity implements View.OnClickLi ...@@ -19,6 +22,10 @@ public class RedirectMyPosts extends AppCompatActivity implements View.OnClickLi
findViewById(R.id.found_button).setOnClickListener(this); findViewById(R.id.found_button).setOnClickListener(this);
} }
/**
* Redirection to appropriate activities based on button click
* @param v lost/found buttons
*/
@Override @Override
public void onClick(View v) { public void onClick(View v) {
switch (v.getId()){ switch (v.getId()){
......
...@@ -16,6 +16,9 @@ import javax.mail.Transport; ...@@ -16,6 +16,9 @@ import javax.mail.Transport;
import javax.mail.internet.InternetAddress; import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMessage;
/**
* Class to build the email framework parameters
*/
public class SendMail extends AsyncTask<Void, Void, Void> { public class SendMail extends AsyncTask<Void, Void, Void> {
private Context context; private Context context;
...@@ -25,6 +28,13 @@ public class SendMail extends AsyncTask<Void, Void, Void> { ...@@ -25,6 +28,13 @@ public class SendMail extends AsyncTask<Void, Void, Void> {
private String message; private String message;
private ProgressDialog progressDialog; private ProgressDialog progressDialog;
/**
* Constructor to initialise members
* @param context calling class
* @param email email of the reciever
* @param subject subject of the email
* @param message Content of the email
*/
public SendMail(Context context, String email, String subject, String message) { public SendMail(Context context, String email, String subject, String message) {
this.context = context; this.context = context;
...@@ -33,6 +43,9 @@ public class SendMail extends AsyncTask<Void, Void, Void> { ...@@ -33,6 +43,9 @@ public class SendMail extends AsyncTask<Void, Void, Void> {
this.message = message; this.message = message;
} }
/**
* Shows progress bar before sending the mail
*/
@Override @Override
protected void onPreExecute() { protected void onPreExecute() {
super.onPreExecute(); super.onPreExecute();
...@@ -40,6 +53,10 @@ public class SendMail extends AsyncTask<Void, Void, Void> { ...@@ -40,6 +53,10 @@ public class SendMail extends AsyncTask<Void, Void, Void> {
progressDialog = ProgressDialog.show(context, "Sending message", "Please wait...", false, false); progressDialog = ProgressDialog.show(context, "Sending message", "Please wait...", false, false);
} }
/**
* Notifies user after email is sent
* @param aVoid
*/
@Override @Override
protected void onPostExecute(Void aVoid) { protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid); super.onPostExecute(aVoid);
...@@ -52,6 +69,11 @@ public class SendMail extends AsyncTask<Void, Void, Void> { ...@@ -52,6 +69,11 @@ public class SendMail extends AsyncTask<Void, Void, Void> {
context.startActivity(intent); context.startActivity(intent);
} }
/**
* Background process for setting up email parameters (gmail used here)
* @param params list of parameters
* @return null parameter
*/
@Override @Override
protected Void doInBackground(Void... params) { protected Void doInBackground(Void... params) {
Properties props = new Properties(); Properties props = new Properties();
......
package com.example.instilostandfound; package com.example.instilostandfound;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
...@@ -19,8 +10,14 @@ import android.widget.Button; ...@@ -19,8 +10,14 @@ import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
/**
* Fragment class to send message to user
*/
public class emailFragment extends Fragment implements View.OnClickListener { public class emailFragment extends Fragment implements View.OnClickListener {
private EditText editTextMessage; private EditText editTextMessage;
private Button buttonSend; private Button buttonSend;
...@@ -29,6 +26,14 @@ public class emailFragment extends Fragment implements View.OnClickListener { ...@@ -29,6 +26,14 @@ public class emailFragment extends Fragment implements View.OnClickListener {
private String recieverid; private String recieverid;
private String itemname; private String itemname;
CreateFoundObject objectfound; CreateFoundObject objectfound;
/**
* On create method when fragement is generated
* @param inflater default param
* @param container default param
* @param savedInstanceState default param
* @return
*/
@Nullable @Nullable
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
...@@ -42,23 +47,28 @@ public class emailFragment extends Fragment implements View.OnClickListener { ...@@ -42,23 +47,28 @@ public class emailFragment extends Fragment implements View.OnClickListener {
senderid = bundle.getString("username"); senderid = bundle.getString("username");
recieverid = bundle.getString("recievername"); recieverid = bundle.getString("recievername");
itemname = bundle.getString("itemname"); itemname = bundle.getString("itemname");
// bName = bundle.getString("bName");
// pName = bundle.getString("pName");
} }
return v; return v;
} }
/**
* Method to send email with corresponding message
*/
private void sendEmail() { private void sendEmail() {
String email = recieverid ; String email = recieverid ;
String subject = "Regarding posted item in Lost and Found App " + itemname; String subject = "Regarding posted item in Lost and Found App " + itemname;
String autoMsg = "\n\nThis is an auto generated email. Please do not reply to this email."; String autoMsg = "\n\nThis is an auto generated email. Please do not reply to this email.";
String message = editTextMessage.getText().toString().trim() + "\n\nsent by ldap user : " + username +"@iitb.ac.in" + autoMsg; String message = editTextMessage.getText().toString().trim() + "\n\nsent by ldap user : " + username + autoMsg;
SendMail sm = new SendMail(getActivity(), email, subject, message); SendMail sm = new SendMail(getActivity(), email, subject, message);
sm.execute(); sm.execute();
} }
/**
* On click method for sending the message button
* @param v Claim button
*/
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if(editTextMessage.getText().toString().length() < 1){ if(editTextMessage.getText().toString().length() < 1){
...@@ -88,7 +98,9 @@ public class emailFragment extends Fragment implements View.OnClickListener { ...@@ -88,7 +98,9 @@ public class emailFragment extends Fragment implements View.OnClickListener {
// dialog.dismiss(); // dialog.dismiss();
} }
}); });
/**
* Alert dialog to confirm if user wants to send email or not
*/
AlertDialog ad = builder.create(); AlertDialog ad = builder.create();
ad.show(); ad.show();
......
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MapsActivity">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Select"
android:id="@+id/select_location"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:background="@color/colorPrimary"
/>
</fragment>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment