From 987b25af31e6b10993aaa97c533f20f07ab02860 Mon Sep 17 00:00:00 2001 From: hmalik144 Date: Mon, 11 Mar 2019 22:05:02 +1100 Subject: [PATCH] New push with junit espresso tests --- .idea/assetWizardSettings.xml | 14 - .idea/misc.xml | 2 +- .idea/vcs.xml | 6 + app/build.gradle | 16 +- .../com/driver/ExampleInstrumentedTest.java | 4 + app/src/main/AndroidManifest.xml | 12 +- .../Archive/ArchiveObjectListAdapter.java | 293 +++++++++++++++++ .../{ => Driver}/DriverLicenseFragment.java | 170 +++++++--- .../driver/Driver/DriverOverallFragment.java | 147 +++++++++ .../DriverProfileFragment.java} | 196 ++++++----- .../com/driver/Driver/InsuranceFragment.java | 300 +++++++++++++++++ .../com/driver/Driver/MotFragment.java | 262 +++++++++++++++ .../PrivateHireLicenseFragment.java | 154 ++++++--- .../Driver/PrivateHireVehicleFragment.java | 285 ++++++++++++++++ .../driver/Driver/VehicleOverallFragment.java | 188 +++++++++++ .../driver/Driver/VehicleSetupFragment.java | 223 +++++++++++++ .../homeDriverFragment.java} | 18 +- .../com/driver/Driver/logbookFragment.java | 255 +++++++++++++++ .../com/driver/FindAddressFragment.java | 56 ---- .../com/driver/Global/ApprovalsClass.java | 123 +++++++ .../com/driver/Global/ArchiveClass.java | 99 ++++++ .../com/driver/{ => Global}/DateDialog.java | 20 +- .../com/driver/Global/ExecuteFragment.java | 65 ++++ .../driver/{ => Global}/FirebaseClass.java | 19 +- .../{ => Global}/ImageSelectorDialog.java | 38 ++- .../{ => Global}/ImageSelectorResults.java | 95 ++++-- .../com/driver/Global/ImageSwiperClass.java | 245 ++++++++++++++ .../com/driver/Global/ImageViewClass.java | 121 +++++++ .../com/driver/Global/SetApprovalDialog.java | 155 +++++++++ .../com/driver/Global/ViewController.java | 32 ++ .../com/driver/InsuranceFragment.java | 43 --- .../appttude/com/driver/MainActivity.java | 254 +++++++++++++-- .../appttude/com/driver/MotFragment.java | 43 --- .../com/driver/Objects/ApprovalsObject.java | 59 ++++ .../com/driver/Objects/ArchiveObject.java | 56 ++++ .../com/driver/Objects/InsuranceObject.java | 29 +- .../com/driver/Objects/LogbookObject.java | 21 +- .../com/driver/Objects/MotObject.java | 19 ++ .../Objects/PrivateHireVehicleObject.java | 29 ++ .../com/driver/Objects/UserObject.java | 29 ++ .../driver/Objects/VehicleProfileObject.java | 27 +- .../com/driver/Objects/WholeDriverObject.java | 59 ++++ .../Objects/WholeObject/DriverProfile.java | 33 ++ .../Objects/WholeObject/MappedObject.java | 56 ++++ .../Objects/WholeObject/VehicleProfile.java | 55 ++++ .../appttude/com/driver/RegisterActivity.java | 89 ----- .../driver/SuperUser/ApprovalListAdapter.java | 305 ++++++++++++++++++ .../SuperUser/ListViewSuperAdapter.java | 182 +++++++++++ .../driver/SuperUser/UserMainFragment.java | 49 +++ .../SuperUser/homeSuperUserFragment.java | 186 +++++++++++ .../com/driver/{ => User}/LoginActivity.java | 72 ++--- .../com/driver/User/RegisterActivity.java | 161 +++++++++ .../driver/User/forgotPasswordActivity.java | 59 ++++ .../com/driver/User/profileFragment.java | 251 ++++++++++++++ .../com/driver/VehicleSetupFragment.java | 194 ----------- .../appttude/com/driver/logbookFragment.java | 31 -- .../appttude/com/driver/profileFragment.java | 257 --------------- app/src/main/res/drawable/approved.png | Bin 0 -> 10166 bytes app/src/main/res/drawable/choice_img.png | Bin 0 -> 156606 bytes .../main/res/drawable/choice_img_round.png | Bin 0 -> 174748 bytes app/src/main/res/drawable/denied.png | Bin 0 -> 11771 bytes .../res/drawable/ic_archive_black_24dp.xml | 9 + .../drawable/ic_file_download_black_24dp.xml | 9 + .../res/drawable/ic_local_taxi_black_24dp.xml | 9 + .../res/drawable/ic_person_black_24dp.xml | 9 + .../res/drawable/ic_settings_black_24dp.xml | 9 + .../main/res/drawable/ic_sort_black_24dp.xml | 9 + app/src/main/res/drawable/pending.png | Bin 0 -> 10729 bytes app/src/main/res/drawable/side_nav_bar.xml | 4 +- app/src/main/res/drawable/zero.png | Bin 0 -> 10419 bytes .../res/layout/activity_forgot_password.xml | 55 ++++ .../res/layout/activity_image_selector.xml | 9 - app/src/main/res/layout/activity_login.xml | 47 ++- app/src/main/res/layout/activity_main.xml | 20 +- app/src/main/res/layout/activity_register.xml | 19 +- app/src/main/res/layout/app_bar_main.xml | 5 + .../main/res/layout/approval_list_item.xml | 41 +++ .../res/layout/archive_insurance_item.xml | 92 ++++++ .../main/res/layout/archive_vehicle_item.xml | 221 +++++++++++++ app/src/main/res/layout/content_main.xml | 20 -- app/src/main/res/layout/fragment_archive.xml | 16 + .../res/layout/fragment_driver_license.xml | 63 ++-- .../res/layout/fragment_driver_overall.xml | 154 +++++++++ .../res/layout/fragment_driver_profile.xml | 75 ++--- .../main/res/layout/fragment_find_address.xml | 140 -------- app/src/main/res/layout/fragment_home.xml | 20 +- .../res/layout/fragment_home_super_user.xml | 16 + .../main/res/layout/fragment_image_viewer.xml | 28 ++ .../main/res/layout/fragment_insurance.xml | 51 ++- app/src/main/res/layout/fragment_logbook.xml | 90 +++++- app/src/main/res/layout/fragment_mot.xml | 60 ++-- .../layout/fragment_private_hire_license.xml | 51 ++- .../layout/fragment_private_hire_vehicle.xml | 118 +++++++ app/src/main/res/layout/fragment_profile.xml | 76 ++--- .../main/res/layout/fragment_user_main.xml | 33 ++ .../res/layout/fragment_vehicle_overall.xml | 253 +++++++++++++++ .../res/layout/fragment_vehicle_setup.xml | 70 +--- app/src/main/res/layout/insurance_item.xml | 41 +++ app/src/main/res/layout/list_item_layout.xml | 113 +++++++ .../main/res/layout/multi_image_selector.xml | 47 +++ app/src/main/res/layout/nav_header_main.xml | 2 +- .../main/res/menu/activity_main_drawer.xml | 11 +- app/src/main/res/menu/menu_calls_fragment.xml | 10 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 2963 -> 4834 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 4905 -> 6224 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2060 -> 2557 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2783 -> 3292 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4490 -> 6847 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 6895 -> 8604 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 6387 -> 13035 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 10413 -> 16054 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 9128 -> 20654 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 15132 -> 23105 bytes app/src/main/res/values/colors.xml | 2 + app/src/main/res/values/strings.xml | 10 +- app/src/main/res/values/styles.xml | 3 +- build.gradle | 6 +- 119 files changed, 6864 insertions(+), 1553 deletions(-) delete mode 100644 .idea/assetWizardSettings.xml create mode 100644 .idea/vcs.xml create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.java rename app/src/main/java/h_mal/appttude/com/driver/{ => Driver}/DriverLicenseFragment.java (50%) create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Driver/DriverOverallFragment.java rename app/src/main/java/h_mal/appttude/com/driver/{driverProfileFragment.java => Driver/DriverProfileFragment.java} (60%) create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Driver/InsuranceFragment.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Driver/MotFragment.java rename app/src/main/java/h_mal/appttude/com/driver/{ => Driver}/PrivateHireLicenseFragment.java (54%) create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Driver/PrivateHireVehicleFragment.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleOverallFragment.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Driver/VehicleSetupFragment.java rename app/src/main/java/h_mal/appttude/com/driver/{homeFragment.java => Driver/homeDriverFragment.java} (68%) create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Driver/logbookFragment.java delete mode 100644 app/src/main/java/h_mal/appttude/com/driver/FindAddressFragment.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.java rename app/src/main/java/h_mal/appttude/com/driver/{ => Global}/DateDialog.java (88%) create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Global/ExecuteFragment.java rename app/src/main/java/h_mal/appttude/com/driver/{ => Global}/FirebaseClass.java (86%) rename app/src/main/java/h_mal/appttude/com/driver/{ => Global}/ImageSelectorDialog.java (79%) rename app/src/main/java/h_mal/appttude/com/driver/{ => Global}/ImageSelectorResults.java (53%) create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Global/ViewController.java delete mode 100644 app/src/main/java/h_mal/appttude/com/driver/InsuranceFragment.java delete mode 100644 app/src/main/java/h_mal/appttude/com/driver/MotFragment.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.java delete mode 100644 app/src/main/java/h_mal/appttude/com/driver/RegisterActivity.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/SuperUser/ListViewSuperAdapter.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.java rename app/src/main/java/h_mal/appttude/com/driver/{ => User}/LoginActivity.java (78%) create mode 100644 app/src/main/java/h_mal/appttude/com/driver/User/RegisterActivity.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/User/forgotPasswordActivity.java create mode 100644 app/src/main/java/h_mal/appttude/com/driver/User/profileFragment.java delete mode 100644 app/src/main/java/h_mal/appttude/com/driver/VehicleSetupFragment.java delete mode 100644 app/src/main/java/h_mal/appttude/com/driver/logbookFragment.java delete mode 100644 app/src/main/java/h_mal/appttude/com/driver/profileFragment.java create mode 100644 app/src/main/res/drawable/approved.png create mode 100644 app/src/main/res/drawable/choice_img.png create mode 100644 app/src/main/res/drawable/choice_img_round.png create mode 100644 app/src/main/res/drawable/denied.png create mode 100644 app/src/main/res/drawable/ic_archive_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_file_download_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_local_taxi_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_person_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_settings_black_24dp.xml create mode 100644 app/src/main/res/drawable/ic_sort_black_24dp.xml create mode 100644 app/src/main/res/drawable/pending.png create mode 100644 app/src/main/res/drawable/zero.png create mode 100644 app/src/main/res/layout/activity_forgot_password.xml delete mode 100644 app/src/main/res/layout/activity_image_selector.xml create mode 100644 app/src/main/res/layout/approval_list_item.xml create mode 100644 app/src/main/res/layout/archive_insurance_item.xml create mode 100644 app/src/main/res/layout/archive_vehicle_item.xml delete mode 100644 app/src/main/res/layout/content_main.xml create mode 100644 app/src/main/res/layout/fragment_archive.xml create mode 100644 app/src/main/res/layout/fragment_driver_overall.xml delete mode 100644 app/src/main/res/layout/fragment_find_address.xml create mode 100644 app/src/main/res/layout/fragment_home_super_user.xml create mode 100644 app/src/main/res/layout/fragment_image_viewer.xml create mode 100644 app/src/main/res/layout/fragment_private_hire_vehicle.xml create mode 100644 app/src/main/res/layout/fragment_user_main.xml create mode 100644 app/src/main/res/layout/fragment_vehicle_overall.xml create mode 100644 app/src/main/res/layout/insurance_item.xml create mode 100644 app/src/main/res/layout/list_item_layout.xml create mode 100644 app/src/main/res/layout/multi_image_selector.xml create mode 100644 app/src/main/res/menu/menu_calls_fragment.xml delete mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml 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 0000000000000000000000000000000000000000..ca646f4823a355ec1bfcf13814c01d8374dedd14 GIT binary patch literal 10166 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a9816684bdb0c805517bb95a9867db23a259cf47 GIT binary patch literal 174748 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

    ($S`mX0I)GtofCX#KZn55!(f&NG09X1VTj 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 b@#9ummlrN5ja4BX5P0oKPGxr|X21OxeNxx= literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/denied.png b/app/src/main/res/drawable/denied.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc6bb51bb59c1f3729bd86945cec3e43d4c700b GIT binary patch literal 11771 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 + + 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 0000000000000000000000000000000000000000..54a7933b57d5ca4c994056748fca3d5fe97b2b90 GIT binary patch literal 10729 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≀kx{6rW5sGy+q zCkV*Y2IAvqfrIy;nBcEyaVT(_pH2gtq8#%@4@9&=k}kk5#65^4bmI7f;+1Wt_W&T^ zw!m!6cp+l62qoLP5nB8U*>6P!!sfx0ElHCTM2_*HGL^v7v_QGE?D3jekZZa|NSv_0PXmqZN= zWpcfwOWQPG;l|DDe;C&TQ{FyPo0;!@HuW@s2|8>o>Ooy=22VSCdsMbh3fz}A!Dd0^ z7Mvxv6;mN!VQH_Z_R``W@gTOqz(j=5qdkwbGgVEvK3lTFN-LxXs07JPL>V(sp zK)~gk%p@jAIwTR?vd55HM-+E^KrArSrxQdhu`q;Gp*K`zUQ_<2$g$HiN|u43uKr3m zfFm_TOM^d6VM*YE*j<9Lc=R6y+kC&|NIFY|8#e;$E3b*0T-iN)85a*?7uWzw@>(EB z14Mz=(>?{9Av;(Y^^*s)Nj^XWuVGTE%GjKNSR{4xZwM6mfG zrbDTyZJwSm->lky*d(O?ztbeiNTN;{L2O)0HKH6+-_-WW5e@Y;4=Y+P7tf3-c=%`{6y3+K17MuvF~EaW|YNks#c3H;yAM# z)-b5>ac9$`SUNhK`a@C_8BML^AO@^kGR|KUEN6nJ1eALW23bO`PJ66_BrS!90-Qa; z6fyfG0G`+|lqVzUggdAtF{(_pF{9S;sh=9h z)Oyz;eqG7LG1CicWvpt)c`u}I&?C!4wo+OhfX=|6)|)!t0FPRXXJfB+lb)x99Zw5L z5~#Nj(u};2Mt%AQ`0?ML+pIZS=8gHmHCl&eDDqqw7?2lXM=2(pLUKnM9{M65g$mq7qVQajm}g18^FEmjOA{fd0OSXm#lp+ z-b?(?!)#}x4PlaV7>y$s27<82YSNV1Y$_892er}C1KFLq#l@e4)=1V(WB9# zz_0@Z{v-a~Fw^WwTM@J@(STyKErIx?VNpf78lKr{cYGJ5GofH&GD$b3i4Me+i<|g< zSn@YB1UZDeXQQ(0>w)hWO_}P{Mi(JfH(+URxPkk#Gqh15D)5c&KuOkklYo6Fr%7wQ z%|q%jHU5T>x-23zNv9dzHB-MfZ7Et%Ye+r>$lmZN<%Nmv3ztnSw3H6+7rndi`9&iR zp$|j@Gs2^)W~qEy83UuGyzdBMs%(2k0Yn)}L0HjJ0McX4qbN|LYb9s9ADt{xiOE|ssjD+^A9MeUz*XTCnMFih~y=P3Hf@`BJu_@EC!(~+T#G0*sEatV&m z%1)4JUUtEgU3O^?yF}z3U@0fX5J~huMb86z=a;+~2PP0w;s^7A{UYXmuedZ+^7F^KtR(B`)x-h2tqF zxM0p|4quJs6v9190fk5BfvA;xAdq!KbpL}(-!I-vMt}owX6^OhWkG8=vR)3ods*lL zzEFUlht=F&8@xdL^-?j@Jvhv@k8v_^#HmLZQq}Pm{U4(jKQ5Vz#P_O@*j{A5*E8-T z;QxZeq!U15Q89(uMREw?PW9(CplxkUR+F@VE9>m&+?{+PDO#ffe$YEw@j-G#b=64z zZUaQHUGy0pb#xa16*hy9P#I!Wkke85fxd>kQO#)zV&3&Y>gS~RT_ijrAeyPI0Mul? zBA`eFOk{b1S+#`MTSy4AF}wu+;eS^mM3k8%f`24Jo6VpR0wnUW-h*fuU-$gzv^w!Z z6JO}HX^=WhLT_RX;9K+|qihqKl`(0A;(QN5QLc3T{^6T@N$@^h-gN61B)bkjt7g)@&1d)`Ojb91q7!}X{rx{I#4?c zNFBI?;fJ=tT%!gsZ7sm&T6(Y7c(i)WU7`dL?6^B}Qy%Bhuk*m;c|}L%34YNMT9^}`g6CX!V;4t!t`!Nu@R?fFniXxH$oyy&8XXgMHw7S_ zDab=j#Bj>??p>7Uh$KuY?+XxwZ*YOR@9 zFpI9AWr7*Z-aM;6O2M=EGv39Y@hqkVfC*2UsW1!C!V6P}_^_|DT_@~rc>OR~3Avb* zal&_pFjL3-6(Ye$|G8{~_Cg|syKK{7ak|`tZUeL;(ON#ND3P3XH~?6pViSOK7mjYR zAoI0wL^i9-QA=A*XQlAWlUix1Ss@LwCa3thaC9;F+0~$L-&I&(@t!St7h!MJ=J+ha zcJ)ltBCN5c+*MdfQB0(p@Ga`R>`UJ}_-hQjJi(qc0R~ljQe_E;w2fUcc+6C5Y$x6$ z2sQo04j9loGx6qz5HJGhO09or?}@Gi+i~jf8=1A@HQ50y1->1{hed@UwxxbUcSzGv zd#2#-j)%*4;hi>CPXfUn)3NH^@i2<+-SQw(kt*LHj@L;PGy(IVHc~**$S>3DcasB` zf7jo&$pQGh<~RT{e}5+8;}ya6S*kq~z5wMFghMjgatR0=1RA;q$ip`m5Co9yle!}G zAc_t#mQi5t9xD2eu7ljQl5*>})MYyHqzO?2lz>Dp7>gJ=;ckEHbPb`eYi8{PO!e^-BogM;!80vDSB^`+fpp>O4-y;!lF-4mI3Lame4KTQfKoIh@8`>72 z^ORuKshf#|oW>#6vcEf6(*DSic(+BhW9dVDw?(T5lHP4mQf6U@E*nil!!FEcgGXP= zq>CiAd$A$);*{MSMNy4@#o=8|DJQ(q@kq zNOV3!8xvEzdeZAh2jbv^;ja>0L`9>B?lRjW)R8~6ft770>W=XpsXr($H&{H}qkV`{ zbLlHnoH#qUM<7lZ~J@dOgnHxrzm2G>z<-$)jSHGc#nI$N}+&z5QR&p6tFInqeoa+Vj5*d9XZgsSe;fdC@$(G8Ep{8U@$FG#no3JL17K{>dV>xDP(K(p+U+@U6m=Bi9yOk| zIa@0VCf)-_@G@;;gtD@af0P>U8K!&3dn&5Ir&x&RRFu;Z)CRzr>X|esL94(8bS<>6 z;|WcWRsvj~Gll_&a^WXve}>cmG(PLlv<_U*P8m;2g2xB?=(KClX|KDOB*v|RaGfL+ z-=abo1p0;`Se#6=yFreC7do2~FSBV=OXmpTTU)|kNc>hczUNG((@%&J(8Zd+I{iky zachJiIsx``&tV5HY_}FF(dk5YP`za;n}NCNCiNKZ*~*SlLZTd(wY(d(*@En%O#<>J zMjR=)mMCzo{8JM;=+{azcgO2F=x6tOj&bDi&r+|cK;S(f4u4hC8U2L_Bla` zUmG-m`#3@gXWP-@bA%EOmQU6ZN}ag<5K#!rdCk2W`906M$d@7W?}5${yN-DH_durz z$le2;K?gdIb^@yu9Sj3hK(Fu7QgEi{WOTslo-NHGy8=MyY-w*g$tolAo*&*T_q#E3 zPw+;*`kvrbpyO&l?T-Vz)&4lZt3B#_fcNwKZm2rHo0rb-!VSYB&gHc|tXb3SMy4H4 zcH<$heYd94-^U$adt9NJoWu~Gwj=*Lgs5Y@HOhY8m7R`ni#f^vHPEJsP?OdX+xGX6 zS(jeDi_so1%+p9MtsU;7Q*O~-L+|EuRE#!6%IGW(qBi0LwGtt-4_Yk|8`3?ytHKR# z0sX2YYWF;7i&ustWCq?uClKoA2?RKxKx5i?0o-4000jBNkl$IW<;oLa zK**ZdHDFU>)40OUAT*PtaqE7l$8kMlQjb5hBTpOG$rq=uElps!(l|kCn8xQ@{ou;D$Yl|+%`e$9_}$BBC4jQ2Bp;00KT%aauE1{ zh^!Wo10r%tL}D^=Bxc%lz_c+SBC4{oa`F;USXf9j8pU*Gm5BUGM8Y!hC2ZQdN<;$D zXq3Xj!pWuQW3d<_Vu{EC5qWiz0DmnaUNwENVzJo7w+{^s4TI`twurneBB#emzbDg9 zoHl)#Eh4I+p<&_y@Avy@Y-~hCw1}(`kv$Vk$0x%^>@j`Qjg5`?{r-uu4)FW^L?RKi z)>*(G0{;TcnWCQbIpF)ie>slRn~{-0G#VYh*5u^mVB0n#k}D#w86SJ9%VpEoT-&zE z$;lZX@OSLkF{pBG5|N!_uIpn_k?25tzgYCEunjv+-}R0iI}*mxmq?-N>S`(~DlFiS zfofoZiQ6Pc90x?8ryIF=9vmAvvIqI>_wnh~+4E3K*MYWB**8KU2uguYS`#(!FmM;J zxuT+C=kepm?aiAvkG&13uCC^}=bjq`|DS;5&B5pZ(s>qXKZ<P1^gMX^Tiim^h|>Cs&=jz`N;v_ao|!H z(%p$PZAaR7L9D|CJei{BfG>o~Uymw#3>D0USvkp?6`zw(S663m*svk_1mxu8aN)uQ z4SXvp;2YqbBm0owy#_t+L$n>R6Y%A-Vb%)BEp)py&x~R$n z__@Z%e>h=-JJ9dQsrR+K^9IuT6L305X9sVrKyRo<-82ur93~Kf{xHs4KSzH30@$ao z^Ql}^(Nn0euM?G57{!;ck#K5PYj5rZ51_wQ%Hf(2Q?tH2`(gWr1@XU{7G z^7h|YoY|p}-cbgfZbPqq5tUzjZS|oP`247Oi=a0PPB#v(-lPxC9YER+InveNrRFaV zsI>G%7q)i*`AVt!($dmsZEbDh1T-`>uxiyR4Lk@u3#2Ea>*e^nNaI%I*x&nzomB2- z)hNBdn;%6#@STx88lMj$k$!1=!$Nx0bycI?q3Jjrpi9Aw97ko}sPG<+R=_;qfAjM4 zK3cYHnQYs(&ASRRQB4J`2DT;?UT_?w?Ke2DKLfo-fPo}=G`Xlh*@Z4HB`$#adc=OE zQt{dAaaNE9nM*~le@UsrC5am7b3hgFrqAaS+qQ>YP+U{``}+a1fxj3P_`9Bg-sa?i zZ1Y^aVd@B!qw;`h32?#*G`VPk>U2+S*zLtN_04)#a2E$6SLuWx)Ru z39tW^BPZJ;9t&%O<%-(cTJ_~wFa+Q&Teg6EC~7m1;nmNV!@G^QGnK%)Rmk2pA)chSIw|i<(xDR>f4d{PYGhL+rU7x(OM-lGxTJm;azQOtn0)oLH85tQqV=Qj* z;`KPqyWPNAB4Ol7D>l;l6P)JVUcI7QfNy7HWcY%?;1>imH8o-4JQbe&{!3kMNO@FI z%}FXwr`z{So%qMo@uzVwyhQAQ4c3|U_4R0TEvU>>*dZ3Rtk%Z+kxpyc6A*1jnzlpK)A}a_l$Df} zd_LlDGqWJR3D9{KKHlRaC9X%*zRSfVe#tbLqs@i5EHB1a+K;+NM^a)mLWhfqH)EWo zl+uH@5ufy+|J_4V$v(F;sa?`@E+!K9%2*rB1KRvCBYvaP?Veam$xyj`*2N}%nSt5t zEbu~rTs&`%3#Md>y3<+}T z1L!$E#zT3Ii%tCN905e*rgn@!kgcteCysp@=eN7O#>dA7{BUo-b7Z&B-#YfnM0@i1 zx`DSfZeGoB+%qlvM)&&vNaS|BiF51_MEb@L{Qhun?9JN$q3y>GjB#3-+%gxN_$3T{ z=)(=}$4vl%Ak3T#pN{Z<_9w{Rzr<;IP~^Vvov`LD%<~+59fi)9Qy<_Q`9-E~`|%Q_ zd+Zk@Gv~V4cq72^0X?`$O@9=ZQC14Ia5-{f&dB=$v3BItPZj^M_f|W2xBBYx#EPr) z`&$)6{bOF8o`YJr+=~Hr4CXyP5pk4K@!y)(8kJvyG=^Xxo{bqBV(sZ%XrICXoe(O& z#LIP70lG!R87%P$5Vx{cxpPtZ>+yPjZ)%F=W?;#k>!r{cpdl8Ep^qLt3T`gt_z(K{ z(@!#5#UlmK>>R0+O?R`|F3x1ZCAlu2;7+>AaJLPMf~Cb{{}=N zkqEk@qXWlrY~Yw-CO(;!gSz`sH|5K86=g7(mE(2vA9EbX?&#=ny`I+AR)7P*NiW7& zFI@w{71Ni1;0hN5Z@DB+0tXD{E&*j_WdQv^9bWDl&B{UD^El|-=?A{fb^GpZ^xFpG zeuKG7KzDaHkw_#4{0unlX%>_|j4FC+nt4PPs^}><%a*s%e;W8%Boc`YJ{a+N={0NC z0G#rqh5%+{qQ1UPNWW|PT-HdxE2@^P6F0>fUe(VjgY{4X4jw!RZos74lQBl2@(QCA zZR$j2PXoi7jTC?P1bIbak1P9#!8U5J9!h|1+icysRe)yTu(y? z<%>{|wQ@jJZ8@)R{n{-a3rBF19q!j!i(Ii!GQ@(22%9!-65x_l2x8eb;hs;`L%#l^*g9?=fG<{;1-Rk#Gb{v{^=Oc*uzw!!dJ zadGig;B!56%$q5*fm+~?Jhy$)&xBEf5AX)C$+qp!e7^z?Lqi@++h*_Hy#o9a_t}n~gh_b(9|zRpzh+Xb6I3>8 z@$-(V+HzhME|CPm?=hJDa_`=~!{!WSr1-(MZQHo_-g_l4FYo_wA1k=ivr<$Okh>fF$*1W)!kM)kb>)?054tX{o(Bt>_9 zNow-$Sad)>Zu84Kd(`NYcPBZpR`e8V$vPpgD4f6|>q?{h3p^z6p5*E4N2_jM=_ zwtE(-(m2}m_E)KyIpF^q>W(MSkNhoq#bc<#r7$Ba8Rv+* zfIkP`tgEY&y1F_q&aO8}J>qkf+8G3Y>>u$NhJ@+(jMbpQZ2CH18F#E`Aan)HVMNLi3AQ5RIvQR``5Rq09=^ZCKVVk;JO< ze_XV~L?9y+3Q=EQkI7?=$>tj{@udRX%#L2$D!6x`KQy~kJtE@7VlfH|3W!7^baae= b_TT>pvE4|BsyKZ700000NkvXXu0mjfW!0ty literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ceadf260e38c48f41325db561d6271d626afccfa GIT binary patch literal 10419 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 dT7sVc{6B`Ypff9otCj!&002ovPDHLkV1mT+&b + + + + + + + + + + + + + + +