diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml deleted file mode 100644 index 2a9c5e0..0000000 --- a/.idea/assetWizardSettings.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index b0c7b20..e0d5b93 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -29,7 +29,7 @@ - + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 7b30fd2..e0d9e1e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,4 +1,5 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' android { compileSdkVersion 28 @@ -6,8 +7,8 @@ android { applicationId "h_mal.appttude.com.driver" minSdkVersion 24 targetSdkVersion 28 - versionCode 1 - versionName "1.0" + versionCode 5 + versionName "1.5" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { @@ -22,17 +23,24 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:design:28.0.0' - implementation 'com.android.support.constraint:constraint-layout:1.1.3' - implementation 'com.android.support:cardview-v7:26.1.0' + implementation 'com.android.support:cardview-v7:28.0.0' implementation 'com.android.support:support-v4:28.0.0' + implementation 'com.android.support:exifinterface:28.0.0' + implementation 'com.google.android.gms:play-services-auth:15.0.1' implementation 'com.google.firebase:firebase-core:16.0.1' implementation 'com.google.firebase:firebase-auth:16.0.1' implementation 'com.google.firebase:firebase-storage:16.0.1' implementation 'com.google.firebase:firebase-database:16.0.1' + implementation 'com.github.chrisbanes:PhotoView:2.1.0' implementation 'com.squareup.picasso:picasso:2.71828' + implementation 'com.google.code.gson:gson:2.3.1' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' + androidTestImplementation 'com.android.support.test:rules:1.0.2' } apply plugin: 'com.google.gms.google-services' +repositories { + mavenCentral() +} diff --git a/app/src/androidTest/java/h_mal/appttude/com/driver/ExampleInstrumentedTest.java b/app/src/androidTest/java/h_mal/appttude/com/driver/ExampleInstrumentedTest.java index fd25303..750d904 100644 --- a/app/src/androidTest/java/h_mal/appttude/com/driver/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/h_mal/appttude/com/driver/ExampleInstrumentedTest.java @@ -3,7 +3,10 @@ package h_mal.appttude.com.driver; import android.content.Context; import android.support.test.InstrumentationRegistry; import android.support.test.runner.AndroidJUnit4; +import android.view.View; +import org.junit.Before; +import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; @@ -23,4 +26,5 @@ public class ExampleInstrumentedTest { assertEquals("h_mal.appttude.com.driver", appContext.getPackageName()); } + } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 99da1a0..3dbab83 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,7 +9,7 @@ - + - @@ -36,9 +35,10 @@ android:theme="@style/AppTheme.NoActionBar"> - + + + android:resource="@xml/file_paths" /> + + \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.java b/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.java new file mode 100644 index 0000000..7aca2d6 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.java @@ -0,0 +1,293 @@ +package h_mal.appttude.com.driver.Archive; + +import android.content.Context; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.BaseAdapter; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.squareup.picasso.Picasso; + +import java.text.ParseException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import h_mal.appttude.com.driver.Global.ImageSwiperClass; +import h_mal.appttude.com.driver.Objects.ArchiveObject; +import h_mal.appttude.com.driver.Objects.DriverProfileObject; +import h_mal.appttude.com.driver.Objects.DriversLicenseObject; +import h_mal.appttude.com.driver.Objects.InsuranceObject; +import h_mal.appttude.com.driver.Objects.LogbookObject; +import h_mal.appttude.com.driver.Objects.MotObject; +import h_mal.appttude.com.driver.Objects.PrivateHireObject; +import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject; +import h_mal.appttude.com.driver.Objects.VehicleProfileObject; +import h_mal.appttude.com.driver.Objects.WholeObject.VehicleProfile; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.FirebaseClass.*; +import static h_mal.appttude.com.driver.MainActivity.loadImage; +import static h_mal.appttude.com.driver.MainActivity.printObjectAsJson; +import static h_mal.appttude.com.driver.MainActivity.setAsDateTime; + +public class ArchiveObjectListAdapter extends BaseAdapter { + + private static String TAG = "ArchiveObjectListAdapte"; + + ArchiveObject archiveObject; + Context context; + String archiveString; + + int size; + String[] mKeys; + + private TextView dateArchivedText; + + public ArchiveObjectListAdapter(ArchiveObject archiveObject, Context context, String archiveString) { + this.archiveObject = archiveObject; + this.context = context; + this.archiveString = archiveString; + + switch (archiveString){ + case PRIVATE_HIRE_FIREBASE: + size = archiveObject.getPrivate_hire().size(); + mKeys = archiveObject.getPrivate_hire().keySet().toArray(new String[archiveObject.getPrivate_hire().size()]); + break; + case DRIVERS_LICENSE_FIREBASE: + size = archiveObject.getDriver_license().size(); + mKeys = archiveObject.getDriver_license().keySet().toArray(new String[archiveObject.getDriver_license().size()]); + break; + case VEHICLE_DETAILS_FIREBASE: + size = archiveObject.getVehicle_details().size(); + mKeys = archiveObject.getVehicle_details().keySet().toArray(new String[archiveObject.getVehicle_details().size()]); + break; + case MOT_FIREBASE: + size = archiveObject.getMot_details().size(); + mKeys = archiveObject.getMot_details().keySet().toArray(new String[archiveObject.getMot_details().size()]); + break; + case INSURANCE_FIREBASE: + size = archiveObject.getInsurance_details().size(); + mKeys = archiveObject.getInsurance_details().keySet().toArray(new String[archiveObject.getInsurance_details().size()]); + break; + case LOG_BOOK_FIREBASE: + size = archiveObject.getLog_book().size(); + mKeys = archiveObject.getLog_book().keySet().toArray(new String[archiveObject.getLog_book().size()]); + break; + case PRIVATE_HIRE_VEHICLE_LICENSE: + size = archiveObject.getPh_car().size(); + mKeys = archiveObject.getPh_car().keySet().toArray(new String[archiveObject.getPh_car().size()]); + break; + } + + + } + + @Override + public int getCount() { + return size; + } + + @Override + public Object getItem(int position) { + switch (archiveString){ + case PRIVATE_HIRE_FIREBASE: + return archiveObject.getPrivate_hire().get(mKeys[position]); + case DRIVERS_LICENSE_FIREBASE: + return archiveObject.getDriver_license().get(mKeys[position]); + case VEHICLE_DETAILS_FIREBASE: + return archiveObject.getVehicle_details().get(mKeys[position]); + case MOT_FIREBASE: + return archiveObject.getMot_details().get(mKeys[position]); + case INSURANCE_FIREBASE: + return archiveObject.getInsurance_details().get(mKeys[position]); + case LOG_BOOK_FIREBASE: + return archiveObject.getLog_book().get(mKeys[position]); + case PRIVATE_HIRE_VEHICLE_LICENSE: + return archiveObject.getPh_car().get(mKeys[position]); + default: + return mKeys[position]; + } + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View listItemView = convertView; + if (listItemView == null) { + if (archiveString.equals(PRIVATE_HIRE_FIREBASE) || + archiveString.equals(DRIVERS_LICENSE_FIREBASE) || + archiveString.equals(MOT_FIREBASE) || + archiveString.equals(LOG_BOOK_FIREBASE) || + archiveString.equals(PRIVATE_HIRE_VEHICLE_LICENSE)){ + + listItemView = LayoutInflater.from(context).inflate( + R.layout.archive_license_item, parent, false); + + ImageView imageView = listItemView.findViewById(R.id.image_archive); + ProgressBar progressBar = listItemView.findViewById(R.id.prog_archive); + dateArchivedText = listItemView.findViewById(R.id.date_archived); + + LinearLayout expiryHolder = listItemView.findViewById(R.id.expiry_view); + LinearLayout fieldTwo = listItemView.findViewById(R.id.field_two_view); + + TextView expiryText = listItemView.findViewById(R.id.exp_text); + TextView fiewTwoLable = listItemView.findViewById(R.id.field_two); + TextView fieldTwoText = listItemView.findViewById(R.id.field_two_text); + + switch (archiveString){ + case PRIVATE_HIRE_FIREBASE: + expiryHolder.setVisibility(View.VISIBLE); + fieldTwo.setVisibility(View.VISIBLE); + + PrivateHireObject privateHireObject = (PrivateHireObject) getItem(position); + + Picasso.get().load(privateHireObject.getPhImageString()) + .into(loadImage(progressBar,imageView)); + dateString(position); + + expiryText.setText(privateHireObject.getPhExpiry()); + fiewTwoLable.setText("Private Hire License No.:"); + fieldTwoText.setText(privateHireObject.getPhNumber()); + break; + case DRIVERS_LICENSE_FIREBASE: + expiryHolder.setVisibility(View.VISIBLE); + fieldTwo.setVisibility(View.VISIBLE); + + DriversLicenseObject driversLicenseObject = (DriversLicenseObject) getItem(position); + + Picasso.get().load(driversLicenseObject.getLicenseImageString()) + .into(loadImage(progressBar,imageView)); + dateString(position); + + expiryText.setText(driversLicenseObject.getLicenseExpiry()); + fiewTwoLable.setText("License No.:"); + fieldTwoText.setText(driversLicenseObject.getLicenseNumber()); + break; + case MOT_FIREBASE: + Log.i(TAG, "getView: MOT OBJECT"); + expiryHolder.setVisibility(View.VISIBLE); + fieldTwo.setVisibility(View.GONE); + + MotObject motObject = (MotObject) getItem(position); + + Picasso.get().load(motObject.getMotImageString()) + .into(loadImage(progressBar,imageView)); + dateString(position); + expiryText.setText(motObject.getMotExpiry()); + break; + case LOG_BOOK_FIREBASE: + expiryHolder.setVisibility(View.GONE); + fieldTwo.setVisibility(View.VISIBLE); + + LogbookObject logbookObject = (LogbookObject) getItem(position); + + Picasso.get().load(logbookObject.getPhotoString()) + .into(loadImage(progressBar,imageView)); + dateString(position); + + fiewTwoLable.setText("V5C No.:"); + fieldTwoText.setText(logbookObject.getV5cnumber()); + break; + case PRIVATE_HIRE_VEHICLE_LICENSE: + expiryHolder.setVisibility(View.VISIBLE); + fieldTwo.setVisibility(View.VISIBLE); + + PrivateHireVehicleObject privateHireVehicleObject = (PrivateHireVehicleObject) getItem(position); + + Picasso.get().load(privateHireVehicleObject.getPhCarImageString()) + .into(loadImage(progressBar,imageView)); + dateString(position); + + expiryText.setText(privateHireVehicleObject.getPhCarExpiry()); + fiewTwoLable.setText("Private Hire Vehicle License No.:"); + fieldTwoText.setText(privateHireVehicleObject.getPhCarNumber()); + break; + } + + + }else if (archiveString.equals(INSURANCE_FIREBASE)){ + listItemView = LayoutInflater.from(context).inflate( + R.layout.archive_insurance_item, parent, false); + + View holder = listItemView.findViewById(R.id.image_pager); + ImageSwiperClass swiperClass = new ImageSwiperClass(context,holder); +// swiperClass.hideDelete(); + listItemView.findViewById(R.id.delete).setVisibility(View.GONE); +// holder.findViewById(R.id.delete).setVisibility(View.INVISIBLE); + + dateArchivedText = listItemView.findViewById(R.id.date_archived); + dateString(position); + + TextView expiryText = listItemView.findViewById(R.id.exp_text); + TextView fieldTwoText = listItemView.findViewById(R.id.archive_insurer); + + InsuranceObject insuranceObject = (InsuranceObject) getItem(position); + swiperClass.reinstantiateList(insuranceObject.getPhotoStrings()); + + expiryText.setText(insuranceObject.getExpiryDate()); + fieldTwoText.setText(insuranceObject.getInsurerName()); + + }else if(archiveString.equals(VEHICLE_DETAILS_FIREBASE)){ + listItemView = LayoutInflater.from(context).inflate( + R.layout.archive_vehicle_item, parent, false); + + dateArchivedText = listItemView.findViewById(R.id.date_archived); + dateString(position); + + TextView numberPlate = listItemView.findViewById(R.id.number_plate); + TextView keeperName = listItemView.findViewById(R.id.keeper_name); + TextView keeperAddress = listItemView.findViewById(R.id.keeper_address); + TextView carText = listItemView.findViewById(R.id.car_text_arch); + TextView carColour = listItemView.findViewById(R.id.car_colour); + TextView carSeized = listItemView.findViewById(R.id.seized); + TextView startDate = listItemView.findViewById(R.id.first_date); + + VehicleProfileObject vehicleProfileObject = (VehicleProfileObject) getItem(position); + + numberPlate.setText(vehicleProfileObject.getReg()); + keeperName.setText(vehicleProfileObject.getKeeperName()); + keeperAddress.setText(vehicleProfileObject.getKeeperAddress() + "\n" +vehicleProfileObject.getKeeperPostCode()); + carText.setText(vehicleProfileObject.getMake() + " " + vehicleProfileObject.getModel()); + carColour.setText(vehicleProfileObject.getColour()); + + String s; + if (vehicleProfileObject.isSeized()){ + s = "Yes"; + }else { + s = "No"; + } + carSeized.setText(s); + + startDate.setText(vehicleProfileObject.getStartDate()); + } + + } + + return listItemView; + } + + private void dateString(int position){ + boolean success = true; + try { + dateArchivedText.setText(setAsDateTime(mKeys[position])); + } catch (ParseException e) { + e.printStackTrace(); + success = false; + }finally { + if (!success){ + dateArchivedText.setText(mKeys[position].substring(0,8)); + } + } + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/DriverLicenseFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverLicenseFragment.java similarity index 50% rename from app/src/main/java/h_mal/appttude/com/driver/DriverLicenseFragment.java rename to app/src/main/java/h_mal/appttude/com/driver/Driver/DriverLicenseFragment.java index f737679..f6afe18 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/DriverLicenseFragment.java +++ b/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverLicenseFragment.java @@ -1,9 +1,10 @@ -package h_mal.appttude.com.driver; +package h_mal.appttude.com.driver.Driver; -import android.content.Context; +import android.app.DatePickerDialog; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; @@ -15,6 +16,7 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; +import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; @@ -26,25 +28,39 @@ import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.ValueEventListener; import com.squareup.picasso.Picasso; -import h_mal.appttude.com.driver.Objects.DriversLicenseObject; -import h_mal.appttude.com.driver.Objects.PrivateHireObject; +import java.util.Calendar; -import static h_mal.appttude.com.driver.FirebaseClass.DRIVERS_LICENSE_FIREBASE; -import static h_mal.appttude.com.driver.FirebaseClass.DRIVER_FIREBASE; -import static h_mal.appttude.com.driver.FirebaseClass.PRIVATE_HIRE_FIREBASE; -import static h_mal.appttude.com.driver.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.ImageSelectorDialog.CAMERA_REQUEST; -import static h_mal.appttude.com.driver.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; +import h_mal.appttude.com.driver.Global.DateDialog; +import h_mal.appttude.com.driver.Global.FirebaseClass; +import h_mal.appttude.com.driver.Global.ImageSelectorDialog; +import h_mal.appttude.com.driver.Global.ImageSelectorResults; +import h_mal.appttude.com.driver.Objects.DriversLicenseObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.archiveClass; import static h_mal.appttude.com.driver.MainActivity.auth; import static h_mal.appttude.com.driver.MainActivity.fragmentManager; import static h_mal.appttude.com.driver.MainActivity.getDateStamp; +import static h_mal.appttude.com.driver.MainActivity.loadImage; import static h_mal.appttude.com.driver.MainActivity.mDatabase; +import static h_mal.appttude.com.driver.MainActivity.viewController; public class DriverLicenseFragment extends Fragment { private String TAG = this.getClass().getSimpleName(); private ImageView imageView; + private ProgressBar progressBar; EditText licenseNo; EditText expiry; @@ -55,10 +71,33 @@ public class DriverLicenseFragment extends Fragment { String li_numberString; String li_exprString; + DatabaseReference reference; + + DriversLicenseObject driversLicenseObject; + Boolean uploadNew; + String UID; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + uploadNew = false; + if (getArguments() != null){ + Log.i(TAG, "onCreate: args = args exist"); + if (getArguments().containsKey("user_id")){ + UID = getArguments().getString("user_id"); + }else { + UID = auth.getCurrentUser().getUid(); + } + if (getArguments().containsKey(UPLOAD_NEW)){ + uploadNew = true; + } + }else{ + UID = auth.getCurrentUser().getUid(); + } + + reference = mDatabase.child(USER_FIREBASE).child(UID) + .child(DRIVER_FIREBASE).child(DRIVERS_LICENSE_FIREBASE); } @Override @@ -68,10 +107,9 @@ public class DriverLicenseFragment extends Fragment { View view = inflater.inflate(R.layout.fragment_driver_license, container, false); imageView = view.findViewById(R.id.driversli_img); + progressBar = view.findViewById(R.id.pb_dl); - DatabaseReference reference = mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()) - .child(DRIVER_FIREBASE).child(DRIVERS_LICENSE_FIREBASE); - + viewController.progress(View.VISIBLE); reference.addListenerForSingleValueEvent(valueEventListener); TextView uploadLic = view.findViewById(R.id.upload_lic); @@ -82,8 +120,10 @@ public class DriverLicenseFragment extends Fragment { expiry.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - DateDialog dateDialog = new DateDialog(getContext()); - dateDialog.init(expiry); + + DateDialog dateDialog = new DateDialog(getContext()); + dateDialog.init(expiry); + } }); @@ -110,25 +150,37 @@ public class DriverLicenseFragment extends Fragment { if (!TextUtils.isEmpty(li_numberString) && !TextUtils.isEmpty(li_exprString)){ - if (filePath != null){ - Log.i(TAG, "onClick: new Image uploaded"); - new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ - @Override - public void processFinish(Uri output) { - Log.i(TAG, "processFinish: "); - if (output != null){ - picUri = output; - publishObject(); - fragmentManager.popBackStack(); - } + viewController.progress(View.VISIBLE); - } - }).uploadImage(DRIVERS_LICENSE_FIREBASE,DRIVERS_LICENSE_FIREBASE + getDateStamp()); - }else{ - Log.i(TAG, "onClick: pushing with same image"); - publishObject(); + if (filePath == null && picUri == null){ + Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); + viewController.progress(View.GONE); + }else { + if (filePath != null){ + Log.i(TAG, "onClick: new Image uploaded"); + new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ + @Override + public void processFinish(Uri output) { + Log.i(TAG, "processFinish: "); + if (output != null){ + picUri = output; + publishObject(); + + }else { + Toast.makeText(getContext(), getString(R.string.failed_upload), Toast.LENGTH_SHORT).show(); + viewController.progress(View.GONE); + } + + } + }).uploadImage(DRIVERS_LICENSE_FIREBASE,DRIVERS_LICENSE_FIREBASE + getDateStamp()); + }else{ + Log.i(TAG, "onClick: pushing with same image"); + publishObject(); + + } } + }else { if (TextUtils.isEmpty(li_numberString)){ licenseNo.setError("Field required"); @@ -136,7 +188,7 @@ public class DriverLicenseFragment extends Fragment { if (TextUtils.isEmpty(li_exprString)){ expiry.setError("Field required"); } - if (picUri == null){ + if (picUri == null && filePath == null){ Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show(); } } @@ -148,7 +200,7 @@ public class DriverLicenseFragment extends Fragment { ValueEventListener valueEventListener = new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - DriversLicenseObject driversLicenseObject = null; + viewController.progress(View.GONE); try{ driversLicenseObject = dataSnapshot.getValue(DriversLicenseObject.class); }catch (Exception e){ @@ -159,34 +211,50 @@ public class DriverLicenseFragment extends Fragment { li_numberString = driversLicenseObject.getLicenseNumber(); li_exprString = driversLicenseObject.getLicenseExpiry(); - licenseNo.setText(li_numberString); - expiry.setText(li_exprString); - Picasso.get() - .load(picUri) - .placeholder(R.mipmap.ic_launcher_round) - .into(imageView); + if(!uploadNew){ + licenseNo.setText(li_numberString); + expiry.setText(li_exprString); + Picasso.get() + .load(picUri) + .into(loadImage(progressBar,imageView)); + } + }else{ + Toast.makeText(getContext(), getString(R.string.failed_retrieve), Toast.LENGTH_SHORT).show(); } } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { - + viewController.progress(View.GONE); + Toast.makeText(getContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show(); + Log.e(TAG, "onCancelled: " + databaseError.getMessage()); } }; private void publishObject(){ - DriversLicenseObject driversLicenseObject = new DriversLicenseObject(picUri.toString(),li_numberString,li_exprString); + if (uploadNew){ + archiveClass.archiveRecord(UID,DRIVERS_LICENSE_FIREBASE,driversLicenseObject); + } - mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()).child(DRIVER_FIREBASE).child(DRIVERS_LICENSE_FIREBASE) - .setValue(driversLicenseObject).addOnCompleteListener(new OnCompleteListener() { + DriversLicenseObject driversLicenseObjectNew = new DriversLicenseObject(picUri.toString(),li_numberString,li_exprString); + + reference.setValue(driversLicenseObjectNew).addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + Log.i(TAG, "onComplete: publish = " + task.isSuccessful()); + approvalsClass.setStatusCode(UID,DRIVERS_LICENSE_FIREBASE+APPROVAL_CONSTANT,APPROVAL_PENDING); + fragmentManager.popBackStack(); + }else { + Toast.makeText(getContext(),R.string.unsuccessful, Toast.LENGTH_SHORT).show(); + } - Log.i(TAG, "onComplete: publish = " + task.isSuccessful()); + viewController.progress(View.GONE); } }); + } @Override @@ -209,13 +277,13 @@ public class DriverLicenseFragment extends Fragment { public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - new ImageSelectorResults(new ImageSelectorResults.FilepathResponse() { - @Override - public void processFinish(Uri output) { - filePath = output; - } - }).Results(getActivity(),requestCode, resultCode, data, - filePath,imageView); + new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data, + filePath,imageView,new ImageSelectorResults.FilepathResponse() { + @Override + public void processFinish(Uri output) { + filePath = output; + } + }); } diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverOverallFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverOverallFragment.java new file mode 100644 index 0000000..44e1a6b --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverOverallFragment.java @@ -0,0 +1,147 @@ +package h_mal.appttude.com.driver.Driver; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.support.v7.widget.CardView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.ValueEventListener; + +import h_mal.appttude.com.driver.Objects.ApprovalsObject; +import h_mal.appttude.com.driver.Objects.WholeDriverObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.archiveClass; +import static h_mal.appttude.com.driver.MainActivity.auth; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; +import static h_mal.appttude.com.driver.MainActivity.viewController; + + +public class DriverOverallFragment extends Fragment { + + CardView driverProfile; + CardView privateHire; + CardView driversLicense; + + ImageView driverApr; + ImageView privateApr ; + ImageView driversLiApr; + TextView privExp; + TextView drivLiExp; + + DatabaseReference reference; + + WholeDriverObject driverProfileObject; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + reference = mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_driver_overall, container, false); + + driverProfile = view.findViewById(R.id.driver_prof); + privateHire = view.findViewById(R.id.private_hire); + driversLicense = view.findViewById(R.id.drivers_license); + + driverApr = view.findViewById(R.id.approval_dp); + privateApr = view.findViewById(R.id.approval_ph); + driversLiApr = view.findViewById(R.id.approval_dl); + + privExp = view.findViewById(R.id.ph_button_exp); + drivLiExp = view.findViewById(R.id.dl_button_exp); + + privExp.setVisibility(View.GONE); + drivLiExp.setVisibility(View.GONE); + + viewController.progress(View.VISIBLE); + reference.addListenerForSingleValueEvent(valueEventListener); + + return view; + } + + ValueEventListener valueEventListener = new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + driverProfileObject = dataSnapshot.getValue(WholeDriverObject.class); + + if (driverProfileObject.approvalsObject != null){ + ApprovalsObject approvalsObject = driverProfileObject.getApprovalsObject(); + + driverApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getDriver_details_approval())); + privateApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getPrivate_hire_approval())); + driversLiApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getDriver_license_approval())); + } + + if (driverProfileObject.driver_profile != null){ + if (driverProfileObject.getDriver_profile().private_hire != null){ + privExp.setVisibility(View.VISIBLE); + privExp.setText("Expiry: " + driverProfileObject.getDriver_profile().getPrivate_hire().getPhExpiry()); + } + if (driverProfileObject.getDriver_profile().driver_license != null){ + drivLiExp.setVisibility(View.VISIBLE); + drivLiExp.setText("Expiry: " + driverProfileObject.getDriver_profile().getDriver_license().getLicenseExpiry()); + } + } + + driverProfile.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + executeFragment(new DriverProfileFragment()); + } + }); + + privateHire.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (driverProfileObject.driver_profile == null){ + executeFragment(new PrivateHireLicenseFragment()); + }else { + archiveClass.openDialogArchive(getContext(),driverProfileObject.getDriver_profile().getPrivate_hire() + ,new PrivateHireLicenseFragment()); + } + + } + }); + + driversLicense.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (driverProfileObject.driver_profile == null){ + executeFragment(new DriverLicenseFragment()); + }else { + archiveClass.openDialogArchive(getContext(),driverProfileObject.getDriver_profile().getDriver_license() + ,new DriverLicenseFragment()); + } + } + }); + + viewController.progress(View.GONE); + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + viewController.progress(View.GONE); + } + }; + + + +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/driverProfileFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverProfileFragment.java similarity index 60% rename from app/src/main/java/h_mal/appttude/com/driver/driverProfileFragment.java rename to app/src/main/java/h_mal/appttude/com/driver/Driver/DriverProfileFragment.java index c764dde..1ec17ea 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/driverProfileFragment.java +++ b/app/src/main/java/h_mal/appttude/com/driver/Driver/DriverProfileFragment.java @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver; +package h_mal.appttude.com.driver.Driver; import android.content.Intent; import android.net.Uri; @@ -13,60 +13,76 @@ import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; +import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.OnFailureListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.auth.UserProfileChangeRequest; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.ValueEventListener; import com.squareup.picasso.Picasso; +import h_mal.appttude.com.driver.Global.DateDialog; +import h_mal.appttude.com.driver.Global.FirebaseClass; +import h_mal.appttude.com.driver.Global.ImageSelectorDialog; +import h_mal.appttude.com.driver.Global.ImageSelectorResults; +import h_mal.appttude.com.driver.Global.ViewController; import h_mal.appttude.com.driver.Objects.DriverProfileObject; import h_mal.appttude.com.driver.Objects.DriversLicenseObject; import h_mal.appttude.com.driver.Objects.PrivateHireObject; +import h_mal.appttude.com.driver.Objects.UserObject; +import h_mal.appttude.com.driver.R; -import static h_mal.appttude.com.driver.FirebaseClass.*; +import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; +import static h_mal.appttude.com.driver.Global.FirebaseClass.*; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.executeFragment; import static h_mal.appttude.com.driver.MainActivity.fragmentManager; import static h_mal.appttude.com.driver.MainActivity.getDateStamp; +import static h_mal.appttude.com.driver.MainActivity.loadImage; import static h_mal.appttude.com.driver.MainActivity.mDatabase; +import static h_mal.appttude.com.driver.MainActivity.viewController; -public class driverProfileFragment extends Fragment { +public class DriverProfileFragment extends Fragment { private String TAG = this.getClass().getSimpleName(); ImageView driverPic; + ProgressBar pb; TextView addPic; EditText forenames; EditText address; EditText postcode; EditText dob; EditText ni; - TextView privateHire; - TextView retrievedPH; EditText dateFirst; - TextView driverLi; - TextView retrievedDl; Button submit_driver; Uri filePath; Uri picUri; DatabaseReference driverProfileReference; - - PrivateHireObject privateHireObject; + String UID; DriverProfileObject driverProfileObject; - DriversLicenseObject driversLicenseObject; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - driverProfileReference = mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()) + + if (getArguments() != null){ + UID = getArguments().getString("user_id"); + }else{ + UID = auth.getCurrentUser().getUid(); + } + + driverProfileReference = mDatabase.child(USER_FIREBASE).child(UID) .child(DRIVER_FIREBASE); } @@ -78,21 +94,17 @@ public class driverProfileFragment extends Fragment { View view = inflater.inflate(R.layout.fragment_driver_profile, container, false); driverPic = view.findViewById(R.id.driver_pic); + pb = view.findViewById(R.id.pb_dp); addPic = view.findViewById(R.id.add_driver_pic); forenames = view.findViewById(R.id.names); address = view.findViewById(R.id.address); postcode = view.findViewById(R.id.postcode); dob = view.findViewById(R.id.dob); ni = view.findViewById(R.id.ni_number); - privateHire = view.findViewById(R.id.private_hire); - retrievedPH = view.findViewById(R.id.retrievedPH); dateFirst = view.findViewById(R.id.date_first); - driverLi = view.findViewById(R.id.drivers_li); - retrievedDl = view.findViewById(R.id.retrieved_dl); submit_driver = view.findViewById(R.id.submit_driver); - driverPic.setVisibility(View.GONE); - + viewController.progress(View.VISIBLE); driverProfileReference.addListenerForSingleValueEvent(valueEventListener); addPic.setOnClickListener(new View.OnClickListener() { @@ -104,20 +116,6 @@ public class driverProfileFragment extends Fragment { } }); - privateHire.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - executeFragment(new PrivateHireLicenseFragment()); - } - }); - - driverLi.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - executeFragment(new DriverLicenseFragment()); - } - }); - dob.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -144,17 +142,7 @@ public class driverProfileFragment extends Fragment { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - try{ - privateHireObject = dataSnapshot.child(PRIVATE_HIRE_FIREBASE).getValue(PrivateHireObject.class); - }catch (Exception e){ - Log.e(TAG, "onDataChange: ", e); - }finally { - if (privateHireObject != null){ - - retrievedPH.setText("Private Hire License no.: " +privateHireObject.getPhNumber() - +"\nPrivate Hire License expiry: " + privateHireObject.getPhExpiry()); - } - } + viewController.progress(View.GONE); try { driverProfileObject = dataSnapshot.child(DRIVER_DETAILS_FIREBASE).getValue(DriverProfileObject.class); @@ -168,36 +156,26 @@ public class driverProfileFragment extends Fragment { dob.setText(driverProfileObject.getDob()); dateFirst.setText(driverProfileObject.getDateFirst()); ni.setText(driverProfileObject.getNi()); - driverPic.setVisibility(View.VISIBLE); - Picasso.get().load(driverProfileObject.getDriverPic()).into(driverPic); + + + Picasso.get().load(driverProfileObject.getDriverPic()) + .into(loadImage(pb,driverPic)); picUri = Uri.parse(driverProfileObject.getDriverPic()); - - }else { - driverPic.setVisibility(View.GONE); } } - try{ - driversLicenseObject = dataSnapshot.child(DRIVERS_LICENSE_FIREBASE).getValue(DriversLicenseObject.class); - }catch (Exception e){ - Log.e(TAG, "onDataChange: ", e); - }finally { - if (driversLicenseObject != null){ - retrievedDl.setText("Driving License no.: " +driversLicenseObject.getLicenseNumber() - +"\nDriving License expiry: " + driversLicenseObject.getLicenseExpiry()); - } - } } @Override public void onCancelled(@NonNull DatabaseError databaseError) { - + viewController.progress(View.GONE); } }; View.OnClickListener submitOnClickListener = new View.OnClickListener() { @Override public void onClick(View v) { + String driverForename = forenames.getText().toString().trim(); String AddressString = address.getText().toString().trim(); String postCodeString = postcode.getText().toString().trim(); @@ -211,23 +189,32 @@ public class driverProfileFragment extends Fragment { !TextUtils.isEmpty(dobString) && !TextUtils.isEmpty(niString) && !TextUtils.isEmpty(dateFirstString)){ - if (filePath != null){ - Log.i(TAG, "onClick: new Image uploaded"); - new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ - @Override - public void processFinish(Uri output) { - Log.i(TAG, "processFinish: "); - if (output != null){ - picUri = output; - writeDriverToDb(); - fragmentManager.popBackStack(); - } - } - }).uploadImage(DRIVERS_LICENSE_FIREBASE,DRIVERS_LICENSE_FIREBASE + getDateStamp()); - }else{ - Log.i(TAG, "onClick: pushing with same image"); - writeDriverToDb(); + if (filePath == null && picUri == null){ + Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); + viewController.progress(View.GONE); + }else { + viewController.progress(View.VISIBLE); + if (filePath != null){ + + new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ + @Override + public void processFinish(Uri output) { + Log.i(TAG, "processFinish: "); + if (output != null){ + picUri = output; + writeDriverToDb(); + + }else { + viewController.progress(View.GONE); + } + + } + }).uploadImage(DRIVERS_LICENSE_FIREBASE,DRIVERS_LICENSE_FIREBASE + getDateStamp()); + }else{ + Log.i(TAG, "onClick: pushing with same image"); + writeDriverToDb(); + } } }else { @@ -249,9 +236,6 @@ public class driverProfileFragment extends Fragment { if (TextUtils.isEmpty(dateFirstString)){ dateFirst.setError("Field required"); } - if (picUri == null){ - Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show(); - } } } @@ -262,14 +246,14 @@ public class driverProfileFragment extends Fragment { public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - new ImageSelectorResults(new ImageSelectorResults.FilepathResponse() { - @Override - public void processFinish(Uri output) { - filePath = output; - } - }).Results(getActivity(),requestCode, resultCode, data, - filePath,driverPic); - driverPic.setVisibility(View.VISIBLE); + new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data, + filePath,driverPic,new ImageSelectorResults.FilepathResponse() { + @Override + public void processFinish(Uri output) { + filePath = output; + } + }); + } @@ -285,6 +269,42 @@ public class driverProfileFragment extends Fragment { DriverProfileObject driverProfileObject = new DriverProfileObject(picUri.toString(),forenameText, addressText,postcodeText,dobText,niText,datefirstText); - driverProfileReference.child(DRIVER_DETAILS_FIREBASE).setValue(driverProfileObject); + if (UID.equals(auth.getCurrentUser().getUid())){ + UserProfileChangeRequest.Builder profileUpdatesBuilder = new UserProfileChangeRequest.Builder(); + profileUpdatesBuilder.setPhotoUri(picUri); + UserProfileChangeRequest profileUpdates = profileUpdatesBuilder.build(); + + auth.getCurrentUser().updateProfile(profileUpdates) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Log.d(TAG, "User profile updated."); + viewController.reloadDrawer(); + mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()).child("user_details") + .setValue(new UserObject(auth.getCurrentUser().getDisplayName(),auth.getCurrentUser().getEmail(),picUri.toString())); + } + } + }) + .addOnFailureListener(new OnFailureListener() { + @Override + public void onFailure(@NonNull Exception e) { + Log.e(TAG, "onFailure: ", e); + } + }); + + } + + driverProfileReference.child(DRIVER_DETAILS_FIREBASE).setValue(driverProfileObject) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + approvalsClass.setStatusCode(UID,DRIVER_DETAILS_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); + } + viewController.progress(View.GONE); + fragmentManager.popBackStack(); + } + }); } } diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/InsuranceFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/InsuranceFragment.java new file mode 100644 index 0000000..6774a2d --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Driver/InsuranceFragment.java @@ -0,0 +1,300 @@ +package h_mal.appttude.com.driver.Driver; + +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.text.Layout; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.ValueEventListener; +import com.squareup.picasso.Picasso; + +import java.util.ArrayList; +import java.util.List; + +import h_mal.appttude.com.driver.Global.DateDialog; +import h_mal.appttude.com.driver.Global.FirebaseClass; +import h_mal.appttude.com.driver.Global.ImageSelectorDialog; +import h_mal.appttude.com.driver.Global.ImageSelectorResults; +import h_mal.appttude.com.driver.Global.ImageSwiperClass; +import h_mal.appttude.com.driver.Objects.InsuranceObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.archiveClass; +import static h_mal.appttude.com.driver.MainActivity.auth; +import static h_mal.appttude.com.driver.MainActivity.fragmentManager; +import static h_mal.appttude.com.driver.MainActivity.getDateStamp; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; +import static h_mal.appttude.com.driver.MainActivity.printObjectAsJson; +import static h_mal.appttude.com.driver.MainActivity.viewController; + + +public class InsuranceFragment extends Fragment { + + private String TAG = this.getClass().getSimpleName(); + DatabaseReference reference; + + TextView uploadIns; + EditText insName; + EditText insExpiry; + View holder; + + public Uri filePath; + public Uri picUri; + + public List photoStrings; + + String insNameString; + String insExpiryString; + + InsuranceObject insuranceObject; + ImageSwiperClass swiperClass; + + Boolean uploadNew; + String UID; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + uploadNew = false; + + photoStrings = new ArrayList<>(); + + if (getArguments() != null){ + Log.i(TAG, "onCreate: args = args exist"); + if (getArguments().containsKey("user_id")){ + UID = getArguments().getString("user_id"); + }else { + UID = auth.getCurrentUser().getUid(); + } + if (getArguments().containsKey(UPLOAD_NEW)){ + uploadNew = true; + } + }else{ + UID = auth.getCurrentUser().getUid(); + } + + reference = mDatabase.child(USER_FIREBASE).child(UID).child(VEHICLE_FIREBASE).child(INSURANCE_FIREBASE); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_insurance, container, false); + + uploadIns = view.findViewById(R.id.uploadInsurance); + insName = view.findViewById(R.id.insurer); + insExpiry = view.findViewById(R.id.insurance_exp); + Button submit = view.findViewById(R.id.submit_ins); + + holder = view.findViewById(R.id.image_pager); + swiperClass = new ImageSwiperClass(getContext(),holder); + + viewController.progress(View.VISIBLE); + reference.addListenerForSingleValueEvent(valueEventListener); + + uploadIns.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext()); + imageSelectorDialog.setImageName("insurance"+getDateStamp()); + imageSelectorDialog.show(); + } + }); + + insExpiry.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + DateDialog dateDialog = new DateDialog(getContext()); + dateDialog.init(insExpiry); + } + }); + + submit.setOnClickListener(submitOnClickListener); + + return view; + } + + ValueEventListener valueEventListener = new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + viewController.progress(View.GONE); + try{ + insuranceObject = dataSnapshot.getValue(InsuranceObject.class); + }catch (Exception e){ + Log.e(TAG, "onDataChange: ", e); + }finally { + if (insuranceObject != null){ + if (!uploadNew){ + photoStrings = insuranceObject.getPhotoStrings(); + swiperClass.reinstantiateList(photoStrings); + if (insuranceObject.insurerName != null){ + insNameString = insuranceObject.getInsurerName(); + insName.setText(insNameString); + } + if (insuranceObject.expiryDate != null){ + insExpiryString = insuranceObject.getExpiryDate(); + insExpiry.setText(insExpiryString); + } + } + } + } + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + viewController.progress(View.GONE); + } + }; + + View.OnClickListener submitOnClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + insNameString = insName.getText().toString().trim(); + insExpiryString = insExpiry.getText().toString().trim(); + + if (!TextUtils.isEmpty(insNameString) + && !TextUtils.isEmpty(insExpiryString)){ + viewController.progress(View.VISIBLE); + if (filePath == null && picUri == null){ + Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); + viewController.progress(View.GONE); + }else { + if (filePath != null){ + Log.i(TAG, "onClick: new Image uploaded"); + new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ + @Override + public void processFinish(Uri output) { + Log.i(TAG, "processFinish: "); + if (output != null){ + picUri = output; + publishObject(); + }else { + Toast.makeText(getContext(), "Could not upload", Toast.LENGTH_SHORT).show(); + viewController.progress(View.GONE); + } + + } + }).uploadImage(INSURANCE_FIREBASE,INSURANCE_FIREBASE + getDateStamp()); + }else{ + Log.i(TAG, "onClick: pushing with same image"); + publishObject(); + } + } + }else { + if (TextUtils.isEmpty(insNameString)){ + insName.setError("Field required"); + } + if (TextUtils.isEmpty(insExpiryString)){ + insExpiry.setError("Field required"); + } + if (picUri == null){ + Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show(); + } + } + + } + + }; + + private void publishObject(){ + + if (uploadNew){ + archiveClass.archiveRecord(UID,INSURANCE_FIREBASE,insuranceObject); + } + + photoStrings = swiperClass.getImageStrings(); + + InsuranceObject insuranceObject = new InsuranceObject(photoStrings, insNameString, insExpiryString); + + reference.setValue(insuranceObject).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + approvalsClass.setStatusCode(UID,INSURANCE_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); + fragmentManager.popBackStack(); + }else{ + Toast.makeText(getContext(), "Upload Unsuccessful", Toast.LENGTH_SHORT).show(); + } + viewController.progress(View.GONE); + } + }); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == MY_CAMERA_PERMISSION_CODE) { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show(); + Intent cameraIntent = new + Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); + startActivityForResult(cameraIntent, CAMERA_REQUEST); + } else { + Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show(); + } + + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data, + filePath,new ImageSelectorResults.FilepathResponse() { + @Override + public void processFinish(Uri output) { + filePath = output; + new FirebaseClass(getContext(), output, new FirebaseClass.Response() { + @Override + public void processFinish(Uri output) { + if (output != null){ + photoStrings.add(output.toString()); + swiperClass.addPhotoString(output.toString()); + //notify data change + reference.setValue(new InsuranceObject(photoStrings,null,null)); + } + } + }).uploadImage(INSURANCE_FIREBASE,INSURANCE_FIREBASE + getDateStamp()); + } + }); + + } + + @Override + public void onResume() { + super.onResume(); + printObjectAsJson(TAG,photoStrings); + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/MotFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/MotFragment.java new file mode 100644 index 0000000..3d7cf6c --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Driver/MotFragment.java @@ -0,0 +1,262 @@ +package h_mal.appttude.com.driver.Driver; + +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.ValueEventListener; +import com.squareup.picasso.Picasso; + +import h_mal.appttude.com.driver.Global.DateDialog; +import h_mal.appttude.com.driver.Global.FirebaseClass; +import h_mal.appttude.com.driver.Global.ImageSelectorDialog; +import h_mal.appttude.com.driver.Global.ImageSelectorResults; +import h_mal.appttude.com.driver.Objects.MotObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.archiveClass; +import static h_mal.appttude.com.driver.MainActivity.auth; +import static h_mal.appttude.com.driver.MainActivity.fragmentManager; +import static h_mal.appttude.com.driver.MainActivity.getDateStamp; +import static h_mal.appttude.com.driver.MainActivity.loadImage; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; +import static h_mal.appttude.com.driver.MainActivity.viewController; + + +public class MotFragment extends Fragment { + + private String TAG = this.getClass().getSimpleName(); + DatabaseReference reference; + + TextView uploadMot; + ImageView motImage; + ProgressBar progressBar; + EditText motExpiryEditText; + + public Uri filePath; + public Uri picUri; + + MotObject motObject; + String motExpText; + Boolean uploadNew; + String UID; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + uploadNew = false; + + if (getArguments() != null){ + Log.i(TAG, "onCreate: args = args exist"); + if (getArguments().containsKey("user_id")){ + UID = getArguments().getString("user_id"); + }else { + UID = auth.getCurrentUser().getUid(); + } + if (getArguments().containsKey(UPLOAD_NEW)){ + uploadNew = true; + } + }else{ + UID = auth.getCurrentUser().getUid(); + } + + reference = mDatabase.child(USER_FIREBASE).child(UID) + .child(VEHICLE_FIREBASE).child(MOT_FIREBASE); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_mot, container, false); + + motImage = view.findViewById(R.id.mot_img); + progressBar = view.findViewById(R.id.pb_mot); + uploadMot = view.findViewById(R.id.uploadmot); + motExpiryEditText = view.findViewById(R.id.mot_expiry); + Button submit = view.findViewById(R.id.submit_mot); + + viewController.progress(View.VISIBLE); + reference.addListenerForSingleValueEvent(valueEventListener); + + uploadMot.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext()); + imageSelectorDialog.setImageName("mot_certificate"); + imageSelectorDialog.show(); + } + }); + + motExpiryEditText.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + DateDialog dateDialog = new DateDialog(getContext()); + dateDialog.init(motExpiryEditText); + } + }); + + submit.setOnClickListener(submitOnClickListener); + + return view; + } + + ValueEventListener valueEventListener = new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + viewController.progress(View.GONE); + + try{ + motObject = dataSnapshot.getValue(MotObject.class); + }catch (Exception e){ + Log.e(TAG, "onDataChange: ", e); + }finally { + if (motObject != null){ + if (!uploadNew){ + picUri = Uri.parse(motObject.getMotImageString()); + motExpText = motObject.getMotExpiry(); + + motExpiryEditText.setText(motExpText); + Picasso.get() + .load(picUri) + .into(loadImage(progressBar,motImage)); + } + + } + } + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + viewController.progress(View.GONE); + } + }; + + View.OnClickListener submitOnClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + motExpText = motExpiryEditText.getText().toString().trim(); + + if (!TextUtils.isEmpty(motExpText)){ + viewController.progress(View.VISIBLE); + if (filePath == null && picUri == null){ + Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); + viewController.progress(View.GONE); + }else { + if (filePath != null){ + Log.i(TAG, "onClick: new Image uploaded"); + new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ + @Override + public void processFinish(Uri output) { + Log.i(TAG, "processFinish: "); + if (output != null){ + picUri = output; + publishObject(); + }else { + Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show(); + } + + } + }).uploadImage(MOT_FIREBASE,MOT_FIREBASE + getDateStamp()); + }else{ + Log.i(TAG, "onClick: pushing with same image"); + publishObject(); + } + } + }else { + if (TextUtils.isEmpty(motExpText)){ + motExpiryEditText.setError("Field required"); + } + if (picUri == null){ + Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show(); + } + } + + } + + }; + + private void publishObject(){ + + if (uploadNew){ + archiveClass.archiveRecord(UID,MOT_FIREBASE,motObject); + } + MotObject motObject = new MotObject(picUri.toString(), motExpText); + + reference.setValue(motObject).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + Log.i(TAG, "onComplete: publish = " + task.isSuccessful()); + approvalsClass.setStatusCode(UID,MOT_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); + fragmentManager.popBackStack(); + }else { + Toast.makeText(getContext(), "Unable to upload", Toast.LENGTH_SHORT).show(); + } + viewController.progress(View.GONE); + + } + }); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == MY_CAMERA_PERMISSION_CODE) { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show(); + Intent cameraIntent = new + Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); + startActivityForResult(cameraIntent, CAMERA_REQUEST); + } else { + Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show(); + } + + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data, + filePath,motImage,new ImageSelectorResults.FilepathResponse() { + @Override + public void processFinish(Uri output) { + filePath = output; + } + }); + + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/PrivateHireLicenseFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireLicenseFragment.java similarity index 54% rename from app/src/main/java/h_mal/appttude/com/driver/PrivateHireLicenseFragment.java rename to app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireLicenseFragment.java index 80ac65f..a33d51d 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/PrivateHireLicenseFragment.java +++ b/app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireLicenseFragment.java @@ -1,50 +1,61 @@ -package h_mal.appttude.com.driver; +package h_mal.appttude.com.driver.Driver; -import android.Manifest; -import android.app.Dialog; -import android.app.ProgressDialog; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; +import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; +import com.google.firebase.FirebaseError; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.ValueEventListener; import com.squareup.picasso.Picasso; -import h_mal.appttude.com.driver.Objects.PrivateHireObject; +import java.util.UUID; -import static h_mal.appttude.com.driver.FirebaseClass.*; -import static h_mal.appttude.com.driver.ImageSelectorDialog.CAMERA_REQUEST; -import static h_mal.appttude.com.driver.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; +import h_mal.appttude.com.driver.Global.DateDialog; +import h_mal.appttude.com.driver.Global.FirebaseClass; +import h_mal.appttude.com.driver.Global.ImageSelectorDialog; +import h_mal.appttude.com.driver.Global.ImageSelectorResults; +import h_mal.appttude.com.driver.Objects.PrivateHireObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; +import static h_mal.appttude.com.driver.Global.FirebaseClass.*; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.archiveClass; import static h_mal.appttude.com.driver.MainActivity.fragmentManager; import static h_mal.appttude.com.driver.MainActivity.getDateStamp; +import static h_mal.appttude.com.driver.MainActivity.loadImage; import static h_mal.appttude.com.driver.MainActivity.mDatabase; import static h_mal.appttude.com.driver.MainActivity.auth; +import static h_mal.appttude.com.driver.MainActivity.viewController; public class PrivateHireLicenseFragment extends Fragment { private String TAG = this.getClass().getSimpleName(); private ImageView imageView; - String fname; + ProgressBar pb; EditText phNo; EditText phExpiry; @@ -55,11 +66,33 @@ public class PrivateHireLicenseFragment extends Fragment { String Ph_numberString; String Ph_exprString; + DatabaseReference reference; + + PrivateHireObject privateHireObject; + Boolean uploadNew; + String UID; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + uploadNew = false; + if (getArguments() != null){ + Log.i(TAG, "onCreate: args = args exist"); + if (getArguments().containsKey("user_id")){ + UID = getArguments().getString("user_id"); + }else { + UID = auth.getCurrentUser().getUid(); + } + if (getArguments().containsKey(UPLOAD_NEW)){ + uploadNew = true; + } + }else{ + UID = auth.getCurrentUser().getUid(); + } + + reference = mDatabase.child(USER_FIREBASE).child(UID) + .child(DRIVER_FIREBASE).child(PRIVATE_HIRE_FIREBASE); } @Override @@ -68,13 +101,12 @@ public class PrivateHireLicenseFragment extends Fragment { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_private_hire_license, container, false); - DatabaseReference reference = mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()) - .child(DRIVER_FIREBASE).child(PRIVATE_HIRE_FIREBASE); - + viewController.progress(View.VISIBLE); reference.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot dataSnapshot) { - PrivateHireObject privateHireObject = null; + viewController.progress(View.GONE); + try{ privateHireObject = dataSnapshot.getValue(PrivateHireObject.class); }catch (Exception e){ @@ -85,12 +117,14 @@ public class PrivateHireLicenseFragment extends Fragment { Ph_numberString = privateHireObject.getPhNumber(); Ph_exprString = privateHireObject.getPhExpiry(); - phNo.setText(Ph_numberString); - phExpiry.setText(Ph_exprString); - Picasso.get() - .load(picUri) - .placeholder(R.mipmap.ic_launcher_round) - .into(imageView); + Log.i(TAG, "onDataChange: uploadNew = " + uploadNew); + if (!uploadNew){ + phNo.setText(Ph_numberString); + phExpiry.setText(Ph_exprString); + Picasso.get() + .load(picUri) + .into(loadImage(pb,imageView)); + } } } @@ -98,12 +132,13 @@ public class PrivateHireLicenseFragment extends Fragment { @Override public void onCancelled(@NonNull DatabaseError databaseError) { - + viewController.progress(View.GONE); } }); TextView uploadPH = view.findViewById(R.id.uploadphlic); imageView = view.findViewById(R.id.imageView2); + pb = view.findViewById(R.id.pb_priv); phNo = view.findViewById(R.id.ph_no); phExpiry = view.findViewById(R.id.ph_expiry); @@ -113,6 +148,7 @@ public class PrivateHireLicenseFragment extends Fragment { public void onClick(View v) { DateDialog dateDialog = new DateDialog(getContext()); dateDialog.init(phExpiry); + dateDialog.show(); } }); @@ -138,25 +174,33 @@ public class PrivateHireLicenseFragment extends Fragment { if (!TextUtils.isEmpty(Ph_numberString) && !TextUtils.isEmpty(Ph_exprString)){ - if (filePath != null){ - Log.i(TAG, "onClick: new Image uploaded"); - new FirebaseClass(getContext(),filePath,new Response(){ - @Override - public void processFinish(Uri output) { - Log.i(TAG, "processFinish: "); - if (output != null){ - picUri = output; - publishObject(); - fragmentManager.popBackStack(); + viewController.progress(View.VISIBLE); + if (filePath == null && picUri == null){ + Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); + viewController.progress(View.GONE); + }else { + if (filePath != null){ + Log.i(TAG, "onClick: new Image uploaded"); + new FirebaseClass(getContext(),filePath,new Response(){ + @Override + public void processFinish(Uri output) { + Log.i(TAG, "processFinish: "); + if (output != null){ + picUri = output; + publishObject(); + + }else { + Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show(); + viewController.progress(View.GONE); + } + } - - } - }).uploadImage(PRIVATE_HIRE_FIREBASE,PRIVATE_HIRE_FIREBASE + getDateStamp()); - }else{ - Log.i(TAG, "onClick: pushing with same image"); - publishObject(); + }).uploadImage(PRIVATE_HIRE_FIREBASE,PRIVATE_HIRE_FIREBASE + getDateStamp()); + }else{ + Log.i(TAG, "onClick: pushing with same image"); + publishObject(); + } } - }else { if (TextUtils.isEmpty(Ph_numberString)){ phNo.setError("Field required"); @@ -177,16 +221,28 @@ public class PrivateHireLicenseFragment extends Fragment { private void publishObject(){ - PrivateHireObject privateHireObject = new PrivateHireObject(picUri.toString(),Ph_numberString,Ph_exprString); + if (uploadNew){ + archiveClass.archiveRecord(UID,PRIVATE_HIRE_FIREBASE,privateHireObject); + } - mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()).child(DRIVER_FIREBASE).child(PRIVATE_HIRE_FIREBASE) - .setValue(privateHireObject).addOnCompleteListener(new OnCompleteListener() { + PrivateHireObject privateHireObjectNew = new PrivateHireObject(picUri.toString(),Ph_numberString,Ph_exprString); + + mDatabase.child(USER_FIREBASE).child(UID).child(DRIVER_FIREBASE).child(PRIVATE_HIRE_FIREBASE) + .setValue(privateHireObjectNew).addOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + Log.i(TAG, "onComplete: publish = " + task.isSuccessful()); + approvalsClass.setStatusCode(UID,PRIVATE_HIRE_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); + fragmentManager.popBackStack(); + }else { + Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show(); + } + viewController.progress(View.GONE); - Log.i(TAG, "onComplete: publish = " + task.isSuccessful()); } }); + } @Override @@ -209,13 +265,13 @@ public class PrivateHireLicenseFragment extends Fragment { public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); - new ImageSelectorResults(new ImageSelectorResults.FilepathResponse() { - @Override - public void processFinish(Uri output) { - filePath = output; - } - }).Results(getActivity(),requestCode, resultCode, data, - filePath,imageView); + new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data, + filePath,imageView,new ImageSelectorResults.FilepathResponse() { + @Override + public void processFinish(Uri output) { + filePath = output; + } + }); } diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireVehicleFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireVehicleFragment.java new file mode 100644 index 0000000..8d9cf8b --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireVehicleFragment.java @@ -0,0 +1,285 @@ +package h_mal.appttude.com.driver.Driver; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.ValueEventListener; +import com.squareup.picasso.Picasso; + +import h_mal.appttude.com.driver.Global.DateDialog; +import h_mal.appttude.com.driver.Global.FirebaseClass; +import h_mal.appttude.com.driver.Global.ImageSelectorDialog; +import h_mal.appttude.com.driver.Global.ImageSelectorResults; +import h_mal.appttude.com.driver.Objects.PrivateHireObject; +import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.archiveClass; +import static h_mal.appttude.com.driver.MainActivity.auth; +import static h_mal.appttude.com.driver.MainActivity.fragmentManager; +import static h_mal.appttude.com.driver.MainActivity.getDateStamp; +import static h_mal.appttude.com.driver.MainActivity.loadImage; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; +import static h_mal.appttude.com.driver.MainActivity.viewController; + + +public class PrivateHireVehicleFragment extends Fragment { + + private String TAG = this.getClass().getSimpleName(); + + private ImageView imageView; + ProgressBar pb; + + EditText phNo; + EditText phExpiry; + + public Uri filePath; + + public Uri picUri; + String Ph_numberString; + String Ph_exprString; + + DatabaseReference reference; + + PrivateHireVehicleObject privateHireObject; + Boolean uploadNew; + String UID; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + uploadNew = false; + + if (getArguments() != null){ + Log.i(TAG, "onCreate: args = args exist"); + if (getArguments().containsKey("user_id")){ + UID = getArguments().getString("user_id"); + }else { + UID = auth.getCurrentUser().getUid(); + } + if (getArguments().containsKey(UPLOAD_NEW)){ + uploadNew = true; + } + }else{ + UID = auth.getCurrentUser().getUid(); + } + + reference = mDatabase.child(USER_FIREBASE).child(UID) + .child(VEHICLE_FIREBASE).child(PRIVATE_HIRE_VEHICLE_LICENSE); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_private_hire_vehicle, container, false); + + viewController.progress(View.VISIBLE); + reference.addListenerForSingleValueEvent(valueEventListener); + + TextView uploadPH = view.findViewById(R.id.uploadphlic); + imageView = view.findViewById(R.id.imageView2); + pb = view.findViewById(R.id.pb_priv); + + phNo = view.findViewById(R.id.ph_no); + phExpiry = view.findViewById(R.id.ph_expiry); + + phExpiry.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + DateDialog dateDialog = new DateDialog(getContext()); + dateDialog.init(phExpiry); + dateDialog.show(); + } + }); + + Button submit = view.findViewById(R.id.submit); + submit.setOnClickListener(submitClick); + + uploadPH.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext()); + imageSelectorDialog.setImageName("private_hire"); + imageSelectorDialog.show(); + } + }); + + + return view; + } + + private View.OnClickListener submitClick = new View.OnClickListener() { + @Override + public void onClick(View v) { + Ph_numberString = phNo.getText().toString().trim(); + Ph_exprString = phExpiry.getText().toString().trim(); + + //validation for data then submit + + if (!TextUtils.isEmpty(Ph_numberString) && + !TextUtils.isEmpty(Ph_exprString)){ + viewController.progress(View.VISIBLE); + if (filePath == null && picUri == null){ + Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); + viewController.progress(View.GONE); + }else { + if (filePath != null){ + Log.i(TAG, "onClick: new Image uploaded"); + new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ + @Override + public void processFinish(Uri output) { + Log.i(TAG, "processFinish: "); + if (output != null){ + picUri = output; + publishObject(); + + }else { + Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show(); + viewController.progress(View.GONE); + } + + } + }).uploadImage(PRIVATE_HIRE_FIREBASE,PRIVATE_HIRE_FIREBASE + getDateStamp()); + }else{ + Log.i(TAG, "onClick: pushing with same image"); + publishObject(); + } + } + }else { + if (TextUtils.isEmpty(Ph_numberString)){ + phNo.setError("Field required"); + } + if (TextUtils.isEmpty(Ph_exprString)){ + phExpiry.setError("Field required"); + } + if (picUri == null){ + Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show(); + } + } + + } + }; + + ValueEventListener valueEventListener = new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + viewController.progress(View.GONE); + + try{ + privateHireObject = dataSnapshot.getValue(PrivateHireVehicleObject.class); + }catch (Exception e){ + Log.e(TAG, "onDataChange: ", e); + }finally { + if (privateHireObject != null){ + picUri = Uri.parse(privateHireObject.getPhCarImageString()); + Ph_numberString = privateHireObject.getPhCarNumber(); + Ph_exprString = privateHireObject.getPhCarExpiry(); + + Log.i(TAG, "onDataChange: uploadNew = " + uploadNew); + if (!uploadNew){ + phNo.setText(Ph_numberString); + phExpiry.setText(Ph_exprString); + Picasso.get() + .load(picUri) + .into(loadImage(pb,imageView)); + } + } + } + + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + viewController.progress(View.GONE); + } + }; + + private void publishObject(){ + + if (uploadNew){ + archiveClass.archiveRecord(UID,PRIVATE_HIRE_VEHICLE_LICENSE,privateHireObject); + } + + PrivateHireVehicleObject privateHireObjectNew = new PrivateHireVehicleObject(picUri.toString(),Ph_numberString,Ph_exprString); + + reference.setValue(privateHireObjectNew).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + Log.i(TAG, "onComplete: publish = " + task.isSuccessful()); + approvalsClass.setStatusCode(UID,PRIVATE_HIRE_VEHICLE_LICENSE + APPROVAL_CONSTANT,APPROVAL_PENDING); + fragmentManager.popBackStack(); + }else { + Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show(); + } + viewController.progress(View.GONE); + + } + }); + + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == MY_CAMERA_PERMISSION_CODE) { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show(); + Intent cameraIntent = new + Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); + startActivityForResult(cameraIntent, CAMERA_REQUEST); + } else { + Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show(); + } + + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + new ImageSelectorResults().Results(getActivity(), requestCode, resultCode, data, + filePath, imageView, new ImageSelectorResults.FilepathResponse() { + @Override + public void processFinish(Uri output) { + filePath = output; + } + }); + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleOverallFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleOverallFragment.java new file mode 100644 index 0000000..96259de --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleOverallFragment.java @@ -0,0 +1,188 @@ +package h_mal.appttude.com.driver.Driver; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.support.v7.widget.CardView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.ValueEventListener; + +import h_mal.appttude.com.driver.Objects.ApprovalsObject; +import h_mal.appttude.com.driver.Objects.WholeDriverObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.archiveClass; +import static h_mal.appttude.com.driver.MainActivity.auth; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; +import static h_mal.appttude.com.driver.MainActivity.viewController; + +public class VehicleOverallFragment extends Fragment { + + ImageView vehicleApr; + ImageView insuranceApr; + ImageView motApr; + ImageView logbookApr; + private ImageView privateHireCarApr; + TextView insuranceExp; + TextView motExp; + private TextView privateHireExp; + private CardView vehicleProfile; + private CardView insurance; + private CardView mot; + private CardView logbook; + private CardView privateHireCar; + + private DatabaseReference reference; + private WholeDriverObject wholeDriverObject; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + reference = mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_vehicle_overall, container, false); + + vehicleProfile = view.findViewById(R.id.vehicle_prof); + insurance = view.findViewById(R.id.insurance); + mot = view.findViewById(R.id.mot); + logbook = view.findViewById(R.id.logbook); + privateHireCar = view.findViewById(R.id.private_hire_vehicle_license); + + vehicleApr = view.findViewById(R.id.approval_vehicle); + insuranceApr = view.findViewById(R.id.approval_insurance); + motApr = view.findViewById(R.id.approval_mot); + logbookApr = view.findViewById(R.id.approval_lb); + privateHireCarApr = view.findViewById(R.id.approval_ph_car); + + insuranceExp = view.findViewById(R.id.ins_exp); + motExp = view.findViewById(R.id.mot_exp); + privateHireExp = view.findViewById(R.id.ph_car_exp); + + insuranceExp.setVisibility(View.GONE); + motExp.setVisibility(View.GONE); + privateHireExp.setVisibility(View.GONE); + + viewController.progress(View.VISIBLE); + reference.addListenerForSingleValueEvent(valueEventListener); + + return view; + } + + ValueEventListener valueEventListener = new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + wholeDriverObject = dataSnapshot.getValue(WholeDriverObject.class); + + if (wholeDriverObject.approvalsObject != null) { + ApprovalsObject approvalsObject = wholeDriverObject.getApprovalsObject(); + + vehicleApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getVehicle_details_approval())); + insuranceApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getInsurance_details_approval())); + motApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getMot_details_approval())); + logbookApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getLog_book_approval())); + privateHireCarApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getPh_car_approval())); + } + + if (wholeDriverObject.vehicle_profile != null){ + if (wholeDriverObject.getVehicle_profile().insurance_details != null){ + insuranceExp.setVisibility(View.VISIBLE); + insuranceExp.setText("Expiry: " + wholeDriverObject.getVehicle_profile().getInsurance_details().getExpiryDate()); + } + if (wholeDriverObject.getVehicle_profile().mot_details != null){ + motExp.setVisibility(View.VISIBLE); + motExp.setText("Expiry: " + wholeDriverObject.getVehicle_profile().getMot_details().getMotExpiry()); + } + if (wholeDriverObject.getVehicle_profile().private_hire_vehicle != null){ + privateHireExp.setVisibility(View.VISIBLE); + privateHireExp.setText("Expiry: " + wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject().getPhCarExpiry()); + } + } + + vehicleProfile.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (wholeDriverObject.vehicle_profile == null){ + executeFragment(new VehicleSetupFragment()); + }else { + archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getVehicle_details() + ,new VehicleSetupFragment()); + } + } + }); + + insurance.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (wholeDriverObject.vehicle_profile == null){ + executeFragment(new InsuranceFragment()); + }else { + archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getInsurance_details() + ,new InsuranceFragment()); + } + } + }); + + mot.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (wholeDriverObject.vehicle_profile == null){ + executeFragment(new MotFragment()); + }else { + archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getMot_details() + ,new MotFragment()); + } + } + }); + + logbook.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (wholeDriverObject.vehicle_profile == null){ + executeFragment(new logbookFragment()); + }else { + archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getLog_book() + ,new logbookFragment()); + } + } + }); + + privateHireCar.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (wholeDriverObject.vehicle_profile == null){ + executeFragment(new PrivateHireVehicleFragment()); + }else { + archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject() + ,new PrivateHireVehicleFragment()); + } + } + }); + + + viewController.progress(View.GONE); + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + viewController.progress(View.GONE); + } + }; + +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleSetupFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleSetupFragment.java new file mode 100644 index 0000000..c9dc1ce --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleSetupFragment.java @@ -0,0 +1,223 @@ +package h_mal.appttude.com.driver.Driver; + +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.ValueEventListener; + +import h_mal.appttude.com.driver.Global.DateDialog; +import h_mal.appttude.com.driver.Objects.DriversLicenseObject; +import h_mal.appttude.com.driver.Objects.InsuranceObject; +import h_mal.appttude.com.driver.Objects.LogbookObject; +import h_mal.appttude.com.driver.Objects.MotObject; +import h_mal.appttude.com.driver.Objects.VehicleProfileObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; +import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_DETAILS_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.archiveClass; +import static h_mal.appttude.com.driver.MainActivity.auth; +import static h_mal.appttude.com.driver.MainActivity.fragmentManager; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; +import static h_mal.appttude.com.driver.MainActivity.viewController; + + +public class VehicleSetupFragment extends Fragment { + + private String TAG = this.getClass().getSimpleName(); + + EditText reg; + EditText make; + EditText model; + EditText color; + EditText keeperName; + EditText address; + EditText postcode; + EditText startDate; + CheckBox seized; + Button Submit; + + DatabaseReference ref; + + VehicleProfileObject vehicleProfileObject; + Boolean uploadNew; + String UID; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + uploadNew = false; + + if (getArguments() != null){ + Log.i(TAG, "onCreate: args = args exist"); + if (getArguments().containsKey("user_id")){ + UID = getArguments().getString("user_id"); + }else { + UID = auth.getCurrentUser().getUid(); + } + if (getArguments().containsKey(UPLOAD_NEW)){ + uploadNew = true; + } + }else{ + UID = auth.getCurrentUser().getUid(); + } + + ref = mDatabase.child(USER_FIREBASE).child(UID).child(VEHICLE_FIREBASE); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_vehicle_setup, container, false); + + reg = view.findViewById(R.id.reg); + make = view.findViewById(R.id.make); + model = view.findViewById(R.id.model); + color = view.findViewById(R.id.colour); + keeperName = view.findViewById(R.id.keeper_name); + address = view.findViewById(R.id.address); + postcode = view.findViewById(R.id.postcode); + startDate = view.findViewById(R.id.start_date); + seized = view.findViewById(R.id.seized); + Submit = view.findViewById(R.id.submit_vehicle); + + startDate.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + DateDialog dateDialog = new DateDialog(getContext()); + dateDialog.init(startDate); + } + }); + + viewController.progress(View.VISIBLE); + ref.addListenerForSingleValueEvent(valueEventListener); + + Submit.setOnClickListener(submitOnClickListener); + + return view; + } + + ValueEventListener valueEventListener = new ValueEventListener(){ + + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + viewController.progress(View.GONE); + try{ + vehicleProfileObject = dataSnapshot.child(VEHICLE_DETAILS_FIREBASE).getValue(VehicleProfileObject.class); + }catch (Exception e){ + Log.e(TAG, "onDataChange: ", e); + }finally { + if (vehicleProfileObject != null){ + if(!uploadNew) { + reg.setText(vehicleProfileObject.getReg()); + make.setText(vehicleProfileObject.getMake()); + model.setText(vehicleProfileObject.getModel()); + color.setText(vehicleProfileObject.getColour()); + keeperName.setText(vehicleProfileObject.getKeeperName()); + address.setText(vehicleProfileObject.getKeeperAddress()); + postcode.setText(vehicleProfileObject.getKeeperPostCode()); + startDate.setText(vehicleProfileObject.getStartDate()); + seized.setChecked(vehicleProfileObject.isSeized()); + } + } + } + + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + viewController.progress(View.GONE); + } + }; + + View.OnClickListener submitOnClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + String regString = reg.getText().toString().trim(); + String makeString = make.getText().toString().trim(); + String modelString = model.getText().toString().trim(); + String colourString = color.getText().toString().trim(); + String keeperNameStrin = keeperName.getText().toString().trim(); + String addressString = address.getText().toString().trim(); + String postcodeString = postcode.getText().toString().trim(); + String driverForename = startDate.getText().toString().trim(); + + if (!TextUtils.isEmpty(regString) + &&!TextUtils.isEmpty(makeString) + &&!TextUtils.isEmpty(modelString) + &&!TextUtils.isEmpty(colourString) + &&!TextUtils.isEmpty(keeperNameStrin) + &&!TextUtils.isEmpty(addressString) + &&!TextUtils.isEmpty(postcodeString) + &&!TextUtils.isEmpty(driverForename)) { + + if (uploadNew){ + archiveClass.archiveRecord(UID,VEHICLE_DETAILS_FIREBASE,vehicleProfileObject); + } + + VehicleProfileObject vehicleProfileObject = new VehicleProfileObject( + regString ,makeString ,modelString ,colourString ,keeperNameStrin ,addressString ,postcodeString ,driverForename, + seized.isChecked() + ); + + viewController.progress(View.VISIBLE); + ref.child(VEHICLE_DETAILS_FIREBASE).setValue(vehicleProfileObject).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + approvalsClass.setStatusCode(UID,VEHICLE_DETAILS_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); + approvalsClass.setStatusCode(UID,MOT_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); + approvalsClass.setStatusCode(UID,INSURANCE_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); + approvalsClass.setStatusCode(UID,LOG_BOOK_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); + fragmentManager.popBackStack(); + }else{ + Toast.makeText(getContext(), "Upload Unsuccessful", Toast.LENGTH_SHORT).show(); + } + viewController.progress(View.GONE); + } + }); + + }else { + if (TextUtils.isEmpty(regString)){reg.setError("Field required");} + if (TextUtils.isEmpty(makeString)){make.setError("Field required");} + if (TextUtils.isEmpty(modelString)){model.setError("Field required");} + if (TextUtils.isEmpty(colourString)){color.setError("Field required");} + if (TextUtils.isEmpty(keeperNameStrin)){keeperName.setError("Field required");} + if (TextUtils.isEmpty(addressString)){address.setError("Field required");} + if (TextUtils.isEmpty(postcodeString)){postcode.setError("Field required");} + if (TextUtils.isEmpty(driverForename)){startDate.setError("Field required");} + + } + + } + + }; + +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/homeFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/homeDriverFragment.java similarity index 68% rename from app/src/main/java/h_mal/appttude/com/driver/homeFragment.java rename to app/src/main/java/h_mal/appttude/com/driver/Driver/homeDriverFragment.java index 29e3a89..33194f3 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/homeFragment.java +++ b/app/src/main/java/h_mal/appttude/com/driver/Driver/homeDriverFragment.java @@ -1,22 +1,20 @@ -package h_mal.appttude.com.driver; +package h_mal.appttude.com.driver.Driver; -import android.content.Context; -import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; import android.support.v7.widget.CardView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.executeFragment; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; +import h_mal.appttude.com.driver.Global.ExecuteFragment; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; -public class homeFragment extends Fragment { +public class homeDriverFragment extends Fragment { @Override public void onCreate(Bundle savedInstanceState) { @@ -35,7 +33,7 @@ public class homeFragment extends Fragment { button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - executeFragment(new driverProfileFragment()); + executeFragment(new DriverOverallFragment()); } }); @@ -43,7 +41,7 @@ public class homeFragment extends Fragment { second.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - executeFragment(new VehicleSetupFragment()); + executeFragment(new VehicleOverallFragment()); } }); diff --git a/app/src/main/java/h_mal/appttude/com/driver/Driver/logbookFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Driver/logbookFragment.java new file mode 100644 index 0000000..397422f --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Driver/logbookFragment.java @@ -0,0 +1,255 @@ +package h_mal.appttude.com.driver.Driver; + +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.ValueEventListener; +import com.squareup.picasso.Picasso; + +import h_mal.appttude.com.driver.Global.FirebaseClass; +import h_mal.appttude.com.driver.Global.ImageSelectorDialog; +import h_mal.appttude.com.driver.Global.ImageSelectorResults; +import h_mal.appttude.com.driver.Objects.LogbookObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.archiveClass; +import static h_mal.appttude.com.driver.MainActivity.auth; +import static h_mal.appttude.com.driver.MainActivity.fragmentManager; +import static h_mal.appttude.com.driver.MainActivity.getDateStamp; +import static h_mal.appttude.com.driver.MainActivity.loadImage; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; +import static h_mal.appttude.com.driver.MainActivity.viewController; + + +public class logbookFragment extends Fragment { + + private String TAG = this.getClass().getSimpleName(); + DatabaseReference reference; + + TextView uploadlb; + ImageView lbImage; + ProgressBar progressBar; + EditText v5cNumber; + + public Uri filePath; + public Uri picUri; + + String v5cString; + + LogbookObject logbookObject; + Boolean uploadNew; + String UID; + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + uploadNew = false; + + if (getArguments() != null){ + Log.i(TAG, "onCreate: args = args exist"); + if (getArguments().containsKey("user_id")){ + UID = getArguments().getString("user_id"); + }else { + UID = auth.getCurrentUser().getUid(); + } + if (getArguments().containsKey(UPLOAD_NEW)){ + uploadNew = true; + } + }else{ + UID = auth.getCurrentUser().getUid(); + } + + reference = mDatabase.child(USER_FIREBASE).child(UID).child(VEHICLE_FIREBASE).child(LOG_BOOK_FIREBASE); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_logbook, container, false); + + uploadlb = view.findViewById(R.id.upload_lb); + lbImage = view.findViewById(R.id.log_book_img); + progressBar = view.findViewById(R.id.pb_lb); + v5cNumber = view.findViewById(R.id.v5c_no); + Button submit = view.findViewById(R.id.submit_lb); + + viewController.progress(View.VISIBLE); + reference.addListenerForSingleValueEvent(valueEventListener); + + uploadlb.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext()); + imageSelectorDialog.setImageName("logbook_pic"+getDateStamp()); + imageSelectorDialog.show(); + } + }); + + + submit.setOnClickListener(submitOnClickListener); + + return view; + } + + ValueEventListener valueEventListener = new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + viewController.progress(View.GONE); + try{ + logbookObject = dataSnapshot.getValue(LogbookObject.class); + }catch (Exception e){ + Log.e(TAG, "onDataChange: ", e); + }finally { + if (logbookObject != null){ + picUri = Uri.parse(logbookObject.getPhotoString()); + v5cString = logbookObject.getV5cnumber(); + + if(!uploadNew) { + v5cNumber.setText(v5cString); + Picasso.get() + .load(picUri) + .into(loadImage(progressBar, lbImage)); + } + } + } + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + viewController.progress(View.GONE); + } + }; + + View.OnClickListener submitOnClickListener = new View.OnClickListener() { + @Override + public void onClick(View v) { + v5cString = v5cNumber.getText().toString().trim(); + + if (!TextUtils.isEmpty(v5cString)){ + viewController.progress(View.VISIBLE); + if (filePath == null && picUri == null){ + Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show(); + viewController.progress(View.GONE); + }else { + if (filePath != null){ + Log.i(TAG, "onClick: new Image uploaded"); + new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ + @Override + public void processFinish(Uri output) { + Log.i(TAG, "processFinish: "); + if (output != null){ + picUri = output; + publishObject(); + }else { + Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show(); + viewController.progress(View.GONE); + } + + } + }).uploadImage(LOG_BOOK_FIREBASE,LOG_BOOK_FIREBASE + getDateStamp()); + }else{ + Log.i(TAG, "onClick: pushing with same image"); + publishObject(); + } + } + + + }else { + if (TextUtils.isEmpty(v5cString)){ + v5cNumber.setError("Field required"); + } + if (picUri == null){ + Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show(); + } + } + + } + + }; + + private void publishObject(){ + + if (uploadNew){ + archiveClass.archiveRecord(UID,LOG_BOOK_FIREBASE,logbookObject); + } + + LogbookObject logbookObjectNew = new LogbookObject(picUri.toString(), v5cString); + + reference.setValue(logbookObjectNew).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + approvalsClass.setStatusCode(UID,LOG_BOOK_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING); + fragmentManager.popBackStack(); + }else{ + Toast.makeText(getContext(), "Upload Unsuccessful", Toast.LENGTH_SHORT).show(); + } + viewController.progress(View.VISIBLE); + } + }); + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == MY_CAMERA_PERMISSION_CODE) { + if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show(); + Intent cameraIntent = new + Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); + startActivityForResult(cameraIntent, CAMERA_REQUEST); + } else { + Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show(); + } + + } + } + + @Override + public void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + + new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data, + filePath,lbImage,new ImageSelectorResults.FilepathResponse() { + @Override + public void processFinish(Uri output) { + filePath = output; + } + }); + + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/FindAddressFragment.java b/app/src/main/java/h_mal/appttude/com/driver/FindAddressFragment.java deleted file mode 100644 index bfc8a42..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/FindAddressFragment.java +++ /dev/null @@ -1,56 +0,0 @@ -package h_mal.appttude.com.driver; - -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.EditText; -import android.widget.LinearLayout; -import android.widget.TextView; - -public class FindAddressFragment extends Fragment { - - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_find_address, container, false); - - TextView findAddress = view.findViewById(R.id.findaddress); - Button sumbit = view.findViewById(R.id.submit); - - LinearLayout linearLayout = view.findViewById(R.id.lin_lay); - - EditText address = view.findViewById(R.id.address); - EditText postcode = view.findViewById(R.id.postcode); - - findAddress.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - ImageSelectorDialog dialogAddress = new ImageSelectorDialog(getContext()); - dialogAddress.show(); - } - }); - - sumbit.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - } - }); - - - return view; - } - - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.java new file mode 100644 index 0000000..89d869d --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.java @@ -0,0 +1,123 @@ +package h_mal.appttude.com.driver.Global; + +import android.support.annotation.NonNull; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; + +import h_mal.appttude.com.driver.Objects.ApprovalsObject; +import h_mal.appttude.com.driver.Objects.WholeDriverObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_DENIED; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVED; +import static h_mal.appttude.com.driver.Global.FirebaseClass.NO_DATE_PRESENT; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_APPROVALS; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; +import static h_mal.appttude.com.driver.MainActivity.printObjectAsJson; + +public class ApprovalsClass { + + public ApprovalsClass() { + } + + public static int mode(int[] array) { + printObjectAsJson("modeArrays",array); + int mode = array[0]; + int maxCount = 0; + if (matchedArray(array,3)){ + return 3; + }else if (matchedArray(array,0)){ + return 0; + }else { + for (int i = 0; i < array.length; i++) { + int value = array[i]; + int count = 1; + for (int j = 0; j < array.length; j++) { + if (array[j] == value) count++; + if (count > maxCount) { + mode = value; + maxCount = count; + } + } + } + if (mode == 3){ + return 1; + } + } + return mode; + } + + private static boolean matchedArray (int [] array, int match){ + for (int i : array){ + if (i != match){ + return false; + } + } + + return true; + } + + public int getOverApprovalStatusCode(WholeDriverObject wholeDriverObject){ + + if (wholeDriverObject.approvalsObject != null){ + ApprovalsObject approvalsObject = wholeDriverObject.getApprovalsObject(); + + int[] ints = new int[]{approvalsObject.getDriver_details_approval(), + approvalsObject.getDriver_license_approval(), + approvalsObject.getPrivate_hire_approval(), + approvalsObject.getVehicle_details_approval(), + approvalsObject.getInsurance_details_approval(), + approvalsObject.getMot_details_approval(), + approvalsObject.getLog_book_approval(), + approvalsObject.getPh_car_approval()}; + + + return setImageResource(mode(ints)); + } + + return setImageResource(NO_DATE_PRESENT); + } + + public void setStatusCode(String userId,String approvalNameString,int status){ + + if (!approvalNameString.equals("")) { + mDatabase.child(USER_FIREBASE).child(userId).child(USER_APPROVALS).child(approvalNameString) + .setValue(status).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + + } else { + + } + } + }); + } + + + } + + public int setImageResource(int statusCode){ + int imageResource; + + switch (statusCode){ + case APPROVAL_PENDING: + imageResource = R.drawable.pending; + break; + case APPROVAL_DENIED: + imageResource = R.drawable.denied; + break; + case APPROVED: + imageResource = R.drawable.approved; + break; + default: + imageResource = R.drawable.zero; + break; + } + + return imageResource; + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.java new file mode 100644 index 0000000..029db51 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.java @@ -0,0 +1,99 @@ +package h_mal.appttude.com.driver.Global; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.util.Log; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.database.DatabaseReference; + +import java.util.UUID; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW; +import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; +import static h_mal.appttude.com.driver.Global.FirebaseClass.ARCHIVE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.MainActivity.getDateTimeStamp; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; + +public class ArchiveClass { + private static final String TAG = "ArchiveClass"; + + public ArchiveClass() { + } + + public void archiveRecord(String UID, String item, Object object) { + final DatabaseReference toPath = mDatabase.child(USER_FIREBASE).child(UID) + .child(ARCHIVE_FIREBASE).child(item); + + toPath.child(getDateTimeStamp()).setValue(object).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + Log.i(TAG, "onComplete: archive successful"); + }else { + Log.i(TAG, "onComplete: archive unsuccessful"); + } + } + }); + } + + public void openDialogArchive(Context context,Object object, final Fragment fragment){ + if (object == null){ + executeFragment(fragment); + }else { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setMessage("Do you want to View/Edit or Upload new?") + .setPositiveButton("View/Edit", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + executeFragment(fragment); + } + }) + .setNegativeButton("Upload New", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Bundle bundle = new Bundle(); + bundle.putString(UPLOAD_NEW,"Yes"); + fragment.setArguments(bundle); + executeFragment(fragment); + } + }) + .create().show(); + } + + } + + public void openDialogArchive(Context context,Object object, String user,final Fragment fragment){ + final Bundle bundle = new Bundle(); + bundle.putString("user_id",user); + fragment.setArguments(bundle); + + if (object == null){ + executeFragment(fragment); + }else { + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setMessage("Do you want to View/Edit or Upload new?") + .setPositiveButton("View/Edit", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + executeFragment(fragment); + } + }) + .setNegativeButton("Upload New", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + bundle.putString(UPLOAD_NEW,"Yes"); + executeFragment(fragment); + } + }) + .create().show(); + } + + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/DateDialog.java b/app/src/main/java/h_mal/appttude/com/driver/Global/DateDialog.java similarity index 88% rename from app/src/main/java/h_mal/appttude/com/driver/DateDialog.java rename to app/src/main/java/h_mal/appttude/com/driver/Global/DateDialog.java index 488b5c6..43c90e9 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/DateDialog.java +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/DateDialog.java @@ -1,10 +1,12 @@ -package h_mal.appttude.com.driver; +package h_mal.appttude.com.driver.Global; import android.app.DatePickerDialog; import android.content.Context; import android.content.Intent; +import android.os.Build; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.annotation.RequiresApi; import android.text.TextUtils; import android.util.Log; import android.widget.DatePicker; @@ -16,6 +18,8 @@ import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; +import h_mal.appttude.com.driver.R; + public class DateDialog extends DatePickerDialog { int mYear; @@ -24,10 +28,12 @@ public class DateDialog extends DatePickerDialog { EditText editText; + @RequiresApi(api = Build.VERSION_CODES.N) public DateDialog(@NonNull Context context) { super(context); } + @RequiresApi(api = Build.VERSION_CODES.N) public DateDialog(@NonNull Context context, int themeResId) { super(context, themeResId); } @@ -70,16 +76,16 @@ public class DateDialog extends DatePickerDialog { mDay = calendar.get(Calendar.DAY_OF_MONTH); }else { try { - SimpleDateFormat sdfrmt = new SimpleDateFormat("dd-MM-yyyy"); + SimpleDateFormat sdfrmt = new SimpleDateFormat("dd/MM/yyyy"); sdfrmt.setLenient(false); javaDate = sdfrmt.parse(dateString); } catch (ParseException e) { e.printStackTrace(); }finally { if (javaDate != null) { - mYear = Integer.parseInt(dateString.substring(6, 9)); - mMonth = Integer.parseInt(dateString.substring(4, 5)); - mDay = Integer.parseInt(dateString.substring(1, 2)); + mYear = Integer.parseInt(dateString.substring(6, dateString.length())); + mMonth = Integer.parseInt(dateString.substring(3, 5))-1; + mDay = Integer.parseInt(dateString.substring(0, 2)); }else { Calendar calendar = Calendar.getInstance(); mYear = calendar.get(Calendar.YEAR); @@ -110,8 +116,8 @@ public class DateDialog extends DatePickerDialog { mMonth = month + 1; mDay = dayOfMonth; - editText.setText(String.format("%02d", mDay) + "-" + - String.format("%02d", (mMonth)) +"-" + + editText.setText(String.format("%02d", mDay) + "/" + + String.format("%02d", (mMonth)) +"/" + mYear ); diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ExecuteFragment.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ExecuteFragment.java new file mode 100644 index 0000000..a88ebc9 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ExecuteFragment.java @@ -0,0 +1,65 @@ +package h_mal.appttude.com.driver.Global; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentTransaction; + +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.MainActivity.fragmentManager; + +public class ExecuteFragment { + + public static final String UPLOAD_NEW = "upload_new"; + + public static void executeFragment(Fragment fragment, Bundle bundle) { + executeFragmentMethod(fragment,bundle); + } + + public static void executeFragment(Fragment fragment) { + executeFragmentMethod(fragment); + } + + public static void executeFragment(Fragment fragment, String userId) { + executeFragmentMethod(fragment,userId); + } + + public static void executeFragment(Fragment fragment, String userId, String archive) { + executeFragmentMethod(fragment,userId,archive); + } + + private static void executeFragmentMethod(Fragment f){ + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit(); + } + + private static void executeFragmentMethod(Fragment f,String user_id){ + Bundle bundle = new Bundle(); + bundle.putString("user_id",user_id); + + f.setArguments(bundle); + + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit(); + } + + private static void executeFragmentMethod(Fragment f,String user_id,String archive){ + Bundle bundle = new Bundle(); + bundle.putString("user_id",user_id); + bundle.putString("archive",archive); + + f.setArguments(bundle); + + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit(); + } + + private static void executeFragmentMethod(Fragment f, Bundle b){ + if (b != null){ + f.setArguments(b); + } + FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); + fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit(); + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/FirebaseClass.java b/app/src/main/java/h_mal/appttude/com/driver/Global/FirebaseClass.java similarity index 86% rename from app/src/main/java/h_mal/appttude/com/driver/FirebaseClass.java rename to app/src/main/java/h_mal/appttude/com/driver/Global/FirebaseClass.java index 82f436f..5e271b9 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/FirebaseClass.java +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/FirebaseClass.java @@ -1,9 +1,8 @@ -package h_mal.appttude.com.driver; +package h_mal.appttude.com.driver.Global; import android.app.ProgressDialog; import android.content.Context; import android.net.Uri; -import android.os.AsyncTask; import android.support.annotation.NonNull; import android.util.Log; import android.widget.Toast; @@ -26,11 +25,24 @@ public class FirebaseClass { public static final String PRIVATE_HIRE_FIREBASE = "private_hire"; public static final String DRIVERS_LICENSE_FIREBASE = "driver_license"; + public static final String USER_APPROVALS = "approvalsObject"; + public static final String APPROVAL_CONSTANT = "_approval"; + public static final String ARCHIVE_FIREBASE = "archive"; + + public static final String DRIVER_NUMBER = "driver_number"; + public static final String VEHICLE_FIREBASE = "vehicle_profile"; public static final String MOT_FIREBASE = "mot_details"; public static final String VEHICLE_DETAILS_FIREBASE = "vehicle_details"; public static final String INSURANCE_FIREBASE = "insurance_details"; public static final String LOG_BOOK_FIREBASE = "log_book"; + public static final String PRIVATE_HIRE_VEHICLE_LICENSE = "private_hire_vehicle"; + + public static final int NO_DATE_PRESENT = 0; + public static final int APPROVAL_PENDING = 1; + public static final int APPROVAL_DENIED = 2; + public static final int APPROVED = 3; + Context context; Uri filePath; @@ -49,8 +61,7 @@ public class FirebaseClass { public void uploadImage(String path, String name) { - if(filePath != null) - { + if(filePath != null) { final ProgressDialog progressDialog = new ProgressDialog(context); progressDialog.setTitle("Uploading..."); progressDialog.show(); diff --git a/app/src/main/java/h_mal/appttude/com/driver/ImageSelectorDialog.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorDialog.java similarity index 79% rename from app/src/main/java/h_mal/appttude/com/driver/ImageSelectorDialog.java rename to app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorDialog.java index 7c35667..835af5e 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ImageSelectorDialog.java +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorDialog.java @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver; +package h_mal.appttude.com.driver.Global; import android.Manifest; import android.app.Activity; @@ -17,6 +17,7 @@ import android.support.annotation.Nullable; import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.support.v4.content.FileProvider; +import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.Window; import android.view.WindowManager; @@ -33,6 +34,9 @@ import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; +import h_mal.appttude.com.driver.R; + +import static android.support.v4.app.ActivityCompat.getPermissionCompatDelegate; import static android.support.v4.app.ActivityCompat.requestPermissions; import static android.support.v4.app.ActivityCompat.startActivityForResult; import static android.support.v4.content.PermissionChecker.checkSelfPermission; @@ -45,6 +49,7 @@ public class ImageSelectorDialog extends Dialog{ public static final int PICK_IMAGE_REQUEST = 71; public static final int CAMERA_REQUEST = 1888; public static final int MY_CAMERA_PERMISSION_CODE = 100; + public static final int STORAGE_PERMISSION_CODE = 101; private String saveFileName; public static Uri photoURI; @@ -73,11 +78,8 @@ public class ImageSelectorDialog extends Dialog{ setContentView(R.layout.address_dialog); //check if we have we have storage rights - int permission = ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE); - - if (permission != PackageManager.PERMISSION_GRANTED) { - Toast.makeText(getContext(), "Storage permissions not granted", Toast.LENGTH_SHORT).show(); - }else { + final int permissionPic = ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE); + final int permissionCam = ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA); fragment = fragmentManager.getFragments().get(0); @@ -87,7 +89,14 @@ public class ImageSelectorDialog extends Dialog{ upload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - chooseImage(); + if (permissionPic == PackageManager.PERMISSION_GRANTED){ + chooseImage(); + + }else { + Toast.makeText(getContext(), "Storage permissions required", Toast.LENGTH_SHORT).show(); + requestPermissions(fragment.getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, + STORAGE_PERMISSION_CODE); + } dismiss(); } }); @@ -95,13 +104,7 @@ public class ImageSelectorDialog extends Dialog{ takePic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - - if ( - checkSelfPermission(fragment.getActivity(), Manifest.permission.CAMERA) - != PackageManager.PERMISSION_GRANTED) { - requestPermissions(fragment.getActivity(), new String[]{Manifest.permission.CAMERA}, - MY_CAMERA_PERMISSION_CODE); - } else { + if (permissionCam == PackageManager.PERMISSION_GRANTED){ Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); File file = createFile(); photoURI = Uri.fromFile(file); @@ -111,13 +114,14 @@ public class ImageSelectorDialog extends Dialog{ file); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); fragment.startActivityForResult(cameraIntent, CAMERA_REQUEST); - + }else { + Toast.makeText(getContext(), "Camera Permissions required", Toast.LENGTH_SHORT).show(); + requestPermissions(fragment.getActivity(), new String[]{Manifest.permission.CAMERA}, + MY_CAMERA_PERMISSION_CODE); } - dismiss(); } }); - } } diff --git a/app/src/main/java/h_mal/appttude/com/driver/ImageSelectorResults.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorResults.java similarity index 53% rename from app/src/main/java/h_mal/appttude/com/driver/ImageSelectorResults.java rename to app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorResults.java index 0ebe476..6ec3b61 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ImageSelectorResults.java +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorResults.java @@ -1,18 +1,14 @@ -package h_mal.appttude.com.driver; +package h_mal.appttude.com.driver.Global; import android.Manifest; import android.app.Activity; -import android.content.ContentResolver; -import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Bitmap; -import android.graphics.Picture; import android.net.Uri; import android.os.Environment; import android.provider.MediaStore; import android.support.v4.app.ActivityCompat; -import android.support.v4.app.Fragment; import android.util.Log; import android.view.View; import android.widget.ImageView; @@ -21,16 +17,12 @@ import android.widget.Toast; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Date; - -import h_mal.appttude.com.driver.Objects.PrivateHireObject; import static android.app.Activity.RESULT_OK; import static android.os.Environment.DIRECTORY_PICTURES; -import static h_mal.appttude.com.driver.ImageSelectorDialog.CAMERA_REQUEST; -import static h_mal.appttude.com.driver.ImageSelectorDialog.PICK_IMAGE_REQUEST; -import static h_mal.appttude.com.driver.ImageSelectorDialog.photoURI; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.PICK_IMAGE_REQUEST; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.photoURI; import static h_mal.appttude.com.driver.MainActivity.getDateStamp; public class ImageSelectorResults { @@ -41,14 +33,13 @@ public class ImageSelectorResults { void processFinish(Uri output); } - public FilepathResponse delegate; +// public FilepathResponse delegate; - public ImageSelectorResults(FilepathResponse delegate) { - this.delegate = delegate; + public ImageSelectorResults() { } public void Results(Activity activity, int requestCode, int resultCode, Intent data, Uri filePath, - ImageView imageView){ + ImageView imageView,FilepathResponse delegate){ this.activity = activity; @@ -70,9 +61,12 @@ public class ImageSelectorResults { } finally { if (bitmap != null){ -// + delegate.processFinish(filePath); + Log.i(getClass().getSimpleName(), "Results: " + filePath); } } + + } if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) { @@ -108,10 +102,73 @@ public class ImageSelectorResults { } + delegate.processFinish(filePath); + Log.i(getClass().getSimpleName(), "Results: " + filePath); + } + } + + public void Results(Activity activity, int requestCode, int resultCode, Intent data, Uri filePath,FilepathResponse delegate){ + + this.activity = activity; + + if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK + && data != null && data.getData() != null ) + { + filePath = data.getData(); + Bitmap bitmap = null; + try { + bitmap = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), filePath); + } + catch (IOException e) + { + e.printStackTrace(); + } + finally { + if (bitmap != null){ + delegate.processFinish(filePath); + Log.i(getClass().getSimpleName(), "Results: " + filePath); + } + } } - delegate.processFinish(filePath); - Log.i(getClass().getSimpleName(), "Results: " + filePath); + if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) { + //check if we have we have storage rights + int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE); + + if (permission != PackageManager.PERMISSION_GRANTED) { + Toast.makeText(activity, "Storage permissions not granted", Toast.LENGTH_SHORT).show(); + return; + }else { + + try { + File f = Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES); + String fname = "driver"+ getDateStamp() + ".jpg"; + File image = new File(f,fname); + FileOutputStream fileOutputStream = new FileOutputStream(image); + + filePath = photoURI; + + Bitmap bitmap = MediaStore.Images.Media + .getBitmap(activity.getContentResolver(), photoURI); + + + bitmap.compress(Bitmap.CompressFormat.JPEG, 90,fileOutputStream); + fileOutputStream.flush(); + fileOutputStream.close(); + galleryAddPic(); + + } catch (Exception e) { + e.printStackTrace(); + } + + } + + delegate.processFinish(filePath); + Log.i(getClass().getSimpleName(), "Results: " + filePath); + + } + + } private void galleryAddPic() { diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.java new file mode 100644 index 0000000..6f92273 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.java @@ -0,0 +1,245 @@ +package h_mal.appttude.com.driver.Global; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.drawable.Drawable; +import android.provider.ContactsContract; +import android.support.annotation.NonNull; +import android.support.v4.view.PagerAdapter; +import android.support.v4.view.ViewPager; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.animation.AlphaAnimation; +import android.widget.ImageView; +import android.widget.ProgressBar; + +import com.squareup.picasso.Picasso; +import com.squareup.picasso.Target; + +import java.util.ArrayList; +import java.util.List; + +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.MainActivity.imageViewClass; +import static h_mal.appttude.com.driver.MainActivity.loadImage; + +public class ImageSwiperClass{ + + private static final String TAG = "ImageSwiperClass"; + + private ImageView left; + private ImageView mainImage; + private ImageView right; + + private List imageStrings; + private Context context; + + private SlidingImageViewAdapter adapter; + + ViewPager viewPager; + public ImageView delete; + + public ImageSwiperClass(Context context, View wholeView) { + this.context = context; + + left = wholeView.findViewById(R.id.left); + right = wholeView.findViewById(R.id.right); + + left.setOnClickListener(leftClick); + right.setOnClickListener(rightClick); + + viewPager = wholeView.findViewById(R.id.view_pager); + + delete = wholeView.findViewById(R.id.delete); + + viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { + @Override + public void onPageScrolled(int i, float v, int i1) { + AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f); + animation1.setDuration(200); + animation1.setFillAfter(true); + delete.startAnimation(animation1); + } + + @Override + public void onPageSelected(final int i) { + Log.i(TAG, "onPageSelected: position = " + i); + setArrows(); + delete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + deleteDialog(i); + } + }); + } + + @Override + public void onPageScrollStateChanged(int i) { + + } + }); + + Log.i(TAG, "ImageSwiperClass: viewpager = " + viewPager.getId()); + } + + public List getImageStrings() { + return imageStrings; + } + + public void addPhotoString(String s){ + if (imageStrings == null){ + imageStrings = new ArrayList<>(); + } + imageStrings.add(s); + + adapter = new SlidingImageViewAdapter(); + viewPager.setAdapter(adapter); + } + + public void reinstantiateList(List imageStrings){ + this.imageStrings = imageStrings; + + adapter = new SlidingImageViewAdapter(); + viewPager.setAdapter(adapter); + + setArrows(); + } + + public void hideDelete(){ + delete.setVisibility(View.INVISIBLE); + Log.i(TAG, "hideDelete: hides deleete?"); + } + + private View.OnClickListener leftClick = new View.OnClickListener() { + @Override + public void onClick(View v) { + viewPager.setCurrentItem(viewPager.getCurrentItem() - 1); + setArrows(); + } + }; + + private View.OnClickListener rightClick = new View.OnClickListener() { + @Override + public void onClick(View v) { + viewPager.setCurrentItem(viewPager.getCurrentItem() +1); + setArrows(); + } + }; + + private void deleteDialog(final int position){ + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setMessage("Are you sure you want to delete?") + .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + imageStrings.remove(position); + viewPager.setAdapter(adapter); +// adapter.notifyDataSetChanged(); + } + }) + .setNegativeButton(android.R.string.cancel, null) + .create() + .show(); + } + + private void setArrows(){ + if (imageStrings != null && imageStrings.size() > 0){ + //left arrow + if (viewPager.getCurrentItem() > 0){ + setAnimation(left,true); + }else{ + setAnimation(left,false); + } + + //right + if (viewPager.getCurrentItem() == imageStrings.size() -1){ + setAnimation(right,false); + }else{ + setAnimation(right,true); + } + } + if (imageStrings == null){ + setAnimation(left,false); + setAnimation(right,false); + } + } + + private void setAnimation(ImageView view,boolean up){ + float start; + float finish; + if(up){ + start = 0.2f; + finish = 1.0f; + }else { + start = 1.0f; + finish = 0.2f; + } +// if (view.getAlpha() != start){ + AlphaAnimation animation1 = new AlphaAnimation(start, finish); + animation1.setDuration(500); + animation1.setFillAfter(true); +// view.startAnimation(animation1); + view.setAlpha(finish); +// } + + } + + class SlidingImageViewAdapter extends PagerAdapter{ + + @Override + public int getCount() { + if (imageStrings == null || imageStrings.size() < 1){ + delete.setVisibility(View.GONE); + return 0; + }else { + delete.setVisibility(View.VISIBLE); + return imageStrings.size(); + } + + } + + @Override + public void destroyItem(@NonNull ViewGroup container, int position,Object object) { + if (object != null){ + container.removeView((View) object); + }else { + container.removeViewAt(position); + } + } + + @Override + public boolean isViewFromObject(@NonNull View view, @NonNull Object o) { + return view.equals(o); + } + + @NonNull + @Override + public Object instantiateItem(@NonNull ViewGroup container, final int position) { + View pagerPic = LayoutInflater.from(context).inflate(R.layout.insurance_item,container,false); + setArrows(); + + if(imageStrings != null && imageStrings.size() >0){ + mainImage = pagerPic.getRootView().findViewById(R.id.main_image); + final ProgressBar pb = pagerPic.findViewById(R.id.pb_ins); + + Picasso.get().load(imageStrings.get(position)).into(loadImage(pb,mainImage)); + + } + + container.addView(pagerPic, 0); + + return pagerPic; + } + + @Override + public void notifyDataSetChanged() { + super.notifyDataSetChanged(); + } + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.java new file mode 100644 index 0000000..0dcb4b1 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.java @@ -0,0 +1,121 @@ +package h_mal.appttude.com.driver.Global; + +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.net.Uri; +import android.os.Bundle; +import android.os.Environment; +import android.provider.MediaStore; +import android.support.design.widget.FloatingActionButton; +import android.support.v4.app.Fragment; +import android.support.v4.content.ContextCompat; +import android.support.v7.app.AppCompatActivity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ImageView; + +import com.github.chrisbanes.photoview.PhotoView; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; + +import h_mal.appttude.com.driver.R; + +import static android.os.Environment.DIRECTORY_PICTURES; +import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.photoURI; +import static h_mal.appttude.com.driver.MainActivity.getDateStamp; + +public class ImageViewClass { + + public static final String IMAGE_VALUE = "image"; + private static Bitmap bitmap; + + public ImageViewClass() { + } + + public void open(Bitmap bitmap){ + ImageViewClass.bitmap = bitmap; + executeFragment(new ImageViewerFragment()); + } + + public static class ImageViewerFragment extends Fragment { + + private View view; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + view = inflater.inflate(R.layout.fragment_image_viewer, container, false); + + FloatingActionButton fab = view.findViewById(R.id.download_pic); + + if (bitmap != null){ + PhotoView photoView = view.findViewById(R.id.photo_view); + photoView.setImageBitmap(bitmap); + + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + try { + downloadPic(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } + }); + } + + + + return view; + } + + @Override + public void onResume() { + super.onResume(); + ((AppCompatActivity)getActivity()).getSupportActionBar().hide(); + getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + @Override + public void onStop() { + super.onStop(); + ((AppCompatActivity)getActivity()).getSupportActionBar().show(); + getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); + } + + private void downloadPic() throws FileNotFoundException { + File f = Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES); + String fname = "driver"+ getDateStamp() + ".jpg"; + File image = new File(f,fname); + FileOutputStream fileOutputStream = new FileOutputStream(image); + + bitmap.compress(Bitmap.CompressFormat.JPEG, 100,fileOutputStream); + try { + fileOutputStream.flush(); + fileOutputStream.close(); + + Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); + Uri contentUri = Uri.fromFile(image); + mediaScanIntent.setData(contentUri); + getActivity().sendBroadcast(mediaScanIntent); + } catch (IOException e) { + e.printStackTrace(); + } + } + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.java b/app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.java new file mode 100644 index 0000000..7a7ae56 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.java @@ -0,0 +1,155 @@ +package h_mal.appttude.com.driver.Global; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.support.annotation.NonNull; +import android.view.View; +import android.widget.ImageView; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; + +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_DENIED; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING; +import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVED; +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_DETAILS_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_APPROVALS; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_DETAILS_FIREBASE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; +import static h_mal.appttude.com.driver.MainActivity.viewController; + +public class SetApprovalDialog{ + + private final String[] groupNames = {"Pending","Denied","Approved"}; + private String approvalNameString; + + public int statusCode; + private Activity activity; + private String userId; + private ImageView imageView; + + public SetApprovalDialog(int statusCode, Activity activity, String userId, int position, ImageView imageView) { + this.statusCode = statusCode; + this.activity = activity; + this.userId = userId; + this.imageView = imageView; + this.approvalNameString = getElement(position); + + init(); + } + + public void init(){ + int checkedItem; + switch (statusCode){ + case APPROVAL_PENDING: + checkedItem = 0; + break; + case APPROVAL_DENIED: + checkedItem = 1; + break; + case APPROVED: + checkedItem = 2; + break; + default: + checkedItem = -1; + break; + } + + AlertDialog.Builder alertBuilder = new AlertDialog.Builder(activity); + alertBuilder.setSingleChoiceItems(groupNames, checkedItem, singleChoiceListener); +// .setPositiveButton(android.R.string.ok, submit); + alertBuilder.create().getOwnerActivity(); + alertBuilder.show(); + } + + DialogInterface.OnClickListener singleChoiceListener = new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + switch (which) { + case 0: + statusCode = APPROVAL_PENDING; + publishStatuscode(statusCode, dialog); + return; + case 1: + statusCode = APPROVAL_DENIED; + publishStatuscode(statusCode, dialog); + return; + case 2: + statusCode = APPROVED; + publishStatuscode(statusCode, dialog); + return; + } + } + }; + + private void publishStatuscode(final int status, final DialogInterface dialog){ + viewController.progress(View.VISIBLE); + + if (!approvalNameString.equals("")){ + mDatabase.child(USER_FIREBASE).child(userId).child(USER_APPROVALS).child(approvalNameString) + .setValue(status).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT).show(); + imageView.setImageResource(approvalsClass.setImageResource(status)); + dialog.dismiss(); + }else{ + Toast.makeText(activity, "Status change unsuccessful", Toast.LENGTH_SHORT).show(); + } + viewController.progress(View.GONE); + } + }); + }else { + Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show(); + } + + } + + private String getElement(int i){ + String element = ""; + + switch (i){ + case 0: + element = DRIVER_DETAILS_FIREBASE + APPROVAL_CONSTANT; + break; + case 1: + element = DRIVERS_LICENSE_FIREBASE + APPROVAL_CONSTANT; + break; + case 2: + element = PRIVATE_HIRE_FIREBASE + APPROVAL_CONSTANT; + break; + case 3: + element = VEHICLE_DETAILS_FIREBASE + APPROVAL_CONSTANT; + break; + case 4: + element = INSURANCE_FIREBASE + APPROVAL_CONSTANT; + break; + case 5: + element = MOT_FIREBASE + APPROVAL_CONSTANT; + break; + case 6: + element = LOG_BOOK_FIREBASE + APPROVAL_CONSTANT; + break; + case 7: + element = PRIVATE_HIRE_VEHICLE_LICENSE + APPROVAL_CONSTANT; + + } + + return element; + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ViewController.java b/app/src/main/java/h_mal/appttude/com/driver/Global/ViewController.java new file mode 100644 index 0000000..26e1adc --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Global/ViewController.java @@ -0,0 +1,32 @@ +package h_mal.appttude.com.driver.Global; + +import android.app.Activity; +import android.view.View; + +public class ViewController { + + private Activity activity; + + public ViewController(Activity activity) { + this.activity = activity; + } + + public void progress(int vis){ + if (activity instanceof ViewControllerInterface){ + ((ViewControllerInterface) activity).progressVisibility(vis); + } + } + + public void reloadDrawer(){ + if (activity instanceof ViewControllerInterface){ + ((ViewControllerInterface) activity).updateDrawer(); + } + } + + public interface ViewControllerInterface { + + void progressVisibility(int vis); + + void updateDrawer(); + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/InsuranceFragment.java b/app/src/main/java/h_mal/appttude/com/driver/InsuranceFragment.java deleted file mode 100644 index 0fd5139..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/InsuranceFragment.java +++ /dev/null @@ -1,43 +0,0 @@ -package h_mal.appttude.com.driver; - -import android.content.Context; -import android.net.Uri; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - - -public class InsuranceFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_insurance, container, false); - - TextView uploadInsurance = view.findViewById(R.id.uploadInsurance); - - - - uploadInsurance.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - } - }); - - return view; - } - -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/MainActivity.java b/app/src/main/java/h_mal/appttude/com/driver/MainActivity.java index 736454c..2ffd32d 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/MainActivity.java +++ b/app/src/main/java/h_mal/appttude/com/driver/MainActivity.java @@ -2,17 +2,16 @@ package h_mal.appttude.com.driver; import android.Manifest; import android.app.Activity; -import android.content.Context; +import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; -import android.support.design.widget.Snackbar; +import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; -import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; -import android.support.v4.app.FragmentTransaction; import android.support.v7.app.AlertDialog; import android.util.Log; import android.view.View; @@ -24,23 +23,49 @@ import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; +import android.view.WindowManager; import android.widget.ImageView; +import android.widget.ProgressBar; import android.widget.TextView; -import android.widget.Toast; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; +import com.google.firebase.database.ValueEventListener; import com.google.firebase.storage.FirebaseStorage; import com.google.firebase.storage.StorageReference; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonElement; +import com.google.gson.JsonParser; import com.squareup.picasso.Picasso; +import com.squareup.picasso.Target; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; +import h_mal.appttude.com.driver.Driver.DriverOverallFragment; +import h_mal.appttude.com.driver.Driver.VehicleOverallFragment; +import h_mal.appttude.com.driver.Driver.VehicleSetupFragment; +import h_mal.appttude.com.driver.Driver.DriverProfileFragment; +import h_mal.appttude.com.driver.Driver.homeDriverFragment; +import h_mal.appttude.com.driver.Global.ApprovalsClass; +import h_mal.appttude.com.driver.Global.ArchiveClass; +import h_mal.appttude.com.driver.Global.ImageViewClass; +import h_mal.appttude.com.driver.Global.ViewController; +import h_mal.appttude.com.driver.SuperUser.homeSuperUserFragment; +import h_mal.appttude.com.driver.User.LoginActivity; +import h_mal.appttude.com.driver.User.profileFragment; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; + public class MainActivity extends AppCompatActivity - implements NavigationView.OnNavigationItemSelectedListener { + implements NavigationView.OnNavigationItemSelectedListener, ViewController.ViewControllerInterface { private static String TAG = MainActivity.class.getSimpleName(); @@ -50,7 +75,14 @@ public class MainActivity extends AppCompatActivity public static StorageReference storageReference; public static DatabaseReference mDatabase; - public static NavigationView navigationView; + public NavigationView navigationView; + ProgressBar progressBar; + public Toolbar toolbar; + + public static ViewController viewController; + public static ImageViewClass imageViewClass; + public static ApprovalsClass approvalsClass; + public static ArchiveClass archiveClass; private static final int REQUEST_EXTERNAL_STORAGE = 1; private static String[] PERMISSIONS_STORAGE = { @@ -63,12 +95,22 @@ public class MainActivity extends AppCompatActivity super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + viewController = new ViewController(this); + imageViewClass = new ImageViewClass(); + approvalsClass = new ApprovalsClass(); + archiveClass = new ArchiveClass(); + auth = FirebaseAuth.getInstance(); storage = FirebaseStorage.getInstance(); storageReference = storage.getReference(); mDatabase = FirebaseDatabase.getInstance().getReference(); - Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + DatabaseReference ref = mDatabase.child(USER_FIREBASE) + .child(auth.getCurrentUser().getUid()) + .child("role"); + + + toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); @@ -79,20 +121,91 @@ public class MainActivity extends AppCompatActivity navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); - - fragmentManager = getSupportFragmentManager(); - executeFragment(new homeFragment()); - setupDrawer(); + fragmentManager = getSupportFragmentManager(); + fragmentManager.addOnBackStackChangedListener(backStackChangedListener); + + progressBar = findViewById(R.id.progress_bar); + progressBar.setVisibility(View.VISIBLE); + + ref.addListenerForSingleValueEvent(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + String role = (String) dataSnapshot.getValue(); + Log.i(TAG, "onDataChange: " + role); + if (role.equals("driver")){ + executeFragment(new homeDriverFragment()); + + }else if(role.equals("super_user")){ + executeFragment(new homeSuperUserFragment()); + } + drawerMenuItems(role); + progressBar.setVisibility(View.GONE); + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + progressBar.setVisibility(View.GONE); + } + }); } - public static void executeFragment(Fragment f){ - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); - fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit(); + public FragmentManager.OnBackStackChangedListener backStackChangedListener= new FragmentManager.OnBackStackChangedListener() { + @Override + public void onBackStackChanged() { + String fragmentString = fragmentManager.getFragments().get(0).getClass().getSimpleName(); + String title; + + switch (fragmentString){ + case "DriverProfileFragment": + title = "Driver Profile"; + break; + case "DriverLicenseFragment": + title = "Drivers License"; + break; + case "InsuranceFragment": + title = "Insurance"; + break; + case "logbookFragment": + title = "Logbook"; + break; + case "MotFragment": + title = "M.O.T"; + break; + case "PrivateHireLicenseFragment": + title = "Private Hire License"; + break; + case "VehicleSetupFragment": + title = "Vehicle Profile"; + break; + case "UserMainFragment": + return; + case "ArchiveFragment": + return; + default: + title = getResources().getString(R.string.app_name); + } + + setTitle(title); + } + }; + + @Override + public void setTitle(CharSequence title) { +// super.setTitle(title); + + toolbar.setTitle(title); } - public static void setupDrawer(){ + public void drawerMenuItems(String s){ + if (s.equals("super_user")){ + Menu menu = navigationView.getMenu(); + menu.removeGroup(R.id.menu_group); + } + } + + public void setupDrawer(){ View header = navigationView.getHeaderView(0); TextView driverEmail = header.findViewById(R.id.driver_email); @@ -108,14 +221,22 @@ public class MainActivity extends AppCompatActivity driverName.setText(user.getDisplayName()); } - Log.i(TAG, "setupDrawer: "+ storageReference.child("images/"+auth.getCurrentUser().getEmail()+"/profile_pic").getDownloadUrl()); - Picasso.get() .load(user.getPhotoUrl()) - .placeholder(R.mipmap.ic_launcher_round) + .placeholder(R.drawable.choice_img_round) .into(driverImage); } + TextView textView = findViewById(R.id.logout); + textView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + auth.signOut(); + Intent intent = new Intent(getApplicationContext(),LoginActivity.class); + startActivity(intent); + finish(); + } + }); } @@ -126,9 +247,23 @@ public class MainActivity extends AppCompatActivity drawer.closeDrawer(GravityCompat.START); } else { if (fragmentManager.getBackStackEntryCount() > 1) { - fragmentManager.popBackStack(); + if (fragmentManager.getFragments().get(0).getClass() + .getSimpleName().equals("InsuranceFragment")){ + new AlertDialog.Builder(this) + .setTitle("Return to previous?") + .setMessage("Progress unsaved. Are you sure?") + .setNegativeButton(android.R.string.no, null) + .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface arg0, int arg1) { + fragmentManager.popBackStack(); + } + }).create().show(); + }else{ + fragmentManager.popBackStack(); + } + }else{ - new AlertDialog.Builder(this,R.style.Theme_AppCompat_Dialog_Alert) + new AlertDialog.Builder(this) .setTitle("Leave?") .setMessage("Are you sure you want to exit?") .setNegativeButton(android.R.string.no, null) @@ -142,13 +277,6 @@ public class MainActivity extends AppCompatActivity } } - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.main, menu); - return true; - } - @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will @@ -174,9 +302,9 @@ public class MainActivity extends AppCompatActivity // Handle the camera action executeFragment(new profileFragment()); } else if (id == R.id.nav_gallery) { - executeFragment(new driverProfileFragment()); + executeFragment(new DriverOverallFragment()); } else if (id == R.id.nav_slideshow) { - executeFragment(new VehicleSetupFragment()); + executeFragment(new VehicleOverallFragment()); } DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); @@ -198,8 +326,72 @@ public class MainActivity extends AppCompatActivity } } + public static Target loadImage (final ProgressBar pb, final ImageView mainImage){ + + Target target = new Target() { + @Override + public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) { + pb.setVisibility(View.GONE); + + mainImage.setImageBitmap(bitmap); + mainImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + imageViewClass.open(bitmap); + } + }); + } + + @Override + public void onBitmapFailed(Exception e, Drawable errorDrawable) { + pb.setVisibility(View.GONE); + } + + @Override + public void onPrepareLoad(Drawable placeHolderDrawable) { + pb.setVisibility(View.VISIBLE); + } + }; + mainImage.setTag(target); + + return target; + + } + public static String getDateStamp(){ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmm"); return sdf.format(new Date()); } + + public static String getDateTimeStamp(){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss"); + return sdf.format(new Date()); + } + + public static String setAsDateTime(String strCurrentDate) throws ParseException { + SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_HHmmss"); + Date newDate = format.parse(strCurrentDate); + + format = new SimpleDateFormat("dd/MM/yyyy"); + return format.format(newDate); + } + + public static void printObjectAsJson(String TAG, Object o){ + Gson gson = new GsonBuilder().setPrettyPrinting().create(); + JsonParser jp = new JsonParser(); + JsonElement je = jp.parse(new Gson().toJson(o)); + String prettyJsonString = gson.toJson(je); + + Log.i(TAG, "onBindViewHolder: object" + prettyJsonString); + } + + @Override + public void progressVisibility(int vis) { + progressBar.setVisibility(vis); + } + + @Override + public void updateDrawer() { + setupDrawer(); + } } diff --git a/app/src/main/java/h_mal/appttude/com/driver/MotFragment.java b/app/src/main/java/h_mal/appttude/com/driver/MotFragment.java deleted file mode 100644 index efeff74..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/MotFragment.java +++ /dev/null @@ -1,43 +0,0 @@ -package h_mal.appttude.com.driver; - -import android.content.Context; -import android.net.Uri; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - - -public class MotFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_mot, container, false); - - TextView uploadMot = view.findViewById(R.id.uploadmot); - - - - uploadMot.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - } - }); - - return view; - } - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.java new file mode 100644 index 0000000..38d5f0e --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.java @@ -0,0 +1,59 @@ +package h_mal.appttude.com.driver.Objects; + +public class ApprovalsObject { + + public int driver_details_approval; + public int driver_license_approval; + public int private_hire_approval; + public int vehicle_details_approval; + public int mot_details_approval; + public int insurance_details_approval; + public int log_book_approval; + public int private_hire_vehicle_approval; + + public ApprovalsObject() { + } + + public ApprovalsObject(int driver_details_approval, int driver_license_approval, int private_hire_approval, int vehicle_details_approval, int mot_details_approval, int insurance_details_approval, int log_book_approval, int private_hire_vehicle_approval) { + this.driver_details_approval = driver_details_approval; + this.driver_license_approval = driver_license_approval; + this.private_hire_approval = private_hire_approval; + this.vehicle_details_approval = vehicle_details_approval; + this.mot_details_approval = mot_details_approval; + this.insurance_details_approval = insurance_details_approval; + this.log_book_approval = log_book_approval; + this.private_hire_vehicle_approval = private_hire_vehicle_approval; + } + + public int getPh_car_approval() { + return private_hire_vehicle_approval; + } + + public int getDriver_details_approval() { + return driver_details_approval; + } + + public int getDriver_license_approval() { + return driver_license_approval; + } + + public int getPrivate_hire_approval() { + return private_hire_approval; + } + + public int getVehicle_details_approval() { + return vehicle_details_approval; + } + + public int getMot_details_approval() { + return mot_details_approval; + } + + public int getInsurance_details_approval() { + return insurance_details_approval; + } + + public int getLog_book_approval() { + return log_book_approval; + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.java new file mode 100644 index 0000000..4271a41 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.java @@ -0,0 +1,56 @@ +package h_mal.appttude.com.driver.Objects; + +import java.util.HashMap; +import java.util.List; + +public class ArchiveObject { + + public HashMap driver_license; + public HashMap private_hire; + public HashMap vehicle_details; + public HashMap insurance_details; + public HashMap mot_details; + public HashMap log_book; + public HashMap private_hire_vehicle; + + public ArchiveObject() { + } + + public ArchiveObject(HashMap driver_license, HashMap private_hire, HashMap vehicle_details, HashMap insurance_details, HashMap mot_details, HashMap log_book, HashMap private_hire_vehicle) { + this.driver_license = driver_license; + this.private_hire = private_hire; + this.vehicle_details = vehicle_details; + this.insurance_details = insurance_details; + this.mot_details = mot_details; + this.log_book = log_book; + this.private_hire_vehicle = private_hire_vehicle; + } + + public HashMap getPh_car() { + return private_hire_vehicle; + } + + public HashMap getDriver_license() { + return driver_license; + } + + public HashMap getPrivate_hire() { + return private_hire; + } + + public HashMap getVehicle_details() { + return vehicle_details; + } + + public HashMap getInsurance_details() { + return insurance_details; + } + + public HashMap getMot_details() { + return mot_details; + } + + public HashMap getLog_book() { + return log_book; + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.java index 64f0eb3..4fc907a 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.java +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.java @@ -1,4 +1,31 @@ package h_mal.appttude.com.driver.Objects; -class InsuranceObject { +import java.util.List; + +public class InsuranceObject { + + public List photoStrings; + public String insurerName; + public String expiryDate; + + public InsuranceObject() { + } + + public InsuranceObject(List photoStrings, String insurerName, String expiryDate) { + this.photoStrings = photoStrings; + this.insurerName = insurerName; + this.expiryDate = expiryDate; + } + + public List getPhotoStrings() { + return photoStrings; + } + + public String getInsurerName() { + return insurerName; + } + + public String getExpiryDate() { + return expiryDate; + } } diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.java index b1722f1..43ac12e 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.java +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.java @@ -1,4 +1,23 @@ package h_mal.appttude.com.driver.Objects; -class LogbookObject { +public class LogbookObject { + + public String photoString; + public String v5cnumber; + + public LogbookObject(String photoString, String v5cnumber) { + this.photoString = photoString; + this.v5cnumber = v5cnumber; + } + + public LogbookObject() { + } + + public String getPhotoString() { + return photoString; + } + + public String getV5cnumber() { + return v5cnumber; + } } diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/MotObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/MotObject.java index a4f9ce2..d895221 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/MotObject.java +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/MotObject.java @@ -1,4 +1,23 @@ package h_mal.appttude.com.driver.Objects; public class MotObject { + + public String motImageString; + public String motExpiry; + + public MotObject() { + } + + public MotObject(String motImageString, String motExpiry) { + this.motImageString = motImageString; + this.motExpiry = motExpiry; + } + + public String getMotImageString() { + return motImageString; + } + + public String getMotExpiry() { + return motExpiry; + } } diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.java new file mode 100644 index 0000000..5389b90 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.java @@ -0,0 +1,29 @@ +package h_mal.appttude.com.driver.Objects; + +public class PrivateHireVehicleObject { + + public String phCarImageString; + public String phCarNumber; + public String phCarExpiry; + + public PrivateHireVehicleObject(String phCarImageString, String phCarNumber, String phCarExpiry) { + this.phCarImageString = phCarImageString; + this.phCarNumber = phCarNumber; + this.phCarExpiry = phCarExpiry; + } + + public PrivateHireVehicleObject() { + } + + public String getPhCarImageString() { + return phCarImageString; + } + + public String getPhCarNumber() { + return phCarNumber; + } + + public String getPhCarExpiry() { + return phCarExpiry; + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.java new file mode 100644 index 0000000..9f77738 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.java @@ -0,0 +1,29 @@ +package h_mal.appttude.com.driver.Objects; + +public class UserObject { + + public String profileName; + public String profileEmail; + public String profilePicString; + + public UserObject() { + } + + public UserObject(String profileName, String profileEmail, String profilePicString) { + this.profileName = profileName; + this.profileEmail = profileEmail; + this.profilePicString = profilePicString; + } + + public String getProfileName() { + return profileName; + } + + public String getProfileEmail() { + return profileEmail; + } + + public String getProfilePicString() { + return profilePicString; + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/VehicleProfileObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/VehicleProfileObject.java index 652a941..3349076 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/VehicleProfileObject.java +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/VehicleProfileObject.java @@ -11,13 +11,23 @@ public class VehicleProfileObject { public String keeperPostCode; public String startDate; public boolean seized; - public MotObject motObject; - public InsuranceObject insuranceObject; - public LogbookObject logbookObject; public VehicleProfileObject() { } + public VehicleProfileObject(String reg, String make, String model, String colour, String keeperName, + String keeperAddress, String keeperPostCode, String startDate, boolean seized) { + this.reg = reg; + this.make = make; + this.model = model; + this.colour = colour; + this.keeperName = keeperName; + this.keeperAddress = keeperAddress; + this.keeperPostCode = keeperPostCode; + this.startDate = startDate; + this.seized = seized; + } + public String getReg() { return reg; } @@ -54,15 +64,4 @@ public class VehicleProfileObject { return seized; } - public MotObject getMotObject() { - return motObject; - } - - public InsuranceObject getInsuranceObject() { - return insuranceObject; - } - - public LogbookObject getLogbookObject() { - return logbookObject; - } } diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.java new file mode 100644 index 0000000..62a776f --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.java @@ -0,0 +1,59 @@ +package h_mal.appttude.com.driver.Objects; + +import h_mal.appttude.com.driver.Objects.ApprovalsObject; +import h_mal.appttude.com.driver.Objects.ArchiveObject; +import h_mal.appttude.com.driver.Objects.UserObject; +import h_mal.appttude.com.driver.Objects.WholeObject.DriverProfile; +import h_mal.appttude.com.driver.Objects.WholeObject.VehicleProfile; + +public class WholeDriverObject { + + public DriverProfile driver_profile; + public String role; + public ArchiveObject archive; + public UserObject user_details; + public VehicleProfile vehicle_profile; + public ApprovalsObject approvalsObject; + public String driver_number; + + public WholeDriverObject(DriverProfile driver_profile, String role, ArchiveObject archive, UserObject user_details, VehicleProfile vehicle_profile, ApprovalsObject approvalsObject, String driver_number) { + this.driver_profile = driver_profile; + this.role = role; + this.archive = archive; + this.user_details = user_details; + this.vehicle_profile = vehicle_profile; + this.approvalsObject = approvalsObject; + this.driver_number = driver_number; + } + + public WholeDriverObject() { + } + + public String getDriver_number() { + return driver_number; + } + + public ArchiveObject getArchive() { + return archive; + } + + public DriverProfile getDriver_profile() { + return driver_profile; + } + + public String getRole() { + return role; + } + + public UserObject getUser_details() { + return user_details; + } + + public VehicleProfile getVehicle_profile() { + return vehicle_profile; + } + + public ApprovalsObject getApprovalsObject() { + return approvalsObject; + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.java new file mode 100644 index 0000000..17de05a --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.java @@ -0,0 +1,33 @@ +package h_mal.appttude.com.driver.Objects.WholeObject; + +import h_mal.appttude.com.driver.Objects.DriverProfileObject; +import h_mal.appttude.com.driver.Objects.DriversLicenseObject; +import h_mal.appttude.com.driver.Objects.PrivateHireObject; + +public class DriverProfile { + + public DriverProfileObject driver_profile; + public DriversLicenseObject driver_license; + public PrivateHireObject private_hire; + + public DriverProfile(DriverProfileObject driver_profile, DriversLicenseObject driver_license, PrivateHireObject private_hire) { + this.driver_profile = driver_profile; + this.driver_license = driver_license; + this.private_hire = private_hire; + } + + public DriverProfile() { + } + + public DriverProfileObject getDriver_profile() { + return driver_profile; + } + + public DriversLicenseObject getDriver_license() { + return driver_license; + } + + public PrivateHireObject getPrivate_hire() { + return private_hire; + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.java new file mode 100644 index 0000000..582abd0 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.java @@ -0,0 +1,56 @@ +package h_mal.appttude.com.driver.Objects.WholeObject; + +import android.os.Parcel; +import android.os.Parcelable; + +import h_mal.appttude.com.driver.Objects.WholeDriverObject; + +public class MappedObject implements Parcelable { + + public String userId; + public WholeDriverObject wholeDriverObject; + + public MappedObject(String userId, WholeDriverObject wholeDriverObject) { + this.userId = userId; + this.wholeDriverObject = wholeDriverObject; + } + + public MappedObject() { + } + + protected MappedObject(Parcel in) { + userId = in.readString(); + } + + public static final Creator CREATOR = new Creator() { + @Override + public MappedObject createFromParcel(Parcel in) { + return new MappedObject(in); + } + + @Override + public MappedObject[] newArray(int size) { + return new MappedObject[size]; + } + }; + + public String getUserId() { + return userId; + } + + public WholeDriverObject getWholeDriverObject() { + return wholeDriverObject; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(userId); + } + + +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.java b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.java new file mode 100644 index 0000000..f02023c --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.java @@ -0,0 +1,55 @@ +package h_mal.appttude.com.driver.Objects.WholeObject; + +import h_mal.appttude.com.driver.Objects.InsuranceObject; +import h_mal.appttude.com.driver.Objects.LogbookObject; +import h_mal.appttude.com.driver.Objects.MotObject; +import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject; +import h_mal.appttude.com.driver.Objects.VehicleProfileObject; + +public class VehicleProfile { + + public InsuranceObject insurance_details; + public LogbookObject log_book; + public MotObject mot_details; + public VehicleProfileObject vehicle_details; + public PrivateHireVehicleObject private_hire_vehicle; + + public VehicleProfile() { + } + +// public VehicleProfile(InsuranceObject insurance_details, LogbookObject log_book, MotObject mot_details, VehicleProfileObject vehicle_details) { +// this.insurance_details = insurance_details; +// this.log_book = log_book; +// this.mot_details = mot_details; +// this.vehicle_details = vehicle_details; +// } + + public VehicleProfile(InsuranceObject insurance_details, LogbookObject log_book, MotObject mot_details, VehicleProfileObject vehicle_details, PrivateHireVehicleObject private_hire_vehicle) { + this.insurance_details = insurance_details; + this.log_book = log_book; + this.mot_details = mot_details; + this.vehicle_details = vehicle_details; + this.private_hire_vehicle = private_hire_vehicle; + } + + + public PrivateHireVehicleObject getPrivateHireVehicleObject() { + return private_hire_vehicle; + } + + public InsuranceObject getInsurance_details() { + return insurance_details; + } + + public LogbookObject getLog_book() { + return log_book; + } + + public MotObject getMot_details() { + return mot_details; + } + + public VehicleProfileObject getVehicle_details() { + return vehicle_details; + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/RegisterActivity.java b/app/src/main/java/h_mal/appttude/com/driver/RegisterActivity.java deleted file mode 100644 index 545f391..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/RegisterActivity.java +++ /dev/null @@ -1,89 +0,0 @@ -package h_mal.appttude.com.driver; - -import android.content.Intent; -import android.support.annotation.NonNull; -import android.support.v7.app.AppCompatActivity; -import android.os.Bundle; -import android.text.Editable; -import android.text.TextUtils; -import android.text.TextWatcher; -import android.view.View; -import android.widget.Button; -import android.widget.EditText; -import android.widget.ProgressBar; -import android.widget.Toast; - -import com.google.android.gms.tasks.OnCompleteListener; -import com.google.android.gms.tasks.Task; -import com.google.firebase.auth.AuthResult; -import com.google.firebase.auth.FirebaseAuth; - -public class RegisterActivity extends AppCompatActivity { - - private FirebaseAuth auth; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_register); - - auth = FirebaseAuth.getInstance(); - - final EditText email = findViewById(R.id.email_register); - final EditText passwordTop = findViewById(R.id.password_top); - final EditText passwordBottom = findViewById(R.id.password_bottom); - final ProgressBar progressBar = findViewById(R.id.pb); - Button submit = findViewById(R.id.email_sign_up); - - submit.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - String emailText = email.getText().toString().trim(); - String passwordText = passwordTop.getText().toString().trim(); - String passwordTextBottom = passwordBottom.getText().toString().trim(); - - if (TextUtils.isEmpty(emailText)) { - Toast.makeText(getApplicationContext(), "Enter email address!", Toast.LENGTH_SHORT).show(); - email.setError(getString(R.string.error_field_required)); - return; - } - - if (TextUtils.isEmpty(passwordText)) { - Toast.makeText(getApplicationContext(), "Enter password!", Toast.LENGTH_SHORT).show(); - passwordTop.setError(getString(R.string.error_field_required)); - return; - } - - if (TextUtils.isEmpty(passwordTextBottom)) { - Toast.makeText(getApplicationContext(), "Enter password again!", Toast.LENGTH_SHORT).show(); - passwordBottom.setError(getString(R.string.error_field_required)); - return; - } - - if (passwordText.length() < 6) { - passwordTop.setError(getString(R.string.error_invalid_password)); - return; - } - - progressBar.setVisibility(View.VISIBLE); - //create user - auth.createUserWithEmailAndPassword(emailText, passwordText) - .addOnCompleteListener(RegisterActivity.this, new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - Toast.makeText(RegisterActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show(); - progressBar.setVisibility(View.GONE); - if (!task.isSuccessful()) { - Toast.makeText(RegisterActivity.this, "Authentication failed." + task.getException(), - Toast.LENGTH_SHORT).show(); - } else { - finish(); - } - } - }); - - } - }); - } -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.java b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.java new file mode 100644 index 0000000..a3ecdb3 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.java @@ -0,0 +1,305 @@ +package h_mal.appttude.com.driver.SuperUser; + +import android.app.Activity; +import android.content.Context; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.ImageView; +import android.widget.TextView; + +import h_mal.appttude.com.driver.Archive.ArchiveFragment; +import h_mal.appttude.com.driver.Driver.DriverLicenseFragment; +import h_mal.appttude.com.driver.Driver.InsuranceFragment; +import h_mal.appttude.com.driver.Driver.MotFragment; +import h_mal.appttude.com.driver.Driver.PrivateHireLicenseFragment; +import h_mal.appttude.com.driver.Driver.PrivateHireVehicleFragment; +import h_mal.appttude.com.driver.Driver.VehicleSetupFragment; +import h_mal.appttude.com.driver.Driver.DriverProfileFragment; +import h_mal.appttude.com.driver.Driver.logbookFragment; +import h_mal.appttude.com.driver.Global.SetApprovalDialog; +import h_mal.appttude.com.driver.Objects.ApprovalsObject; +import h_mal.appttude.com.driver.Objects.ArchiveObject; +import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject; +import h_mal.appttude.com.driver.Objects.WholeDriverObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.NO_DATE_PRESENT; +import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_DETAILS_FIREBASE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.archiveClass; + +public class ApprovalListAdapter extends ArrayAdapter { + + private String TAG = "ApprovalListAdapter"; + + String [] names = {"Driver Profile","Driver License","Private Hire","Vehicle Profile","Insurance","MOT","Logbook","P/H Vehicle"}; + + MappedObject mappedObject; + Activity activity; + int approvalCode; + + public ApprovalListAdapter(@NonNull Activity activity, @NonNull MappedObject[] objects) { + super(activity, 0, objects); + this.mappedObject = objects[0]; + this.activity = activity; + + } + + @NonNull + @Override + public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) { + View listItemView = convertView; + if (listItemView == null) { + listItemView = LayoutInflater.from(activity).inflate( + R.layout.approval_list_grid_item, parent, false); + } + + approvalCode = getApprovalStatusCode(position); + + TextView textView = listItemView.findViewById(R.id.approval_text); + textView.setText(names[position]); + + final ImageView imageView = listItemView.findViewById(R.id.approval_iv); + imageView.setImageResource(approvalsClass.setImageResource(approvalCode)); + + imageView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + new SetApprovalDialog(approvalCode,activity,mappedObject.getUserId(),position,imageView); + } + }); + + ImageView archiveImage = listItemView.findViewById(R.id.archive_icon); + if (mappedObject.getWholeDriverObject().archive != null){ + Log.i(TAG, "getView: archive = " + getArchive(position,mappedObject.getWholeDriverObject().getArchive())); + archiveImage.setVisibility(getArchive(position,mappedObject.getWholeDriverObject().getArchive())); + archiveImage.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + String s = null; + switch (position){ + case 1: + s = DRIVERS_LICENSE_FIREBASE; + break; + case 2: + s = PRIVATE_HIRE_FIREBASE; + break; + case 3: + s = VEHICLE_DETAILS_FIREBASE; + break; + case 4: + s = INSURANCE_FIREBASE; + break; + case 5: + s = MOT_FIREBASE; + break; + case 6: + s = LOG_BOOK_FIREBASE; + break; + case 7: + s = PRIVATE_HIRE_VEHICLE_LICENSE; + break; + + } + executeFragment(new ArchiveFragment(),mappedObject.getUserId(),s); + } + }); + } + + listItemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + getFragment(position); + } + }); + + listItemView.setMinimumHeight(parent.getHeight()/4); + listItemView.setPadding((int)convertDpToPixel(9,getContext()), + (int)convertDpToPixel(9,getContext()), + (int)convertDpToPixel(9,getContext()), + (int)convertDpToPixel(9,getContext())); + + return listItemView; + + } + + @Override + public int getCount() { + return 8; + } + + private int getArchive(int i, ArchiveObject archiveObject){ + Object o = null; + int visible; + + switch (i){ + case 0: + break; + case 1: + o = archiveObject.driver_license; + break; + case 2: + o = archiveObject.private_hire; + break; + case 3: + o = archiveObject.vehicle_details; + break; + case 4: + o = archiveObject.insurance_details; + break; + case 5: + o = archiveObject.mot_details; + break; + case 6: + o = archiveObject.log_book; + break; + case 7: + o = archiveObject.private_hire_vehicle; + + } + + if (o != null){ + visible = View.VISIBLE; + }else{ + visible = View.GONE; + } + + return visible; + } + + private void getFragment(int i){ + Fragment f = null; + WholeDriverObject wholeDriverObject = mappedObject.getWholeDriverObject(); + Object o = null; + switch (i) { + case 0: + f = new DriverProfileFragment(); + if (wholeDriverObject.driver_profile != null && wholeDriverObject.getDriver_profile().driver_profile != null) { + o = wholeDriverObject.getDriver_profile().getDriver_profile(); + } + break; + case 1: + f = new DriverLicenseFragment(); + if (wholeDriverObject.driver_profile != null && wholeDriverObject.getDriver_profile().driver_license != null) { + o = wholeDriverObject.getDriver_profile().getDriver_license(); + } + break; + case 2: + f = new PrivateHireLicenseFragment(); + if (wholeDriverObject.driver_profile != null && wholeDriverObject.getDriver_profile().private_hire != null) { + o = wholeDriverObject.getDriver_profile().getPrivate_hire(); + } + break; + case 3: + f = new VehicleSetupFragment(); + if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().vehicle_details != null){ + o = wholeDriverObject.getVehicle_profile().getVehicle_details(); + } + break; + case 4: + f = new InsuranceFragment(); + if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().insurance_details != null){ + o = wholeDriverObject.getVehicle_profile().getInsurance_details(); + } + break; + case 5: + f = new MotFragment(); + if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().mot_details != null){ + o = wholeDriverObject.getVehicle_profile().getMot_details(); + } + break; + case 6: + f = new logbookFragment(); + if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().log_book != null){ + o = wholeDriverObject.getVehicle_profile().getLog_book(); + } + break; + case 7: + f = new PrivateHireVehicleFragment(); + if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().private_hire_vehicle != null){ + o = wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject(); + } + break; + } + + if (o == null){ + executeFragment(f,mappedObject.getUserId()); + }else { + archiveClass.openDialogArchive(getContext(),o + ,mappedObject.getUserId(),f); + } + + } + + private int getApprovalStatusCode(int i){ + int statusCode = NO_DATE_PRESENT; + + if (mappedObject.getWholeDriverObject().approvalsObject != null){ + ApprovalsObject approvalsObject = mappedObject.getWholeDriverObject().getApprovalsObject(); + + switch (i) { + case 0: + if (approvalsObject.driver_details_approval != 0) { + statusCode = approvalsObject.getDriver_details_approval(); + } + break; + case 1: + if (approvalsObject.driver_license_approval != 0) { + statusCode = approvalsObject.getDriver_license_approval(); + } + break; + case 2: + if (approvalsObject.private_hire_approval != 0) { + statusCode = approvalsObject.getPrivate_hire_approval(); + } + break; + case 3: + if (approvalsObject.vehicle_details_approval != 0) { + statusCode = approvalsObject.getVehicle_details_approval(); + } + break; + case 4: + if (approvalsObject.insurance_details_approval != 0) { + statusCode = approvalsObject.getInsurance_details_approval(); + } + break; + case 5: + if (approvalsObject.mot_details_approval != 0) { + statusCode = approvalsObject.getMot_details_approval(); + } + break; + case 6: + if (approvalsObject.log_book_approval != 0) { + statusCode = approvalsObject.getLog_book_approval(); + } + break; + case 7: + if (approvalsObject.private_hire_vehicle_approval != 0) { + statusCode = approvalsObject.getPh_car_approval(); + } + break; + } + } + + return statusCode; + } + + public static float convertDpToPixel(float dp, Context context){ + return dp * ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT); + } + +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ListViewSuperAdapter.java b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ListViewSuperAdapter.java new file mode 100644 index 0000000..e1255d6 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ListViewSuperAdapter.java @@ -0,0 +1,182 @@ +package h_mal.appttude.com.driver.SuperUser; + +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.ProgressBar; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.database.DatabaseReference; +import com.squareup.picasso.Picasso; +import com.squareup.picasso.Target; + +import java.io.ByteArrayOutputStream; +import java.io.FileInputStream; +import java.util.List; + +import h_mal.appttude.com.driver.Objects.UserObject; +import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment; +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_NUMBER; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.imageViewClass; +import static h_mal.appttude.com.driver.MainActivity.loadImage; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; + +public class ListViewSuperAdapter extends ArrayAdapter { + + public ListViewSuperAdapter(@NonNull Context context, @NonNull List objects) { + super(context, 0, objects); + } + + @NonNull + @Override + public View getView(int i, @Nullable View convertView, @NonNull ViewGroup parent) { + View listItemView = convertView; + if (listItemView == null) { + listItemView = LayoutInflater.from(getContext()).inflate( + R.layout.list_item_layout, parent, false); + + + } + + Log.i("getviewposition", "getView: pos = " + i); + + final ImageView profilePicImage = listItemView.findViewById(R.id.driverPic); + final ProgressBar progressBar = listItemView.findViewById(R.id.pb_su_list); + TextView userNameTextView = listItemView.findViewById(R.id.username_text); + TextView userEmailTextView = listItemView.findViewById(R.id.emailaddress_text); + ImageView profileApprovalImage = listItemView.findViewById(R.id.approval_iv); + final TextView driverNo = listItemView.findViewById(R.id.driver_no); + final MappedObject mappedObject = getItem(i); + + final UserObject object = mappedObject.getWholeDriverObject().getUser_details(); + + if (object.profilePicString != null){ + Picasso.get() + .load(object.getProfilePicString()) + .resize(128,128) + .placeholder(R.drawable.choice_img_round) + .into(new Target() { + @Override + public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { + progressBar.setVisibility(View.GONE); + profilePicImage.setImageBitmap(bitmap); + + } + + @Override + public void onBitmapFailed(Exception e, Drawable errorDrawable) { + progressBar.setVisibility(View.GONE); + } + + @Override + public void onPrepareLoad(Drawable placeHolderDrawable) { + progressBar.setVisibility(View.VISIBLE); + } + }); + + }else { + profilePicImage.setImageResource(R.drawable.choice_img_round); + } + + userNameTextView.setText(object.getProfileName()); + userEmailTextView.setText(object.getProfileEmail()); + if (mappedObject.getWholeDriverObject().driver_number == null){ + driverNo.setText("0"); + }else { + String s = String.valueOf(mappedObject.getWholeDriverObject().getDriver_number()); + driverNo.setText(s); + } + + + driverNo.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + final EditText input = new EditText(getContext()); + LinearLayout layout = new LinearLayout(getContext()); + layout.setOrientation(LinearLayout.VERTICAL); + layout.setPadding(28,0,56,0); + input.setText(driverNo.getText().toString()); + input.setSelectAllOnFocus(true); + layout.addView(input); + builder.setTitle("Change Driver Number") + .setView(layout) + .setPositiveButton("Submit", new DialogInterface.OnClickListener() { + @Override + public void onClick(final DialogInterface dialog, int which) { + DatabaseReference reference = mDatabase.child(USER_FIREBASE).child(mappedObject.getUserId()) + .child(DRIVER_NUMBER); + Log.i("Dialog Driver no", "onClick: " + reference.toString()); + + reference.setValue(input.getText().toString()).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + Toast.makeText(getContext(), "Driver Number Changed", Toast.LENGTH_SHORT).show(); + dialog.dismiss(); + notifyDataSetChanged(); + Log.i("Dialog Driver no", "onComplete: " + task.getResult()); + }else { + Log.e("Dialog Driver no", "onComplete: ", task.getException()); + } + + } + }); + } + } + ).create() + .show(); + } + }); + + profileApprovalImage.setImageResource( + approvalsClass.getOverApprovalStatusCode(mappedObject.getWholeDriverObject())); + + + listItemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Bundle bundle = new Bundle(); + bundle.putParcelable("mapped",mappedObject); + + executeFragment(new UserMainFragment(),bundle); + } + }); + + return listItemView; + } + + private boolean hasImage(@NonNull ImageView view) { + Drawable drawable = view.getDrawable(); + boolean hasImage = (drawable != null); + + if (hasImage && (drawable instanceof BitmapDrawable)) { + hasImage = ((BitmapDrawable)drawable).getBitmap() != null; + } + + return hasImage; + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.java b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.java new file mode 100644 index 0000000..826cd81 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.java @@ -0,0 +1,49 @@ +package h_mal.appttude.com.driver.SuperUser; + +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.GridView; +import android.widget.ListView; + +import h_mal.appttude.com.driver.Archive.ArchiveFragment; +import h_mal.appttude.com.driver.Global.ExecuteFragment; +import h_mal.appttude.com.driver.MainActivity; +import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject; +import h_mal.appttude.com.driver.R; + +public class UserMainFragment extends Fragment { + + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_user_main, container, false); + + Log.i("UserMain", "onCreateView: height = " + view.getHeight()); + + MappedObject mappedObject = getArguments().getParcelable("mapped"); + + getActivity().setTitle(mappedObject.getWholeDriverObject().getUser_details().getProfileName()); + +// ListView listView = view.findViewById(R.id.approvals_list); + GridView listView = view.findViewById(R.id.approvals_list); + listView.setAdapter(new ApprovalListAdapter(getActivity(), new MappedObject[]{mappedObject})); + + return view; + } + + +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.java b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.java new file mode 100644 index 0000000..61556b6 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.java @@ -0,0 +1,186 @@ +package h_mal.appttude.com.driver.SuperUser; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.SharedPreferences; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ListView; + +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.ValueEventListener; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject; +import h_mal.appttude.com.driver.Objects.WholeDriverObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.MainActivity.approvalsClass; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; +import static h_mal.appttude.com.driver.MainActivity.printObjectAsJson; +import static h_mal.appttude.com.driver.MainActivity.viewController; + + +public class homeSuperUserFragment extends Fragment { + + DatabaseReference users; + ListViewSuperAdapter listViewSuperAdapter; + + List mappedObjectList; + private SharedPreferences sharedPreferences; + private int sortOrder; + private boolean sortDesc; + private static final String SORT = "SORT"; + private static final String REVERSED = "REVERSED"; + private static final String TAG = "homeSuperUserFragment"; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setHasOptionsMenu(true); + + users = mDatabase.child(USER_FIREBASE); + mappedObjectList = new ArrayList<>(); + + viewController.progress(View.VISIBLE); + users.addValueEventListener(valueEventListener); + + sharedPreferences = getActivity().getSharedPreferences("PREFS", 0); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_home_super_user, container, false); + + final ListView list = view.findViewById(R.id.list_view_super); + + listViewSuperAdapter = new ListViewSuperAdapter(getContext(),mappedObjectList); + list.setAdapter(listViewSuperAdapter); + + return view; + } + + ValueEventListener valueEventListener = new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot snapshot) { + mappedObjectList.clear(); + Log.i("Count " ,""+snapshot.getChildrenCount()); + for (DataSnapshot postSnapshot: snapshot.getChildren()) { + if (postSnapshot.child("role").getValue().toString().equals("driver")){ + printObjectAsJson("object",postSnapshot.toString()); + mappedObjectList.add(new MappedObject(postSnapshot.getKey(),postSnapshot.getValue(WholeDriverObject.class))); + } + } + sortDate(sortOrder,sortDesc); + viewController.progress(View.GONE); + } + + @Override + public void onCancelled(@NonNull DatabaseError databaseError) { + viewController.progress(View.GONE); + } + + + }; + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + inflater.inflate(R.menu.menu_calls_fragment, menu); + super.onCreateOptionsMenu(menu, inflater); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == R.id.archive){ + final String[] grpname = {"Driver Name","Driver Number","Approval"}; + sortOrder = sharedPreferences.getInt(SORT,0); + int checkedItem = sortOrder; + final int[] compareInt = {0}; + + final AlertDialog.Builder builder = new AlertDialog.Builder(getContext()); + builder.setTitle("Sort by:") + .setSingleChoiceItems(grpname, checkedItem, new DialogInterface + .OnClickListener() { + public void onClick(DialogInterface dialog, int item) { + switch (item) { + case 0: + compareInt[0] = 0; + return; + case 1: + compareInt[0] = 1; + return; + case 2: + compareInt[0] = 2; + } + } + }).setPositiveButton("Ascending", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + sortDate(compareInt[0],false); + dialog.dismiss(); + } + }).setNegativeButton("Descending", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + sortDate(compareInt[0],true); + dialog.dismiss(); + } + }) + .create().show(); + } + + return super.onOptionsItemSelected(item); + } + + private void sortDate(final int compareInt, boolean reversed){ + Log.i(TAG, "sortDate: " + compareInt + " - " + reversed); + Comparator comparator = new Comparator() { + @Override + public int compare(MappedObject o1, MappedObject o2) { + switch (compareInt){ + case 0: + return o1.getWholeDriverObject().getUser_details().getProfileName().compareTo( + o2.getWholeDriverObject().getUser_details().getProfileName()); + case 1: + return o1.getWholeDriverObject().getDriver_number() + .compareTo(o2.getWholeDriverObject().getDriver_number()); + case 2: + return approvalsClass.getOverApprovalStatusCode(o1.wholeDriverObject) - + approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject); + default: + return approvalsClass.getOverApprovalStatusCode(o1.wholeDriverObject) - + approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject); + } + } + }; + + sharedPreferences.edit().putInt(SORT,compareInt).apply(); + sharedPreferences.edit().putBoolean(REVERSED,reversed).apply(); + + if (reversed){ + Collections.sort(mappedObjectList,comparator.reversed()); + }else { + Collections.sort(mappedObjectList,comparator); + } + + listViewSuperAdapter.notifyDataSetChanged(); + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/LoginActivity.java b/app/src/main/java/h_mal/appttude/com/driver/User/LoginActivity.java similarity index 78% rename from app/src/main/java/h_mal/appttude/com/driver/LoginActivity.java rename to app/src/main/java/h_mal/appttude/com/driver/User/LoginActivity.java index 75481c1..734e245 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/LoginActivity.java +++ b/app/src/main/java/h_mal/appttude/com/driver/User/LoginActivity.java @@ -1,31 +1,19 @@ -package h_mal.appttude.com.driver; +package h_mal.appttude.com.driver.User; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.annotation.TargetApi; import android.content.Intent; -import android.content.pm.PackageManager; import android.support.annotation.NonNull; -import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; -import android.app.LoaderManager.LoaderCallbacks; - -import android.content.CursorLoader; -import android.content.Loader; -import android.database.Cursor; -import android.net.Uri; -import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; -import android.provider.ContactsContract; import android.text.TextUtils; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.EditorInfo; -import android.widget.ArrayAdapter; -import android.widget.AutoCompleteTextView; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; @@ -37,22 +25,17 @@ import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; -import java.util.ArrayList; -import java.util.List; - -import static android.Manifest.permission.READ_CONTACTS; +import h_mal.appttude.com.driver.MainActivity; +import h_mal.appttude.com.driver.R; /** * A login screen that offers login via email/password. */ public class LoginActivity extends AppCompatActivity{ + private String TAG = "LoginActivity"; private FirebaseAuth auth; - private static final String[] DUMMY_CREDENTIALS = new String[]{ - "driver@example.com:hello", "bar@example.com:world" - }; - // UI references. private EditText mEmailView; private EditText mPasswordView; @@ -65,6 +48,7 @@ public class LoginActivity extends AppCompatActivity{ setContentView(R.layout.activity_login); auth = FirebaseAuth.getInstance(); + // Set up the login form. mEmailView = findViewById(R.id.email); @@ -92,7 +76,7 @@ public class LoginActivity extends AppCompatActivity{ mProgressView = findViewById(R.id.login_progress); mLoginView = findViewById(R.id.email_login_form); - TextView register = findViewById(R.id.register); + TextView register = findViewById(R.id.register_button); register.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { @@ -100,11 +84,17 @@ public class LoginActivity extends AppCompatActivity{ startActivity(intent); } }); + + TextView forgotPw = findViewById(R.id.forgot); + forgotPw.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(getApplication(),forgotPasswordActivity.class); + startActivity(intent); + } + }); } - - - /** * Attempts to sign in or register the account specified by the login form. * If there are form errors (invalid email, missing fields, etc.), the @@ -159,23 +149,17 @@ public class LoginActivity extends AppCompatActivity{ @Override public void onComplete(@NonNull Task task) { showProgress(false); - - Intent intent = new Intent(LoginActivity.this,MainActivity.class); - startActivity(intent); - finish(); + if (task.isSuccessful()){ + Intent intent = new Intent(LoginActivity.this,MainActivity.class); + startActivity(intent); + finish(); + }else { + Toast.makeText(LoginActivity.this, getString(R.string.login_failed), Toast.LENGTH_SHORT).show(); + } } - }) - .addOnFailureListener(new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception e) { - Toast.makeText(LoginActivity.this, getString(R.string.login_failed), Toast.LENGTH_SHORT).show(); - showProgress(false); - } - }); - - - + } + ); } } @@ -197,7 +181,7 @@ public class LoginActivity extends AppCompatActivity{ // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow // for very easy animations. If available, use these APIs to fade-in // the progress spinner. - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { + int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime); mLoginView.setVisibility(show ? View.GONE : View.VISIBLE); @@ -217,12 +201,6 @@ public class LoginActivity extends AppCompatActivity{ mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); } }); - } else { - // The ViewPropertyAnimator APIs are not available, so simply show - // and hide the relevant UI components. - mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); - mLoginView.setVisibility(show ? View.GONE : View.VISIBLE); - } } diff --git a/app/src/main/java/h_mal/appttude/com/driver/User/RegisterActivity.java b/app/src/main/java/h_mal/appttude/com/driver/User/RegisterActivity.java new file mode 100644 index 0000000..5cabe1e --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/User/RegisterActivity.java @@ -0,0 +1,161 @@ +package h_mal.appttude.com.driver.User; + +import android.content.Intent; +import android.support.annotation.NonNull; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.auth.AuthResult; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.UserProfileChangeRequest; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; + +import h_mal.appttude.com.driver.MainActivity; +import h_mal.appttude.com.driver.Objects.UserObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; + +public class RegisterActivity extends AppCompatActivity { + + private FirebaseAuth auth; + private EditText name; + private EditText email; + private EditText passwordTop; + private EditText passwordBottom; + private ProgressBar progressBar; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_register); + + auth = FirebaseAuth.getInstance(); + + name = findViewById(R.id.name_register); + email = findViewById(R.id.email_register); + passwordTop = findViewById(R.id.password_top); + passwordBottom = findViewById(R.id.password_bottom); + progressBar = findViewById(R.id.pb); + Button submit = findViewById(R.id.email_sign_up); + + submit.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + + final String nameString = name.getText().toString().trim(); + String emailText = email.getText().toString().trim(); + String passwordText = passwordTop.getText().toString().trim(); + String passwordTextBottom = passwordBottom.getText().toString().trim(); + + boolean cancel = false; + View focusView = null; + + if (TextUtils.isEmpty(nameString)) { + name.setError(getString(R.string.error_field_required)); + focusView = name; + cancel = true; + } + + if (TextUtils.isEmpty(emailText)) { + email.setError(getString(R.string.error_field_required)); + focusView = email; + cancel = true; + } + + if (TextUtils.isEmpty(passwordText)) { + passwordTop.setError(getString(R.string.error_field_required)); + focusView = passwordTop; + cancel = true; + } + + if (TextUtils.isEmpty(passwordTextBottom)) { + passwordBottom.setError(getString(R.string.error_field_required)); + focusView = passwordBottom; + cancel = true; + } + + if (!TextUtils.isEmpty(passwordText) && !isPasswordValid(passwordText)) { + passwordTop.setError(getString(R.string.error_invalid_password)); + focusView = passwordTop; + cancel = true; + } + + if (!passwordText.equals(passwordTextBottom)){ + passwordBottom.setError(getString(R.string.no_match_password)); + focusView = passwordBottom; + cancel = true; + } + + if (cancel) { + // There was an error; don't attempt login and focus the first + // form field with an error. + focusView.requestFocus(); + } else { + progressBar.setVisibility(View.VISIBLE); + //create user + auth.createUserWithEmailAndPassword(emailText, passwordText) + .addOnCompleteListener(RegisterActivity.this, new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + progressBar.setVisibility(View.GONE); + if (!task.isSuccessful()) { + Toast.makeText(RegisterActivity.this, "Authentication failed." + task.getException(), + Toast.LENGTH_SHORT).show(); + } else { + + UserProfileChangeRequest.Builder profileUpdatesBuilder = new UserProfileChangeRequest.Builder(); + + if (!TextUtils.isEmpty(nameString)){ + profileUpdatesBuilder.setDisplayName(nameString); + } + + UserProfileChangeRequest profileUpdates = profileUpdatesBuilder.build(); + + auth.getCurrentUser().updateProfile(profileUpdates).addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()){ + Log.i("RegisterActivity", "onComplete: " + task.isSuccessful()); + + DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference(); + + mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()).child("role") + .setValue("driver"); + mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()).child("user_details") + .setValue(new UserObject(auth.getCurrentUser().getDisplayName(),auth.getCurrentUser().getEmail(),null)); + + Intent intent = new Intent(RegisterActivity.this,MainActivity.class); + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + startActivity(intent); + finish(); + } + + } + }); + + + } + } + }); + } + + } + }); + } + + private boolean isPasswordValid(String password) { + //TODO: Replace this with your own logic + return password.length() > 6; + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/User/forgotPasswordActivity.java b/app/src/main/java/h_mal/appttude/com/driver/User/forgotPasswordActivity.java new file mode 100644 index 0000000..5b63689 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/User/forgotPasswordActivity.java @@ -0,0 +1,59 @@ +package h_mal.appttude.com.driver.User; + +import android.support.annotation.NonNull; +import android.support.v4.app.NavUtils; +import android.support.v7.app.AppCompatActivity; +import android.os.Bundle; +import android.util.Log; +import android.view.View; +import android.widget.Button; +import android.widget.EditText; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.auth.FirebaseAuth; + +import h_mal.appttude.com.driver.R; + +public class forgotPasswordActivity extends AppCompatActivity { + + String TAG = "forgotPasswordActivity"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_forgot_password); + + final EditText editText = findViewById(R.id.reset_pw); + + final Button resetPw = findViewById(R.id.reset_pw_sign_up); + resetPw.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + resetPassword(editText.getText().toString().trim()); + } + }); + + } + + + private void resetPassword(String emailAddress){ + FirebaseAuth auth = FirebaseAuth.getInstance(); + + auth.sendPasswordResetEmail(emailAddress) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Log.d(TAG, "Email sent."); + + NavUtils.navigateUpFromSameTask(forgotPasswordActivity.this); + finish(); + }else { + Toast.makeText(forgotPasswordActivity.this, "Could not reset Password", Toast.LENGTH_SHORT).show(); + } + } + }); + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/User/profileFragment.java b/app/src/main/java/h_mal/appttude/com/driver/User/profileFragment.java new file mode 100644 index 0000000..a7d4374 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/driver/User/profileFragment.java @@ -0,0 +1,251 @@ +package h_mal.appttude.com.driver.User; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.v4.app.Fragment; +import android.text.InputType; +import android.text.TextUtils; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.OnFailureListener; +import com.google.android.gms.tasks.Task; +import com.google.firebase.auth.AuthCredential; +import com.google.firebase.auth.EmailAuthProvider; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.auth.UserProfileChangeRequest; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.storage.FirebaseStorage; +import com.google.firebase.storage.StorageReference; +import com.squareup.picasso.Picasso; + +import h_mal.appttude.com.driver.Global.ImageSelectorDialog; +import h_mal.appttude.com.driver.Global.ImageSelectorResults; +import h_mal.appttude.com.driver.Global.ViewController; +import h_mal.appttude.com.driver.Objects.UserObject; +import h_mal.appttude.com.driver.R; + +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_DETAILS_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_FIREBASE; +import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST; +import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE; +import static h_mal.appttude.com.driver.MainActivity.auth; +import static h_mal.appttude.com.driver.MainActivity.fragmentManager; +import static h_mal.appttude.com.driver.MainActivity.mDatabase; + +public class profileFragment extends Fragment { + + private String TAG = this.getClass().getSimpleName(); + + private TextView email; + private TextView name; + private TextView changePw; + + private FirebaseUser user; + private DatabaseReference databaseReference; + + private static final String EMAIL_CONSTANT = "Email Address"; + private static final String PW_CONSTANT = "Password"; + + ViewController viewController; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + viewController = new ViewController(getActivity()); + + user = auth.getCurrentUser(); + databaseReference = mDatabase.child(USER_FIREBASE).child(user.getUid()) + .child(DRIVER_FIREBASE).child(DRIVER_DETAILS_FIREBASE) + .child("driverPic"); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + View view = inflater.inflate(R.layout.fragment_profile, container, false); + + email = view.findViewById(R.id.change_email); + name = view.findViewById(R.id.change_profile_name); + changePw = view.findViewById(R.id.change_pw); + + Button button = view.findViewById(R.id.submit_profile); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + fragmentManager.popBackStack(); + } + }); + + name.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + AlertDialog.Builder dialog = new AlertDialog.Builder(getContext()); + dialog.setTitle("Update Username"); + + final EditText titleBox = new EditText(getContext()); + titleBox.setText(user.getDisplayName()); + dialog.setView(titleBox); + dialog.setPositiveButton("Update", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + updateProfile(titleBox.getText().toString().trim()); + } + }); + dialog.show(); + + } + }); + + email.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showDialog(EMAIL_CONSTANT); + } + }); + + changePw.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + showDialog(PW_CONSTANT); + } + }); + + return view; + } + + private void updateProfile(String profileName){ + UserProfileChangeRequest.Builder profileUpdatesBuilder = new UserProfileChangeRequest.Builder(); + + if (!TextUtils.isEmpty(profileName)){ + profileUpdatesBuilder.setDisplayName(profileName); + } + + UserProfileChangeRequest profileUpdates = profileUpdatesBuilder.build(); + + user.updateProfile(profileUpdates) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Log.d(TAG, "User profile updated."); + viewController.reloadDrawer(); + } + } + }) + .addOnFailureListener(new OnFailureListener() { + @Override + public void onFailure(@NonNull Exception e) { + Toast.makeText(getContext(), "Update Failed", Toast.LENGTH_SHORT).show(); + } + }); + + + } + + private void changeCredentials(String email, String password, final String changeText, final String selector){ + // Get auth credentials from the user for re-authentication + AuthCredential credential = EmailAuthProvider + .getCredential(email, password); // Current Login Credentials \\ + // Prompt the user to re-provide their sign-in credentials + user.reauthenticate(credential) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + Log.d(TAG, "User re-authenticated."); + + user = FirebaseAuth.getInstance().getCurrentUser(); + if (selector.equals(EMAIL_CONSTANT)){ + user.updateEmail(changeText) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Log.d(TAG, "User email address updated."); + Toast.makeText(getContext(), "Update Successful", Toast.LENGTH_SHORT).show(); + viewController.reloadDrawer(); + } + } + }); + } + if (selector.equals(PW_CONSTANT)){ + user.updatePassword(changeText) + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + Log.d(TAG, "User email address updated."); + Toast.makeText(getContext(), "Update Successful", Toast.LENGTH_SHORT).show(); + } + } + }); + } + + + + } + }); + } + + private void showDialog(final String update){ + //Make new Dialog + AlertDialog.Builder dialog = new AlertDialog.Builder(getContext()); + dialog.setTitle("Update " + update); + + LinearLayout layout = new LinearLayout(getContext()); + layout.setOrientation(LinearLayout.VERTICAL); + layout.setPadding(28,0,56,0); + + final EditText box1 = new EditText(getContext()); + box1.setHint("Current Email Address"); + box1.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); + layout.addView(box1); // Notice this is an add method + + final EditText box2 = new EditText(getContext()); + box2.setHint("Current Password"); + box2.setInputType(InputType.TYPE_CLASS_TEXT | + InputType.TYPE_TEXT_VARIATION_PASSWORD); + layout.addView(box2); // Another add method + + final EditText box3 = new EditText(getContext()); + if (update.equals(PW_CONSTANT)){ + box3.setInputType(InputType.TYPE_CLASS_TEXT | + InputType.TYPE_TEXT_VARIATION_PASSWORD); + }else { + box3.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS); + } + box3.setHint("New " + update); + layout.addView(box3); // Another add method + + dialog.setView(layout); + dialog.setPositiveButton("Update", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + String email = box1.getText().toString().trim(); + String password = box2.getText().toString().trim(); + String textThree = box3.getText().toString().trim(); + + changeCredentials(email,password,textThree,update); + } + }); + dialog.show(); + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/VehicleSetupFragment.java b/app/src/main/java/h_mal/appttude/com/driver/VehicleSetupFragment.java deleted file mode 100644 index c814f03..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/VehicleSetupFragment.java +++ /dev/null @@ -1,194 +0,0 @@ -package h_mal.appttude.com.driver; - -import android.net.Uri; -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.app.FragmentTransaction; -import android.text.TextUtils; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import com.google.android.gms.tasks.OnCompleteListener; -import com.google.android.gms.tasks.Task; - -import h_mal.appttude.com.driver.Objects.PrivateHireObject; - -import static h_mal.appttude.com.driver.FirebaseClass.DRIVERS_LICENSE_FIREBASE; -import static h_mal.appttude.com.driver.FirebaseClass.DRIVER_FIREBASE; -import static h_mal.appttude.com.driver.FirebaseClass.PRIVATE_HIRE_FIREBASE; -import static h_mal.appttude.com.driver.FirebaseClass.USER_FIREBASE; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.executeFragment; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; -import static h_mal.appttude.com.driver.MainActivity.getDateStamp; -import static h_mal.appttude.com.driver.MainActivity.mDatabase; - - -public class VehicleSetupFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - - EditText reg; - EditText make; - EditText model; - EditText color; - EditText keeperName; - EditText address; - EditText postcode; - EditText startDate; - CheckBox seized; - TextView mot; - TextView retrievedmot; - TextView insurance; - TextView retrievedIns; - TextView logbook; - TextView logbook_retrieved; - Button Submit; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_vehicle_setup, container, false); - - reg = view.findViewById(R.id.reg); - make = view.findViewById(R.id.make); - model = view.findViewById(R.id.model); - color = view.findViewById(R.id.colour); - keeperName = view.findViewById(R.id.keeper_name); - address = view.findViewById(R.id.address); - postcode = view.findViewById(R.id.postcode); - startDate = view.findViewById(R.id.start_date); - seized = view.findViewById(R.id.seized); - mot = view.findViewById(R.id.mot); - retrievedmot = view.findViewById(R.id.retrievedmot); - insurance = view.findViewById(R.id.insurance); - retrievedIns = view.findViewById(R.id.insurance_retrieved); - logbook = view.findViewById(R.id.log_book); - logbook_retrieved = view.findViewById(R.id.log_book_retrieved); - Submit = view.findViewById(R.id.submit_vehicle); - - initiateViewsFromFb(); - - mot.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - executeFragment(new MotFragment()); - } - }); - - insurance.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - executeFragment(new InsuranceFragment()); - } - }); - - logbook.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - executeFragment(new logbookFragment()); - } - }); - - Submit.setOnClickListener(submitOnClickListener); - - return view; - } - - private void initiateViewsFromFb() { - //todo: retrieve object and set data in fields - } - - View.OnClickListener submitOnClickListener = new View.OnClickListener() { - @Override - public void onClick(View v) { - //TODO: get strings from views - String regString = reg.getText().toString().trim(); - String makeString = make.getText().toString().trim(); - String modelString = model.getText().toString().trim(); - String colourString = color.getText().toString().trim(); - String keeperNameStrin = keeperName.getText().toString().trim(); - String addressString = address.getText().toString().trim(); - String postcodeString = postcode.getText().toString().trim(); - String driverForename = startDate.getText().toString().trim(); - - //TODO: validate the strings -// if ( !TextUtils.isEmpty(driverForename) && -// !TextUtils.isEmpty(AddressString) && -// !TextUtils.isEmpty(postCodeString) && -// !TextUtils.isEmpty(dobString) && -// !TextUtils.isEmpty(niString) && -// !TextUtils.isEmpty(dateFirstString)){ - -// Log.i(TAG, "onClick: new Image uploaded"); -// new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){ -// @Override -// public void processFinish(Uri output) { -// Log.i(TAG, "processFinish: "); -// if (output != null){ -// picUri = output; -// writeDriverToDb(); -// fragmentManager.popBackStack(); -// } -// -// } -// }).uploadImage(DRIVERS_LICENSE_FIREBASE,DRIVERS_LICENSE_FIREBASE + getDateStamp()); -// Log.i(TAG, "onClick: pushing with same image"); -// writeDriverToDb(); - - //todo: set error if invalid -// }else { -// if (TextUtils.isEmpty(driverForename)){ -// forenames.setError("Field required"); -// } -// if (TextUtils.isEmpty(AddressString)){ -// address.setError("Field required"); -// } -// if (TextUtils.isEmpty(postCodeString)){ -// postcode.setError("Field required"); -// } -// if (TextUtils.isEmpty(dobString)){ -// dob.setError("Field required"); -// } -// if (TextUtils.isEmpty(niString)){ -// ni.setError("Field required"); -// } -// if (TextUtils.isEmpty(dateFirstString)){ -// dateFirst.setError("Field required"); -// } -// } - - } - - }; - - private void publishObject(){ - //TODO: publish vehicle object -// PrivateHireObject privateHireObject = new PrivateHireObject(picUri.toString(),Ph_numberString,Ph_exprString); -// -// mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()).child(DRIVER_FIREBASE).child(PRIVATE_HIRE_FIREBASE) -// .setValue(privateHireObject).addOnCompleteListener(new OnCompleteListener() { -// @Override -// public void onComplete(@NonNull Task task) { -// -// Log.i(TAG, "onComplete: publish = " + task.isSuccessful()); -// } -// }); - } - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/logbookFragment.java b/app/src/main/java/h_mal/appttude/com/driver/logbookFragment.java deleted file mode 100644 index 9b17243..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/logbookFragment.java +++ /dev/null @@ -1,31 +0,0 @@ -package h_mal.appttude.com.driver; - -import android.content.Context; -import android.net.Uri; -import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - - -public class logbookFragment extends Fragment { - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_logbook, container, false); - - - - return view; - } - -} diff --git a/app/src/main/java/h_mal/appttude/com/driver/profileFragment.java b/app/src/main/java/h_mal/appttude/com/driver/profileFragment.java deleted file mode 100644 index 943cb15..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/profileFragment.java +++ /dev/null @@ -1,257 +0,0 @@ -package h_mal.appttude.com.driver; - -import android.app.ProgressDialog; -import android.content.Context; -import android.content.Intent; -import android.graphics.Bitmap; -import android.net.Uri; -import android.os.Bundle; -import android.provider.MediaStore; -import android.support.annotation.NonNull; -import android.support.design.widget.NavigationView; -import android.support.v4.app.Fragment; -import android.text.TextUtils; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.EditText; -import android.widget.ImageView; -import android.widget.TextView; -import android.widget.Toast; - -import com.google.android.gms.tasks.Continuation; -import com.google.android.gms.tasks.OnCompleteListener; -import com.google.android.gms.tasks.OnFailureListener; -import com.google.android.gms.tasks.OnSuccessListener; -import com.google.android.gms.tasks.Task; -import com.google.firebase.auth.FirebaseAuth; -import com.google.firebase.auth.FirebaseUser; -import com.google.firebase.auth.UserProfileChangeRequest; -import com.google.firebase.storage.FirebaseStorage; -import com.google.firebase.storage.OnProgressListener; -import com.google.firebase.storage.StorageReference; -import com.google.firebase.storage.UploadTask; -import com.squareup.picasso.Picasso; - -import java.io.IOException; -import java.util.UUID; - -import static android.app.Activity.RESULT_OK; -import static h_mal.appttude.com.driver.MainActivity.auth; -import static h_mal.appttude.com.driver.MainActivity.fragmentManager; -import static h_mal.appttude.com.driver.MainActivity.setupDrawer; - -public class profileFragment extends Fragment { - - private String TAG = this.getClass().getSimpleName(); - private final int PICK_IMAGE_REQUEST = 70; - - private ImageView imageView; - private EditText email; - private EditText name; - - FirebaseStorage storage; - StorageReference storageReference; - - private FirebaseUser user; - - private Uri filePath; - - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - user = auth.getCurrentUser(); - storage = FirebaseStorage.getInstance(); - storageReference = storage.getReference(); - - setRetainInstance(true); - - } - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - View view = inflater.inflate(R.layout.fragment_profile, container, false); - - imageView = view.findViewById(R.id.profile_pic); - email = view.findViewById(R.id.profile_email); - name = view.findViewById(R.id.profile_name); - - TextView upload = view.findViewById(R.id.uploadprofilepic); - - upload.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - chooseImage(); - } - }); - - retrieveProfile(); - - Button button = view.findViewById(R.id.submit_profile); - button.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - updateProfile(); - } - }); - - return view; - } - - public void retrieveProfile(){ - email.setText(user.getEmail()); - if (user.getDisplayName() != null){ - name.setText(user.getDisplayName()); - } - - if(imageView != null){ - Picasso.get() - .load(user.getPhotoUrl()) - .placeholder(R.mipmap.ic_launcher_round) - .into(imageView); - } - - } - - private void updateProfile(){ - UserProfileChangeRequest.Builder profileUpdatesBuilder = new UserProfileChangeRequest.Builder(); - - String profileName = name.getText().toString().trim(); - - - if (!TextUtils.isEmpty(profileName)){ - profileUpdatesBuilder.setDisplayName(profileName); - } - if (filePath != null || - imageView.getDrawable().getConstantState() != getResources().getDrawable( R.mipmap.ic_launcher_round).getConstantState()){ - profileUpdatesBuilder.setPhotoUri(filePath); - } - - UserProfileChangeRequest profileUpdates = profileUpdatesBuilder.build(); - - user.updateProfile(profileUpdates) - .addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()) { - Log.d(TAG, "User profile updated."); - setupDrawer(); - fragmentManager.popBackStack(); - } - } - }) - .addOnFailureListener(new OnFailureListener() { - @Override - public void onFailure(@NonNull Exception e) { - Toast.makeText(getContext(), "Update Failed", Toast.LENGTH_SHORT).show(); - } - }); - } - - private void uploadImage() { - - if(filePath != null) - { - final ProgressDialog progressDialog = new ProgressDialog(getContext()); - progressDialog.setTitle("Uploading..."); - progressDialog.show(); - - final StorageReference ref = storageReference.child("images/"+ user.getUid() + "/profile_pic"); - UploadTask uploadTask = ref.putFile(filePath); - - uploadTask.addOnProgressListener(new OnProgressListener() { - @Override - public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { - double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot - .getTotalByteCount()); - progressDialog.setMessage("Uploaded "+(int)progress+"%"); - } - }).continueWithTask(new Continuation>() { - @Override - public Task then(@NonNull Task task) throws Exception { - if (!task.isSuccessful()) { - throw task.getException(); - } - - // Continue with the task to get the download URL - return ref.getDownloadUrl(); - } - }).addOnCompleteListener(new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()) { - filePath = task.getResult(); - progressDialog.dismiss(); - Toast.makeText(getContext(), "Uploaded Successfully", Toast.LENGTH_SHORT).show(); - Log.i(TAG, "onComplete: uploaded Successful uri: " + task.getResult()); - } else { - progressDialog.dismiss(); - Toast.makeText(getContext(), "Failed to upload", Toast.LENGTH_SHORT).show(); - Log.i(TAG, "onComplete: failed to get url"); - } - } - }); - -// uploadTask.addOnSuccessListener(new OnSuccessListener() { -// @Override -// public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { -// -// } -// }) -// .addOnFailureListener(new OnFailureListener() { -// @Override -// public void onFailure(@NonNull Exception e) { -// -// } -// }) -// .addOnProgressListener(new OnProgressListener() { -// @Override -// public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { -// double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot -// .getTotalByteCount()); -// progressDialog.setMessage("Uploaded "+(int)progress+"%"); -// } -// }); - - - } - } - - private void chooseImage() { - Intent intent = new Intent(); - intent.setType("image/*"); - intent.setAction(Intent.ACTION_GET_CONTENT); - startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) { - super.onActivityResult(requestCode, resultCode, data); - if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK - && data != null && data.getData() != null ) - { - filePath = data.getData(); - Bitmap bitmap = null; - try { - bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), filePath); - imageView.setImageBitmap(bitmap); - } - catch (IOException e) - { - e.printStackTrace(); - } - finally { - if (bitmap != null){ - uploadImage(); - } - } - } - } - -} diff --git a/app/src/main/res/drawable/approved.png b/app/src/main/res/drawable/approved.png new file mode 100644 index 0000000..ca646f4 Binary files /dev/null and b/app/src/main/res/drawable/approved.png differ diff --git a/app/src/main/res/drawable/choice_img.png b/app/src/main/res/drawable/choice_img.png new file mode 100644 index 0000000..9d82d49 Binary files /dev/null and b/app/src/main/res/drawable/choice_img.png differ diff --git a/app/src/main/res/drawable/choice_img_round.png b/app/src/main/res/drawable/choice_img_round.png new file mode 100644 index 0000000..a981668 Binary files /dev/null and b/app/src/main/res/drawable/choice_img_round.png differ diff --git a/app/src/main/res/drawable/denied.png b/app/src/main/res/drawable/denied.png new file mode 100644 index 0000000..4bc6bb5 Binary files /dev/null and b/app/src/main/res/drawable/denied.png differ diff --git a/app/src/main/res/drawable/ic_archive_black_24dp.xml b/app/src/main/res/drawable/ic_archive_black_24dp.xml new file mode 100644 index 0000000..025a961 --- /dev/null +++ b/app/src/main/res/drawable/ic_archive_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_file_download_black_24dp.xml b/app/src/main/res/drawable/ic_file_download_black_24dp.xml new file mode 100644 index 0000000..8073476 --- /dev/null +++ b/app/src/main/res/drawable/ic_file_download_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_local_taxi_black_24dp.xml b/app/src/main/res/drawable/ic_local_taxi_black_24dp.xml new file mode 100644 index 0000000..21b763e --- /dev/null +++ b/app/src/main/res/drawable/ic_local_taxi_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_person_black_24dp.xml b/app/src/main/res/drawable/ic_person_black_24dp.xml new file mode 100644 index 0000000..b2cb337 --- /dev/null +++ b/app/src/main/res/drawable/ic_person_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_settings_black_24dp.xml b/app/src/main/res/drawable/ic_settings_black_24dp.xml new file mode 100644 index 0000000..ace746c --- /dev/null +++ b/app/src/main/res/drawable/ic_settings_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sort_black_24dp.xml b/app/src/main/res/drawable/ic_sort_black_24dp.xml new file mode 100644 index 0000000..449c263 --- /dev/null +++ b/app/src/main/res/drawable/ic_sort_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/pending.png b/app/src/main/res/drawable/pending.png new file mode 100644 index 0000000..54a7933 Binary files /dev/null and b/app/src/main/res/drawable/pending.png differ diff --git a/app/src/main/res/drawable/side_nav_bar.xml b/app/src/main/res/drawable/side_nav_bar.xml index 3777d1b..a36d7a1 100644 --- a/app/src/main/res/drawable/side_nav_bar.xml +++ b/app/src/main/res/drawable/side_nav_bar.xml @@ -3,7 +3,7 @@ \ No newline at end of file diff --git a/app/src/main/res/drawable/zero.png b/app/src/main/res/drawable/zero.png new file mode 100644 index 0000000..ceadf26 Binary files /dev/null and b/app/src/main/res/drawable/zero.png differ diff --git a/app/src/main/res/layout/activity_forgot_password.xml b/app/src/main/res/layout/activity_forgot_password.xml new file mode 100644 index 0000000..3fb1c86 --- /dev/null +++ b/app/src/main/res/layout/activity_forgot_password.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + +