diff --git a/app/build.gradle b/app/build.gradle index b8eb85f..113bee0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,11 +14,11 @@ repositories { } android { - compileSdkVersion 28 + compileSdkVersion 30 defaultConfig { - applicationId "h_mal.appttude.com.driver" + applicationId "h_mal.appttude.com" minSdkVersion 24 - targetSdkVersion 28 + targetSdkVersion 30 versionCode 6 versionName "1.6" testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' @@ -37,6 +37,31 @@ android { jvmTarget = "1.8" } + flavorDimensions "Default" + productFlavors { + driver { + applicationIdSuffix ".driver" + versionCode 6 + versionName "1.0.5" + } + admin { + applicationIdSuffix ".driver_admin" + versionCode 4 + versionName "0.0.5" + } + } + sourceSets { + driver { + manifest { + srcFile 'src/driver/AndroidManifest.xml' + } + } + admin { + manifest { + srcFile 'src/driver_admin/AndroidManifest.xml' + } + } + } } dependencies { @@ -60,6 +85,7 @@ dependencies { androidTestImplementation "androidx.test.ext:junit:1.1.1" androidTestImplementation "androidx.test.espresso:espresso-core:3.1.0" androidTestImplementation "androidx.test:rules:1.1.1" + implementation 'androidx.test.espresso:espresso-idling-resource:3.1.1' implementation "androidx.legacy:legacy-support-v4:1.0.0" // Google play services @@ -89,4 +115,8 @@ dependencies { /* Image Carousal */ implementation 'com.synnapps:carouselview:0.1.5' + + / * Glide */ + implementation 'com.github.bumptech.glide:glide:4.12.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' } diff --git a/app/src/androidTest/java/h_mal/appttude/com/BaseTestRobot.kt b/app/src/androidTest/java/h_mal/appttude/com/BaseTestRobot.kt new file mode 100644 index 0000000..8aac1ee --- /dev/null +++ b/app/src/androidTest/java/h_mal/appttude/com/BaseTestRobot.kt @@ -0,0 +1,40 @@ +package h_mal.appttude.com + +import android.content.res.Resources +import androidx.annotation.StringRes +import androidx.test.espresso.Espresso.onData +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.ViewInteraction +import androidx.test.espresso.action.ViewActions +import androidx.test.espresso.assertion.ViewAssertions +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers +import androidx.test.espresso.matcher.ViewMatchers.withId +import org.hamcrest.CoreMatchers.* + +open class BaseTestRobot { + + fun fillEditText(resId: Int, text: String): ViewInteraction = + onView(withId(resId)).perform(ViewActions.replaceText(text), ViewActions.closeSoftKeyboard()) + + fun clickButton(resId: Int): ViewInteraction = onView((withId(resId))).perform(ViewActions.click()) + + fun textView(resId: Int): ViewInteraction = onView(withId(resId)) + + fun matchText(viewInteraction: ViewInteraction, text: String): ViewInteraction = viewInteraction + .check(ViewAssertions.matches(ViewMatchers.withText(text))) + + fun matchText(resId: Int, text: String): ViewInteraction = matchText(textView(resId), text) + + fun clickListItem(listRes: Int, position: Int) { + onData(anything()) + .inAdapterView(allOf(withId(listRes))) + .atPosition(position).perform(ViewActions.click()) + } + + fun checkErrorOnTextEntry(resId: Int, errorMessage: String): ViewInteraction = + onView(withId(resId)).check(matches(checkErrorMessage(errorMessage))) + + fun getStringFromResource(@StringRes resId: Int): String = Resources.getSystem().getString(resId) + +} \ No newline at end of file diff --git a/app/src/androidTest/java/h_mal/appttude/com/BaseUiTest.kt b/app/src/androidTest/java/h_mal/appttude/com/BaseUiTest.kt new file mode 100644 index 0000000..1added4 --- /dev/null +++ b/app/src/androidTest/java/h_mal/appttude/com/BaseUiTest.kt @@ -0,0 +1,38 @@ +package h_mal.appttude.com + +import androidx.annotation.StringRes +import androidx.appcompat.app.AppCompatActivity +import androidx.test.espresso.IdlingRegistry +import androidx.test.rule.ActivityTestRule +import h_mal.appttude.com.espresso.IdlingResourceClass +import org.junit.AfterClass +import org.junit.BeforeClass +import org.junit.Ignore +import org.junit.Rule + +abstract class BaseUiTest { + + @Ignore + abstract fun getApplicationClass(): Class + + @get:Rule + var mActivityTestRule = ActivityTestRule(getApplicationClass()) + + companion object { + @BeforeClass + @JvmStatic + fun setUp() { + IdlingRegistry.getInstance().register(IdlingResourceClass.countingIdlingResource) + } + + @AfterClass + @JvmStatic + fun tearDown() { + IdlingRegistry.getInstance().unregister(IdlingResourceClass.countingIdlingResource) + } + } + + fun getResourceString(@StringRes stringRes: Int): String { + return mActivityTestRule.activity.getString(stringRes) + } +} \ No newline at end of file diff --git a/app/src/androidTest/java/h_mal/appttude/com/CustomViewMatchers.kt b/app/src/androidTest/java/h_mal/appttude/com/CustomViewMatchers.kt new file mode 100644 index 0000000..1ab7048 --- /dev/null +++ b/app/src/androidTest/java/h_mal/appttude/com/CustomViewMatchers.kt @@ -0,0 +1,29 @@ +package h_mal.appttude.com + +import android.view.View +import android.widget.EditText +import com.google.android.material.textfield.TextInputLayout +import org.hamcrest.Description +import org.hamcrest.Matcher +import org.hamcrest.TypeSafeMatcher + + +/** + * Matcher for testing error of TextInputLayout + */ +fun checkErrorMessage(expectedErrorText: String): Matcher? { + return object : TypeSafeMatcher() { + override fun matchesSafely(view: View?): Boolean { + if (view is EditText) { + return view.error.toString() == expectedErrorText + } + + if (view !is TextInputLayout) return false + + val error = view.error ?: return false + return expectedErrorText == error.toString() + } + override fun describeTo(d: Description?) {} + } +} + 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 deleted file mode 100644 index bb2e9e9..0000000 --- a/app/src/androidTest/java/h_mal/appttude/com/driver/ExampleInstrumentedTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package h_mal.appttude.com.driver; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.assertEquals; - -/** - * Instrumented test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); - - assertEquals("h_mal.appttude.com.driver", appContext.getPackageName()); - } - -} diff --git a/app/src/androidTest/java/h_mal/appttude/com/driver/MainActivityTest.java b/app/src/androidTest/java/h_mal/appttude/com/driver/MainActivityTest.java deleted file mode 100644 index 588d209..0000000 --- a/app/src/androidTest/java/h_mal/appttude/com/driver/MainActivityTest.java +++ /dev/null @@ -1,54 +0,0 @@ -package h_mal.appttude.com.driver; - -import android.view.View; - -import androidx.test.rule.ActivityTestRule; - -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; - -import h_mal.appttude.com.driver.ui.driver.HomeFragment; -import h_mal.appttude.com.driver.ui.driver.MainActivity; - -import static org.junit.Assert.assertNotNull; - -public class MainActivityTest { - - @Rule - public ActivityTestRule activityActivityTestRule = new ActivityTestRule(MainActivity.class); - - - private MainActivity mainActivity = null; - private HomeFragment hdf; - - @Before - public void setUp() throws Exception { - mainActivity = activityActivityTestRule.getActivity(); - - hdf = new HomeFragment(); - mainActivity.getSupportFragmentManager().beginTransaction().replace(R.id.container, hdf).commit(); - } - - @Test - public void testViews(){ - View view = hdf.getView().findViewById(R.id.driver); - - assertNotNull(view); - -// Bundle bundle = new Bundle(); -// bundle.putInt("selectedListItem", 0); -// FragmentFactory factory = new FragmentFactory(); -// homeDriverFragment hdf = new homeDriverFragment(); -// -// launchInContainer(hdf.getClass(), bundle, factory); -// Espresso.onView(ViewMatchers.withId(2131231038)).check(ViewAssertions.matches(ViewMatchers.withText("Hello World!"))); - } - - @After - public void TearDown() throws Exception{ - mainActivity = null; - } - -} \ No newline at end of file diff --git a/app/src/androidTest/java/h_mal/appttude/com/driver/base/BaseActivityTest.kt b/app/src/androidTest/java/h_mal/appttude/com/driver/base/BaseActivityTest.kt deleted file mode 100644 index dfd42d1..0000000 --- a/app/src/androidTest/java/h_mal/appttude/com/driver/base/BaseActivityTest.kt +++ /dev/null @@ -1,8 +0,0 @@ -package h_mal.appttude.com.driver.base - -import org.junit.Assert.* - -class BaseActivityTest{ - - -} \ No newline at end of file diff --git a/app/src/androidTest/java/h_mal/appttude/com/driver/user/EspressoTestTwo.java b/app/src/androidTest/java/h_mal/appttude/com/driver/user/EspressoTestTwo.java deleted file mode 100644 index 0cc828f..0000000 --- a/app/src/androidTest/java/h_mal/appttude/com/driver/user/EspressoTestTwo.java +++ /dev/null @@ -1,199 +0,0 @@ -package h_mal.appttude.com.driver.user; - - -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewParent; - -import androidx.test.espresso.ViewInteraction; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.filters.LargeTest; -import androidx.test.rule.ActivityTestRule; - -import org.hamcrest.Description; -import org.hamcrest.Matcher; -import org.hamcrest.TypeSafeMatcher; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import h_mal.appttude.com.driver.R; -import h_mal.appttude.com.driver.ui.user.LoginActivity; - -import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.action.ViewActions.*; -import static androidx.test.espresso.assertion.ViewAssertions.matches; -import static androidx.test.espresso.matcher.ViewMatchers.*; -import static org.hamcrest.Matchers.allOf; -import static org.hamcrest.Matchers.is; - -@LargeTest -@RunWith(AndroidJUnit4.class) -public class EspressoTestTwo { - - @Rule - public ActivityTestRule mActivityTestRule = new ActivityTestRule<>(LoginActivity.class); - - @Test - public void espressoTestTwo() { - // Added a sleep statement to match the app's execution delay. - // The recommended way to handle such scenarios is to use Espresso idling resources: - // https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html - try { - Thread.sleep(7000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.email), - childAtPosition( - childAtPosition( - withId(R.id.fields_holder), - 0), - 0), - isDisplayed())); - appCompatEditText.perform(replaceText("h.malik144.au@gmail.com"), closeSoftKeyboard()); - - ViewInteraction appCompatEditText2 = onView( - allOf(withId(R.id.password), - childAtPosition( - childAtPosition( - withId(R.id.fields_holder), - 1), - 0), - isDisplayed())); - appCompatEditText2.perform(replaceText("crack167"), closeSoftKeyboard()); - - ViewInteraction appCompatEditText3 = onView( - allOf(withId(R.id.password), withText("crack167"), - childAtPosition( - childAtPosition( - withId(R.id.fields_holder), - 1), - 0), - isDisplayed())); - appCompatEditText3.perform(pressImeActionButton()); - - // Added a sleep statement to match the app's execution delay. - // The recommended way to handle such scenarios is to use Espresso idling resources: - // https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html - try { - Thread.sleep(7000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - ViewInteraction button = onView( - allOf(withId(R.id.driver), - childAtPosition( - childAtPosition( - withId(R.id.container), - 0), - 0), - isDisplayed())); - button.check(matches(isDisplayed())); - - // Added a sleep statement to match the app's execution delay. - // The recommended way to handle such scenarios is to use Espresso idling resources: - // https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html - try { - Thread.sleep(7000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - ViewInteraction appCompatImageButton = onView( - allOf(withContentDescription("Open navigation drawer"), - childAtPosition( - allOf(withId(R.id.toolbar), - childAtPosition( - withClassName(is("android.support.design.widget.AppBarLayout")), - 0)), - 1), - isDisplayed())); - appCompatImageButton.perform(click()); - - ViewInteraction cardView = onView( - allOf(withId(R.id.car), - childAtPosition( - childAtPosition( - withId(R.id.container), - 1), - 1), - isDisplayed())); - cardView.perform(click()); - - ViewInteraction cardView2 = onView( - allOf(withId(R.id.vehicle_prof), - childAtPosition( - childAtPosition( - withId(R.id.container), - 1), - 0), - isDisplayed())); - cardView2.perform(click()); - - pressBack(); - - ViewInteraction appCompatButton = onView( - allOf(withId(R.id.driver), withText("Driver Profile"), - childAtPosition( - childAtPosition( - withId(R.id.container), - 1), - 0), - isDisplayed())); - appCompatButton.perform(click()); - - ViewInteraction cardView3 = onView( - allOf(withId(R.id.driver_prof), - childAtPosition( - childAtPosition( - withId(R.id.container), - 1), - 0), - isDisplayed())); - cardView3.perform(click()); - - pressBack(); - - ViewInteraction cardView4 = onView( - allOf(withId(R.id.private_hire), - childAtPosition( - childAtPosition( - withId(R.id.container), - 1), - 1), - isDisplayed())); - cardView4.perform(click()); - - ViewInteraction appCompatButton2 = onView( - allOf(withId(android.R.id.button1), withText("View/Edit"), - childAtPosition( - childAtPosition( - withClassName(is("android.widget.ScrollView")), - 0), - 3))); - appCompatButton2.perform(scrollTo(), click()); - } - - private static Matcher childAtPosition( - final Matcher parentMatcher, final int position) { - - return new TypeSafeMatcher() { - @Override - public void describeTo(Description description) { - description.appendText("Child at position " + position + " in parent "); - parentMatcher.describeTo(description); - } - - @Override - public boolean matchesSafely(View view) { - ViewParent parent = view.getParent(); - return parent instanceof ViewGroup && parentMatcher.matches(parent) - && view.equals(((ViewGroup) parent).getChildAt(position)); - } - }; - } -} diff --git a/app/src/androidTest/java/h_mal/appttude/com/driver/user/LoginActivityTest.java b/app/src/androidTest/java/h_mal/appttude/com/driver/user/LoginActivityTest.java deleted file mode 100644 index e88572f..0000000 --- a/app/src/androidTest/java/h_mal/appttude/com/driver/user/LoginActivityTest.java +++ /dev/null @@ -1,147 +0,0 @@ -package h_mal.appttude.com.driver.user; - - -import android.view.View; -import android.view.ViewGroup; -import android.view.ViewParent; - -import androidx.test.espresso.ViewInteraction; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.filters.LargeTest; -import androidx.test.rule.ActivityTestRule; - -import org.hamcrest.Description; -import org.hamcrest.Matcher; -import org.hamcrest.TypeSafeMatcher; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import h_mal.appttude.com.driver.R; -import h_mal.appttude.com.driver.ui.user.LoginActivity; - -import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.action.ViewActions.*; -import static androidx.test.espresso.matcher.ViewMatchers.*; -import static org.hamcrest.Matchers.allOf; -import static org.hamcrest.Matchers.is; - -@LargeTest -@RunWith(AndroidJUnit4.class) -public class LoginActivityTest { - - @Rule - public ActivityTestRule mActivityTestRule = new ActivityTestRule<>(LoginActivity.class); - - @Test - public void loginActivityTest() { - // Added a sleep statement to match the app's execution delay. - // The recommended way to handle such scenarios is to use Espresso idling resources: - // https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html - try { - Thread.sleep(7000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - ViewInteraction appCompatEditText = onView( - allOf(withId(R.id.email), - childAtPosition( - childAtPosition( - withId(R.id.fields_holder), - 0), - 0), - isDisplayed())); - appCompatEditText.perform(replaceText("h.malik144.au@gmail.com"), closeSoftKeyboard()); - - // Added a sleep statement to match the app's execution delay. - // The recommended way to handle such scenarios is to use Espresso idling resources: - // https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html - try { - Thread.sleep(7000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - ViewInteraction appCompatEditText2 = onView( - allOf(withId(R.id.password), - childAtPosition( - childAtPosition( - withId(R.id.fields_holder), - 1), - 0), - isDisplayed())); - appCompatEditText2.perform(replaceText("crack167"), closeSoftKeyboard()); - -// ViewInteraction appCompatButton = onView( -// allOf(withId(R.id.email_sign_in_button), withText("Sign in"), -// childAtPosition( -// allOf(withId(R.id.email_login_form), -// childAtPosition( -// withClassName(is("android.widget.RelativeLayout")), -// 0)), -// 1), -// isDisplayed())); -// appCompatButton.perform(click()); - - // Added a sleep statement to match the app's execution delay. - // The recommended way to handle such scenarios is to use Espresso idling resources: - // https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html - try { - Thread.sleep(7000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - -// ViewInteraction textView = onView( -// allOf(withText("Choice Minicabs"), -// childAtPosition( -// allOf(withId(R.id.toolbar), -// childAtPosition( -// IsInstanceOf.instanceOf(android.widget.LinearLayout.class), -// 0)), -// 1), -// isDisplayed())); -// textView.check(matches(isDisplayed())); - - // Added a sleep statement to match the app's execution delay. - // The recommended way to handle such scenarios is to use Espresso idling resources: - // https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html - try { - Thread.sleep(7000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - ViewInteraction appCompatButton2 = onView( - allOf(withId(R.id.driver), withText("Driver Profile"), - childAtPosition( - childAtPosition( - withId(R.id.container), - 1), - 0), - isDisplayed())); - appCompatButton2.perform(click()); - } - - private static Matcher childAtPosition( - final Matcher parentMatcher, final int position) { - - return new TypeSafeMatcher() { - @Override - public void describeTo(Description description) { - description.appendText("Child at position " + position + " in parent "); - parentMatcher.describeTo(description); - } - - @Override - public boolean matchesSafely(View view) { - ViewParent parent = view.getParent(); - return parent instanceof ViewGroup && parentMatcher.matches(parent) - && view.equals(((ViewGroup) parent).getChildAt(position)); - } - }; - } - - -} diff --git a/app/src/androidTest/java/h_mal/appttude/com/robots/HomeRobot.kt b/app/src/androidTest/java/h_mal/appttude/com/robots/HomeRobot.kt new file mode 100644 index 0000000..eaf0849 --- /dev/null +++ b/app/src/androidTest/java/h_mal/appttude/com/robots/HomeRobot.kt @@ -0,0 +1,17 @@ +package h_mal.appttude.com.robots + +import h_mal.appttude.com.BaseTestRobot +import h_mal.appttude.com.R + +fun home(func: HomeRobot.() -> Unit) = HomeRobot().apply { func() } +class HomeRobot: BaseTestRobot() { + + fun checkTitleExists(title: String) = matchText(R.id.prova_title_tv, title) + + fun clickLogin() = clickButton(R.id.email_sign_in_button) + + fun clickRegister() = clickButton(R.id.register_button) + + fun clickForgotPassword() = clickButton(R.id.forgot) + +} \ No newline at end of file diff --git a/app/src/androidTest/java/h_mal/appttude/com/robots/LoginRobot.kt b/app/src/androidTest/java/h_mal/appttude/com/robots/LoginRobot.kt new file mode 100644 index 0000000..56a116d --- /dev/null +++ b/app/src/androidTest/java/h_mal/appttude/com/robots/LoginRobot.kt @@ -0,0 +1,24 @@ +package h_mal.appttude.com.robots + +import h_mal.appttude.com.BaseTestRobot +import h_mal.appttude.com.R + + +fun login(func: LoginRobot.() -> Unit) = LoginRobot().apply { func() } +class LoginRobot: BaseTestRobot() { + + fun setEmail(email: String) = fillEditText(R.id.email, email); + + fun setPassword(pass: String) = fillEditText(R.id.password, pass) + + fun clickLogin() = clickButton(R.id.email_sign_in_button) + + fun clickRegister() = clickButton(R.id.register_button) + + fun clickForgotPassword() = clickButton(R.id.forgot) + + fun checkEmailError(err: String) = checkErrorOnTextEntry(R.id.email, err) + + fun checkPasswordError(err: String) = checkErrorOnTextEntry(R.id.password, err) + +} \ No newline at end of file diff --git a/app/src/androidTest/java/h_mal/appttude/com/robots/RegisterRobot.kt b/app/src/androidTest/java/h_mal/appttude/com/robots/RegisterRobot.kt new file mode 100644 index 0000000..b714199 --- /dev/null +++ b/app/src/androidTest/java/h_mal/appttude/com/robots/RegisterRobot.kt @@ -0,0 +1,27 @@ +package h_mal.appttude.com.robots + +import h_mal.appttude.com.BaseTestRobot +import h_mal.appttude.com.R + +fun register(func: RegisterRobot.() -> Unit) = RegisterRobot().apply { func() } +class RegisterRobot: BaseTestRobot() { + + fun setName(name: String) = fillEditText(R.id.name_register, name) + + fun setEmail(email: String) = fillEditText(R.id.email_register, email) + + fun setPassword(pass: String) = fillEditText(R.id.password_top, pass) + + fun setPasswordConfirm(pass: String) = fillEditText(R.id.password_bottom, pass) + + fun clickLogin() = clickButton(R.id.email_sign_up) + + fun checkNameError(err: String) = checkErrorOnTextEntry(R.id.name_register, err) + + fun checkEmailError(err: String) = checkErrorOnTextEntry(R.id.email_register, err) + + fun checkPasswordError(err: String) = checkErrorOnTextEntry(R.id.password_top, err) + + fun checkPasswordConfirmError(err: String) = checkErrorOnTextEntry(R.id.password_bottom, err) + +} \ No newline at end of file diff --git a/app/src/androidTest/java/h_mal/appttude/com/tests/LoginActivityTest.kt b/app/src/androidTest/java/h_mal/appttude/com/tests/LoginActivityTest.kt new file mode 100644 index 0000000..e844a93 --- /dev/null +++ b/app/src/androidTest/java/h_mal/appttude/com/tests/LoginActivityTest.kt @@ -0,0 +1,42 @@ +package h_mal.appttude.com.tests + + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.LargeTest +import androidx.test.rule.ActivityTestRule +import com.google.firebase.auth.FirebaseAuth +import h_mal.appttude.com.BaseUiTest +import h_mal.appttude.com.R +import h_mal.appttude.com.robots.home +import h_mal.appttude.com.ui.user.LoginActivity +import h_mal.appttude.com.robots.login +import h_mal.appttude.com.robots.register +import org.junit.* +import org.junit.runner.RunWith + + +@LargeTest +@RunWith(AndroidJUnit4::class) +class LoginActivityTest: BaseUiTest() { + + @Ignore + override fun getApplicationClass() = LoginActivity::class.java + + @After + fun afterTest(){ + FirebaseAuth.getInstance().signOut() + } + + @Test + fun verifyUserLogin_validUsernameAndPassword_loggedIn() { + login { + setEmail("test-user@testuserdriver.com") + setPassword("Password1234") + clickLogin() + } + home { + checkTitleExists(getResourceString(R.string.welcome_title)) + } + } + +} diff --git a/app/src/driver/AndroidManifest.xml b/app/src/driver/AndroidManifest.xml new file mode 100644 index 0000000..39aca0e --- /dev/null +++ b/app/src/driver/AndroidManifest.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/DriverOverallFragment.kt b/app/src/driver/java/h_mal/appttude/com/ui/driver/DriverOverallFragment.kt similarity index 52% rename from app/src/main/java/h_mal/appttude/com/driver/ui/driver/DriverOverallFragment.kt rename to app/src/driver/java/h_mal/appttude/com/ui/driver/DriverOverallFragment.kt index ceb8dad..12d976f 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/DriverOverallFragment.kt +++ b/app/src/driver/java/h_mal/appttude/com/ui/driver/DriverOverallFragment.kt @@ -1,19 +1,16 @@ -package h_mal.appttude.com.driver.ui.driver +package h_mal.appttude.com.ui.driver import android.os.Bundle import android.view.View -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseFragment -import h_mal.appttude.com.driver.utils.navigateTo -import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel +import androidx.fragment.app.Fragment +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseFragment +import h_mal.appttude.com.utils.navigateTo +import h_mal.appttude.com.viewmodels.DriverLicenseViewModel import kotlinx.android.synthetic.main.fragment_driver_overall.* -class DriverOverallFragment : BaseFragment() { - - private val viewmodel: DriverLicenseViewModel by getFragmentViewModel() - override fun getViewModel(): DriverLicenseViewModel = viewmodel - override fun getLayoutId(): Int = R.layout.fragment_driver_overall +class DriverOverallFragment : Fragment(R.layout.fragment_driver_overall) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/driver/java/h_mal/appttude/com/ui/driver/HomeFragment.kt b/app/src/driver/java/h_mal/appttude/com/ui/driver/HomeFragment.kt new file mode 100644 index 0000000..0665186 --- /dev/null +++ b/app/src/driver/java/h_mal/appttude/com/ui/driver/HomeFragment.kt @@ -0,0 +1,61 @@ +package h_mal.appttude.com.ui.driver + +import android.os.Bundle +import android.view.View +import h_mal.appttude.com.R +import h_mal.appttude.com.base.DataSubmissionBaseFragment +import h_mal.appttude.com.data.DRIVER +import h_mal.appttude.com.utils.hide +import h_mal.appttude.com.utils.navigateTo +import h_mal.appttude.com.utils.show +import h_mal.appttude.com.viewmodels.RoleViewModel +import kotlinx.android.synthetic.main.driver_profile_request.* + +import kotlinx.android.synthetic.main.fragment_home_driver.* +import kotlinx.android.synthetic.main.home_buttons_container.* +import kotlinx.android.synthetic.main.home_buttons_container.driver + + +class HomeFragment : DataSubmissionBaseFragment(R.layout.fragment_home_driver) { + + private val viewmodel: RoleViewModel by getFragmentViewModel() + override fun getViewModel(): RoleViewModel = viewmodel + override var model = String() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + viewmodel.getDataFromDatabase() + } + + override fun onSuccess(data: Any?) { + super.onSuccess(data) + if (data == DRIVER){ + loadDriver() + return + } + loadNonDriver() + } + + private fun loadNonDriver(){ + home_buttons_container.hide() + profile_request_container.show() + + request_driver_button.setOnClickListener { + viewmodel.setDataInDatabase(DRIVER) + } + } + + private fun loadDriver(){ + home_buttons_container.show() + profile_request_container.hide() + + driver.setOnClickListener { + view?.navigateTo(R.id.to_driverOverallFragment) + } + car.setOnClickListener { + view?.navigateTo(R.id.to_vehicleOverallFragment) + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/MainActivity.kt b/app/src/driver/java/h_mal/appttude/com/ui/driver/MainActivity.kt similarity index 75% rename from app/src/main/java/h_mal/appttude/com/driver/ui/driver/MainActivity.kt rename to app/src/driver/java/h_mal/appttude/com/ui/driver/MainActivity.kt index 9682bcc..850d6fc 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/MainActivity.kt +++ b/app/src/driver/java/h_mal/appttude/com/ui/driver/MainActivity.kt @@ -1,12 +1,9 @@ -package h_mal.appttude.com.driver.ui.driver +package h_mal.appttude.com.ui.driver + -import android.Manifest -import android.graphics.Bitmap -import android.graphics.drawable.Drawable import android.os.Bundle import android.view.MenuItem import android.view.View -import android.widget.ImageView import androidx.core.view.GravityCompat import androidx.navigation.NavController import androidx.navigation.findNavController @@ -16,18 +13,11 @@ import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupWithNavController import com.google.android.material.navigation.NavigationView import com.google.firebase.auth.FirebaseUser -import com.squareup.picasso.Picasso.LoadedFrom -import com.squareup.picasso.Target -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.R -import h_mal.appttude.com.driver.base.BaseActivity -import h_mal.appttude.com.driver.dialogs.ExitDialog.displayExitDialog -import h_mal.appttude.com.driver.ui.user.LoginActivity -import h_mal.appttude.com.driver.utils.ActivityIntentBuilder.createIntent -import h_mal.appttude.com.driver.utils.setPicassoImage -import h_mal.appttude.com.driver.viewmodels.MainViewModel +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseActivity +import h_mal.appttude.com.dialogs.ExitDialog.displayExitDialog +import h_mal.appttude.com.utils.setGlideImage +import h_mal.appttude.com.viewmodels.MainViewModel import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.app_bar_main.* import kotlinx.android.synthetic.main.nav_header_main.view.* @@ -70,7 +60,7 @@ class MainActivity : BaseActivity(), drawer_layout.closeDrawer(GravityCompat.START) } else { val navHostFragment = supportFragmentManager.findFragmentById(R.id.container) - navHostFragment?.childFragmentManager?.backStackEntryCount?.takeIf { it > 1 }?.let { + navHostFragment?.childFragmentManager?.backStackEntryCount?.takeIf { it >= 1 }?.let { return super.onBackPressed() } displayExitDialog() @@ -90,14 +80,12 @@ class MainActivity : BaseActivity(), val header: View = nav_view.getHeaderView(0) header.driver_email.text = user.email header.driver_name.text = user.displayName - header.profileImage.setPicassoImage(user.photoUrl) + header.profileImage.setGlideImage(user.photoUrl) } private fun setupLogoutInDrawer(){ logout.setOnClickListener { getViewModel().logOut() - startActivity(createIntent()) - finish() } } diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/VehicleOverallFragment.kt b/app/src/driver/java/h_mal/appttude/com/ui/driver/VehicleOverallFragment.kt similarity index 55% rename from app/src/main/java/h_mal/appttude/com/driver/ui/driver/VehicleOverallFragment.kt rename to app/src/driver/java/h_mal/appttude/com/ui/driver/VehicleOverallFragment.kt index 56e614c..f223af9 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/VehicleOverallFragment.kt +++ b/app/src/driver/java/h_mal/appttude/com/ui/driver/VehicleOverallFragment.kt @@ -1,19 +1,16 @@ -package h_mal.appttude.com.driver.ui.driver +package h_mal.appttude.com.ui.driver import android.os.Bundle import android.view.View -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseFragment -import h_mal.appttude.com.driver.utils.navigateTo -import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel +import androidx.fragment.app.Fragment +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseFragment +import h_mal.appttude.com.utils.navigateTo +import h_mal.appttude.com.viewmodels.DriverLicenseViewModel import kotlinx.android.synthetic.main.fragment_vehicle_overall.* -class VehicleOverallFragment : BaseFragment() { - - private val viewmodel: DriverLicenseViewModel by getFragmentViewModel() - override fun getViewModel(): DriverLicenseViewModel = viewmodel - override fun getLayoutId(): Int = R.layout.fragment_vehicle_overall +class VehicleOverallFragment : Fragment(R.layout.fragment_vehicle_overall) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { diff --git a/app/src/driver/java/h_mal/appttude/com/ui/driver/driverprofile/DriverLicenseFragment.kt b/app/src/driver/java/h_mal/appttude/com/ui/driver/driverprofile/DriverLicenseFragment.kt new file mode 100644 index 0000000..8ac6c3f --- /dev/null +++ b/app/src/driver/java/h_mal/appttude/com/ui/driver/driverprofile/DriverLicenseFragment.kt @@ -0,0 +1,59 @@ +package h_mal.appttude.com.ui.driver.driverprofile + +import android.net.Uri +import android.os.Bundle +import android.view.View +import h_mal.appttude.com.R +import h_mal.appttude.com.base.DataSubmissionBaseFragment +import h_mal.appttude.com.dialogs.DateDialog +import h_mal.appttude.com.model.DriversLicenseObject +import h_mal.appttude.com.utils.setGlideImage +import h_mal.appttude.com.viewmodels.DriverLicenseViewModel +import kotlinx.android.synthetic.main.fragment_driver_license.* + +class DriverLicenseFragment : + DataSubmissionBaseFragment(R.layout.fragment_driver_license) { + + private val viewmodel: DriverLicenseViewModel by getFragmentViewModel() + override fun getViewModel(): DriverLicenseViewModel = viewmodel + override var model = DriversLicenseObject() + + private var imageUri: Uri? = null + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + lic_expiry.apply { + setTextOnChange { model.licenseExpiry = it } + setOnClickListener { + DateDialog(this) { date -> + model.licenseExpiry = date + } + } + } + lic_no.setTextOnChange { model.licenseNumber = it } + + search_image.setOnClickListener { openGalleryWithPermissionRequest() } + submit.setOnClickListener { submit() } + } + + override fun submit() { + validateEditTexts(lic_expiry, lic_no).takeIf { !it }?.let { return } + + viewmodel.setDataInDatabase(model, imageUri) + } + + override fun setFields(data: DriversLicenseObject) { + super.setFields(data) + driversli_img.setGlideImage(data.licenseImageString) + lic_no.setText(data.licenseNumber) + lic_expiry.setText(data.licenseExpiry) + } + + override fun onImageGalleryResult(imageUri: Uri?) { + super.onImageGalleryResult(imageUri) + this.imageUri = imageUri + driversli_img.setGlideImage(imageUri) + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/DriverProfileFragment.kt b/app/src/driver/java/h_mal/appttude/com/ui/driver/driverprofile/DriverProfileFragment.kt similarity index 67% rename from app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/DriverProfileFragment.kt rename to app/src/driver/java/h_mal/appttude/com/ui/driver/driverprofile/DriverProfileFragment.kt index 9bacc86..a0d5f61 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/DriverProfileFragment.kt +++ b/app/src/driver/java/h_mal/appttude/com/ui/driver/driverprofile/DriverProfileFragment.kt @@ -1,24 +1,24 @@ -package h_mal.appttude.com.driver.ui.driver.driverprofile +package h_mal.appttude.com.ui.driver.driverprofile import android.net.Uri import android.os.Bundle import android.view.View -import h_mal.appttude.com.driver.Global.DateDialog -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment -import h_mal.appttude.com.driver.model.DriverProfileObject -import h_mal.appttude.com.driver.utils.setPicassoImage -import h_mal.appttude.com.driver.viewmodels.DriverProfileViewModel +import h_mal.appttude.com.dialogs.DateDialog +import h_mal.appttude.com.R +import h_mal.appttude.com.base.DataSubmissionBaseFragment +import h_mal.appttude.com.model.DriverProfileObject +import h_mal.appttude.com.utils.setGlideImage +import h_mal.appttude.com.viewmodels.DriverProfileViewModel import kotlinx.android.synthetic.main.fragment_driver_profile.* -class DriverProfileFragment: DataSubmissionBaseFragment() { +class DriverProfileFragment: DataSubmissionBaseFragment +(R.layout.fragment_driver_profile) { var localUri: Uri? = null private val viewmodel by getFragmentViewModel() override fun getViewModel(): DriverProfileViewModel = viewmodel - override fun getLayoutId(): Int = R.layout.fragment_driver_profile override var model = DriverProfileObject() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -30,17 +30,21 @@ class DriverProfileFragment: DataSubmissionBaseFragment + model.dob = date + } } } ni_number.setTextOnChange{ model.ni = it } date_first.apply { setTextOnChange{ model.dateFirst = it } setOnClickListener { - DateDialog(this) + DateDialog(this){ date -> + model.dateFirst = date + } } } - add_driver_pic.setOnClickListener { openGalleryWithPermissionRequest() } + add_photo.setOnClickListener { openGalleryWithPermissionRequest() } submit_driver.setOnClickListener{ submit() } } @@ -55,7 +59,7 @@ class DriverProfileFragment: DataSubmissionBaseFragment() { +class PrivateHireLicenseFragment : DataSubmissionBaseFragment +(R.layout.fragment_private_hire_license) { val viewmodel by getFragmentViewModel() override fun getViewModel(): PrivateHireLicenseViewModel = viewmodel override var model = PrivateHireObject() - override fun getLayoutId(): Int = R.layout.fragment_private_hire_license override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -26,7 +26,9 @@ class PrivateHireLicenseFragment : DataSubmissionBaseFragment + model.phExpiry = date + } } } @@ -42,14 +44,14 @@ class PrivateHireLicenseFragment : DataSubmissionBaseFragment() { +class InsuranceFragment : DataSubmissionBaseFragment(R.layout.fragment_insurance) { private var selectedImages: List? = listOf() private val viewmodel: InsuranceViewModel by getFragmentViewModel() override fun getViewModel(): InsuranceViewModel = viewmodel - override fun getLayoutId(): Int = R.layout.fragment_insurance override var model = InsuranceObject() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -28,8 +27,11 @@ class InsuranceFragment : DataSubmissionBaseFragment + model.expiryDate = date + } + } } uploadInsurance.setOnClickListener { openGalleryWithPermissionRequest() } @@ -40,8 +42,10 @@ class InsuranceFragment : DataSubmissionBaseFragment when (list[i]) { - is Uri -> { imageView.setPicassoImage(list[i] as Uri) } - is String -> imageView.setPicassoImage(list[i] as String) + is Uri -> { + imageView.setGlideImage(list[i] as Uri) + } + is String -> imageView.setGlideImage(list[i] as String) } } carouselView.pageCount = list.size diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/LogbookFragment.kt b/app/src/driver/java/h_mal/appttude/com/ui/driver/vehicleprofile/LogbookFragment.kt similarity index 68% rename from app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/LogbookFragment.kt rename to app/src/driver/java/h_mal/appttude/com/ui/driver/vehicleprofile/LogbookFragment.kt index c0c026c..930960a 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/LogbookFragment.kt +++ b/app/src/driver/java/h_mal/appttude/com/ui/driver/vehicleprofile/LogbookFragment.kt @@ -1,22 +1,21 @@ -package h_mal.appttude.com.driver.ui.driver.vehicleprofile +package h_mal.appttude.com.ui.driver.vehicleprofile import android.net.Uri import android.os.Bundle import android.view.View -import h_mal.appttude.com.driver.Objects.LogbookObject -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment -import h_mal.appttude.com.driver.utils.setPicassoImage -import h_mal.appttude.com.driver.viewmodels.LogbookViewModel +import h_mal.appttude.com.model.LogbookObject +import h_mal.appttude.com.R +import h_mal.appttude.com.base.DataSubmissionBaseFragment +import h_mal.appttude.com.utils.setGlideImage +import h_mal.appttude.com.viewmodels.LogbookViewModel import kotlinx.android.synthetic.main.fragment_logbook.* -class LogbookFragment : DataSubmissionBaseFragment() { +class LogbookFragment : DataSubmissionBaseFragment(R.layout.fragment_logbook) { private val viewmodel by getFragmentViewModel() override fun getViewModel(): LogbookViewModel = viewmodel override var model = LogbookObject() - override fun getLayoutId(): Int = R.layout.fragment_logbook override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -38,7 +37,7 @@ class LogbookFragment : DataSubmissionBaseFragment(){ +class MotFragment: DataSubmissionBaseFragment(R.layout.fragment_mot){ private val viewmodel by getFragmentViewModel() override fun getViewModel(): MotViewModel = viewmodel override var model = MotObject() - override fun getLayoutId(): Int = R.layout.fragment_mot override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) mot_expiry.apply { - setTextOnChange{ model.motExpiry = it } setOnClickListener { - DateDialog(this) + DateDialog(this){ date -> + model.motExpiry = date + } } } @@ -42,12 +42,12 @@ class MotFragment: DataSubmissionBaseFragment(){ override fun setFields(data: MotObject) { super.setFields(data) - mot_img.setPicassoImage(data.motImageString) + mot_img.setGlideImage(data.motImageString) mot_expiry.setText(data.motExpiry) } override fun onImageGalleryResult(imageUri: Uri?) { super.onImageGalleryResult(imageUri) - mot_img.setPicassoImage(imageUri) + mot_img.setGlideImage(imageUri) } } \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/PrivateHireVehicleFragment.kt b/app/src/driver/java/h_mal/appttude/com/ui/driver/vehicleprofile/PrivateHireVehicleFragment.kt similarity index 60% rename from app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/PrivateHireVehicleFragment.kt rename to app/src/driver/java/h_mal/appttude/com/ui/driver/vehicleprofile/PrivateHireVehicleFragment.kt index bc555b0..4cbd60d 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/vehicleprofile/PrivateHireVehicleFragment.kt +++ b/app/src/driver/java/h_mal/appttude/com/ui/driver/vehicleprofile/PrivateHireVehicleFragment.kt @@ -1,33 +1,34 @@ -package h_mal.appttude.com.driver.ui.driver.vehicleprofile +package h_mal.appttude.com.ui.driver.vehicleprofile import android.net.Uri import android.os.Bundle import android.view.View -import h_mal.appttude.com.driver.Global.DateDialog -import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment -import h_mal.appttude.com.driver.utils.setPicassoImage -import h_mal.appttude.com.driver.viewmodels.PrivateHireVehicleViewModel +import h_mal.appttude.com.dialogs.DateDialog +import h_mal.appttude.com.model.PrivateHireVehicleObject +import h_mal.appttude.com.R +import h_mal.appttude.com.base.DataSubmissionBaseFragment +import h_mal.appttude.com.utils.setGlideImage +import h_mal.appttude.com.viewmodels.PrivateHireVehicleViewModel import kotlinx.android.synthetic.main.fragment_private_hire_vehicle.* -class PrivateHireVehicleFragment: DataSubmissionBaseFragment(){ +class PrivateHireVehicleFragment: DataSubmissionBaseFragment +(R.layout.fragment_private_hire_vehicle){ private val viewmodel by getFragmentViewModel() override fun getViewModel(): PrivateHireVehicleViewModel = viewmodel override var model = PrivateHireVehicleObject() - override fun getLayoutId(): Int = R.layout.fragment_private_hire_vehicle override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) ph_no.setTextOnChange{ model.phCarNumber = it } ph_expiry.apply { - setTextOnChange{ model.phCarExpiry = it } setOnClickListener { - DateDialog(this) + DateDialog(this){ date -> + model.phCarExpiry = date + } } } @@ -43,13 +44,13 @@ class PrivateHireVehicleFragment: DataSubmissionBaseFragment(){ +class VehicleProfileFragment: DataSubmissionBaseFragment +(R.layout.fragment_vehicle_setup){ private val viewmodel by getFragmentViewModel() override fun getViewModel(): VehicleProfileViewModel = viewmodel override var model = VehicleProfileObject() - override fun getLayoutId(): Int = R.layout.fragment_vehicle_setup override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -29,9 +29,10 @@ class VehicleProfileFragment: DataSubmissionBaseFragment + model.startDate = date + } } } seized_checkbox.setOnCheckedChangeListener { _, res -> model.isSeized = res} diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.kt b/app/src/driver_admin/java/h_mal/appttude/com/ApprovalListAdapter.kt similarity index 83% rename from app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.kt rename to app/src/driver_admin/java/h_mal/appttude/com/ApprovalListAdapter.kt index 13b8dac..e3b109a 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/ApprovalListAdapter.kt +++ b/app/src/driver_admin/java/h_mal/appttude/com/ApprovalListAdapter.kt @@ -1,37 +1,20 @@ -package h_mal.appttude.com.driver.SuperUser +package h_mal.appttude.com.SuperUser import android.app.Activity -import android.content.Context -import android.util.DisplayMetrics 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 androidx.fragment.app.Fragment -import h_mal.appttude.com.driver.Global.FirebaseClass -import h_mal.appttude.com.driver.Global.SetApprovalDialog -import h_mal.appttude.com.driver.ui.driver.MainActivity -import h_mal.appttude.com.driver.Objects.ArchiveObject -import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.ui.driver.vehicleprofile.InsuranceFragment -import h_mal.appttude.com.driver.ui.driver.driverprofile.DriverLicenseFragment -import h_mal.appttude.com.driver.ui.driver.driverprofile.DriverProfileFragment -import h_mal.appttude.com.driver.ui.driver.driverprofile.PrivateHireLicenseFragment -import h_mal.appttude.com.driver.ui.driver.vehicleprofile.LogbookFragment -import h_mal.appttude.com.driver.ui.driver.vehicleprofile.MotFragment -import h_mal.appttude.com.driver.ui.driver.vehicleprofile.PrivateHireVehicleFragment -import h_mal.appttude.com.driver.ui.driver.vehicleprofile.VehicleProfileFragment +import h_mal.appttude.com.Objects.WholeObject.MappedObject +import h_mal.appttude.com.R class ApprovalListAdapter( val activity: Activity, - objects: Array + objects: Array ): ArrayAdapter(activity, 0, objects) { - var mappedObject: MappedObject = objects[0] + var mappedObject: MappedObject? = objects[0] var names: Array = arrayOf( "Driver Profile", diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/DriverStatusClass.kt b/app/src/driver_admin/java/h_mal/appttude/com/DriverStatusClass.kt similarity index 98% rename from app/src/main/java/h_mal/appttude/com/driver/SuperUser/DriverStatusClass.kt rename to app/src/driver_admin/java/h_mal/appttude/com/DriverStatusClass.kt index 42994b5..4665b6a 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/DriverStatusClass.kt +++ b/app/src/driver_admin/java/h_mal/appttude/com/DriverStatusClass.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.SuperUser +package h_mal.appttude.com.SuperUser import android.app.AlertDialog import android.content.Context diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.kt b/app/src/driver_admin/java/h_mal/appttude/com/Objects/ApprovalsObject.kt similarity index 96% rename from app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.kt rename to app/src/driver_admin/java/h_mal/appttude/com/Objects/ApprovalsObject.kt index 3d56389..bdd8a60 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/ApprovalsObject.kt +++ b/app/src/driver_admin/java/h_mal/appttude/com/Objects/ApprovalsObject.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.Objects +package h_mal.appttude.com.Objects diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.kt b/app/src/driver_admin/java/h_mal/appttude/com/Objects/ArchiveObject.kt similarity index 82% rename from app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.kt rename to app/src/driver_admin/java/h_mal/appttude/com/Objects/ArchiveObject.kt index c873651..3ffdcc7 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/ArchiveObject.kt +++ b/app/src/driver_admin/java/h_mal/appttude/com/Objects/ArchiveObject.kt @@ -1,9 +1,6 @@ -package h_mal.appttude.com.driver.Objects +package h_mal.appttude.com.Objects -import h_mal.appttude.com.driver.model.DriversLicenseObject -import h_mal.appttude.com.driver.model.MotObject -import h_mal.appttude.com.driver.model.PrivateHireObject -import h_mal.appttude.com.driver.model.VehicleProfileObject +import h_mal.appttude.com.model.* import java.util.* class ArchiveObject { diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.kt b/app/src/driver_admin/java/h_mal/appttude/com/Objects/UserObject.kt similarity index 89% rename from app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.kt rename to app/src/driver_admin/java/h_mal/appttude/com/Objects/UserObject.kt index eb33dc3..a8bb3b2 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/UserObject.kt +++ b/app/src/driver_admin/java/h_mal/appttude/com/Objects/UserObject.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.Objects +package h_mal.appttude.com.Objects diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.kt b/app/src/driver_admin/java/h_mal/appttude/com/Objects/WholeDriverObject.kt similarity index 83% rename from app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.kt rename to app/src/driver_admin/java/h_mal/appttude/com/Objects/WholeDriverObject.kt index 4bfd816..705ea82 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeDriverObject.kt +++ b/app/src/driver_admin/java/h_mal/appttude/com/Objects/WholeDriverObject.kt @@ -1,7 +1,7 @@ -package h_mal.appttude.com.driver.Objects +package h_mal.appttude.com.Objects -import h_mal.appttude.com.driver.Objects.WholeObject.DriverProfile -import h_mal.appttude.com.driver.Objects.WholeObject.VehicleProfile +import h_mal.appttude.com.Objects.WholeObject.DriverProfile +import h_mal.appttude.com.Objects.WholeObject.VehicleProfile class WholeDriverObject { diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.kt b/app/src/driver_admin/java/h_mal/appttude/com/Objects/WholeObject/DriverProfile.kt similarity index 68% rename from app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.kt rename to app/src/driver_admin/java/h_mal/appttude/com/Objects/WholeObject/DriverProfile.kt index 94cdadf..8bb77b5 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/DriverProfile.kt +++ b/app/src/driver_admin/java/h_mal/appttude/com/Objects/WholeObject/DriverProfile.kt @@ -1,8 +1,8 @@ -package h_mal.appttude.com.driver.Objects.WholeObject +package h_mal.appttude.com.Objects.WholeObject -import h_mal.appttude.com.driver.model.DriverProfileObject -import h_mal.appttude.com.driver.model.DriversLicenseObject -import h_mal.appttude.com.driver.model.PrivateHireObject +import h_mal.appttude.com.model.DriverProfileObject +import h_mal.appttude.com.model.DriversLicenseObject +import h_mal.appttude.com.model.PrivateHireObject class DriverProfile { diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.kt b/app/src/driver_admin/java/h_mal/appttude/com/Objects/WholeObject/MappedObject.kt similarity index 89% rename from app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.kt rename to app/src/driver_admin/java/h_mal/appttude/com/Objects/WholeObject/MappedObject.kt index 140ad51..ad79481 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/MappedObject.kt +++ b/app/src/driver_admin/java/h_mal/appttude/com/Objects/WholeObject/MappedObject.kt @@ -1,8 +1,8 @@ -package h_mal.appttude.com.driver.Objects.WholeObject +package h_mal.appttude.com.Objects.WholeObject import android.os.Parcel import android.os.Parcelable -import h_mal.appttude.com.driver.Objects.WholeDriverObject +import h_mal.appttude.com.Objects.WholeDriverObject class MappedObject : Parcelable { diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.kt b/app/src/driver_admin/java/h_mal/appttude/com/Objects/WholeObject/VehicleProfile.kt similarity index 76% rename from app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.kt rename to app/src/driver_admin/java/h_mal/appttude/com/Objects/WholeObject/VehicleProfile.kt index b004b9b..32801bf 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/WholeObject/VehicleProfile.kt +++ b/app/src/driver_admin/java/h_mal/appttude/com/Objects/WholeObject/VehicleProfile.kt @@ -1,10 +1,10 @@ -package h_mal.appttude.com.driver.Objects.WholeObject +package h_mal.appttude.com.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.PrivateHireVehicleObject -import h_mal.appttude.com.driver.model.MotObject -import h_mal.appttude.com.driver.model.VehicleProfileObject +import h_mal.appttude.com.model.InsuranceObject +import h_mal.appttude.com.model.LogbookObject +import h_mal.appttude.com.model.PrivateHireVehicleObject +import h_mal.appttude.com.model.MotObject +import h_mal.appttude.com.model.VehicleProfileObject class VehicleProfile { diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/RecyclerViewAdapter.kt b/app/src/driver_admin/java/h_mal/appttude/com/RecyclerViewAdapter.kt similarity index 94% rename from app/src/main/java/h_mal/appttude/com/driver/SuperUser/RecyclerViewAdapter.kt rename to app/src/driver_admin/java/h_mal/appttude/com/RecyclerViewAdapter.kt index 89ed7ba..eb1752a 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/RecyclerViewAdapter.kt +++ b/app/src/driver_admin/java/h_mal/appttude/com/RecyclerViewAdapter.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.SuperUser +package h_mal.appttude.com.SuperUser import android.app.AlertDialog import android.content.Context @@ -12,10 +12,10 @@ import android.widget.LinearLayout import android.widget.TextView import androidx.recyclerview.widget.RecyclerView import com.squareup.picasso.Picasso -import h_mal.appttude.com.driver.ui.driver.MainActivity -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 h_mal.appttude.com.ui.driver.MainActivity +import h_mal.appttude.com.Objects.UserObject +import h_mal.appttude.com.Objects.WholeObject.MappedObject +import h_mal.appttude.com.R class RecyclerViewAdapter constructor(var context: Context?, var objects: List?) : diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.kt b/app/src/driver_admin/java/h_mal/appttude/com/UserMainFragment.kt similarity index 70% rename from app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.kt rename to app/src/driver_admin/java/h_mal/appttude/com/UserMainFragment.kt index 6d02df9..88113d7 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/UserMainFragment.kt +++ b/app/src/driver_admin/java/h_mal/appttude/com/UserMainFragment.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.SuperUser +package h_mal.appttude.com.SuperUser import android.os.Bundle import android.util.Log @@ -7,8 +7,8 @@ import android.view.View import android.view.ViewGroup import android.widget.GridView import androidx.fragment.app.Fragment -import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject -import h_mal.appttude.com.driver.R +import h_mal.appttude.com.Objects.WholeObject.MappedObject +import h_mal.appttude.com.R class UserMainFragment : Fragment() { @@ -20,8 +20,8 @@ class UserMainFragment : Fragment() { // Inflate the layout for this fragment val view: View = inflater.inflate(R.layout.fragment_user_main, container, false) Log.i("UserMain", "onCreateView: height = " + view.height) - val mappedObject: MappedObject = requireArguments().getParcelable("mapped") - activity?.title = mappedObject.wholeDriverObject?.user_details?.profileName + val mappedObject: MappedObject? = requireArguments().getParcelable("mapped") + activity?.title = mappedObject?.wholeDriverObject?.user_details?.profileName val listView: GridView = view.findViewById(R.id.approvals_list) listView.adapter = ApprovalListAdapter(requireActivity(), arrayOf(mappedObject)) diff --git a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.kt b/app/src/driver_admin/java/h_mal/appttude/com/homeSuperUserFragment.kt similarity index 95% rename from app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.kt rename to app/src/driver_admin/java/h_mal/appttude/com/homeSuperUserFragment.kt index 56b67a5..61a6c29 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/SuperUser/homeSuperUserFragment.kt +++ b/app/src/driver_admin/java/h_mal/appttude/com/homeSuperUserFragment.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.SuperUser +package h_mal.appttude.com.SuperUser import android.app.AlertDialog import android.content.DialogInterface @@ -12,10 +12,10 @@ 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.ui.driver.MainActivity -import h_mal.appttude.com.driver.Objects.WholeDriverObject -import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject -import h_mal.appttude.com.driver.R +import h_mal.appttude.com.ui.driver.MainActivity +import h_mal.appttude.com.Objects.WholeDriverObject +import h_mal.appttude.com.Objects.WholeObject.MappedObject +import h_mal.appttude.com.R import kotlinx.android.synthetic.main.fragment_home_super_user.* import java.io.IOException import java.util.* diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1a31419..7817eb2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,50 +1,18 @@ + package="h_mal.appttude.com"> - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveFragment.kt b/app/src/main/java/h_mal/appttude/com/Archive/ArchiveFragment.kt similarity index 51% rename from app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveFragment.kt rename to app/src/main/java/h_mal/appttude/com/Archive/ArchiveFragment.kt index 1e5400f..e6e4ee9 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveFragment.kt +++ b/app/src/main/java/h_mal/appttude/com/Archive/ArchiveFragment.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.Archive +package h_mal.appttude.com.Archive import android.os.Bundle import android.view.LayoutInflater @@ -10,12 +10,11 @@ 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.FirebaseClass -import h_mal.appttude.com.driver.Objects.ArchiveObject -import h_mal.appttude.com.driver.R + +import h_mal.appttude.com.R class ArchiveFragment : Fragment() { - var archive: ArchiveObject? = null +// var archive: ArchiveObject? = null private var reference: DatabaseReference? = null private var listView: ListView? = null var archiveString: String? = null @@ -27,18 +26,18 @@ class ArchiveFragment : Fragment() { // ) // .child(FirebaseClass.ARCHIVE_FIREBASE) - archiveString = requireArguments().getString("archive") - var s: String = "" - when (archiveString) { - FirebaseClass.PRIVATE_HIRE_FIREBASE -> s = "Private Hire" - FirebaseClass.DRIVERS_LICENSE_FIREBASE -> s = "License" - FirebaseClass.VEHICLE_DETAILS_FIREBASE -> s = "Vehicle" - FirebaseClass.MOT_FIREBASE -> s = "M.O.T" - FirebaseClass.INSURANCE_FIREBASE -> s = "Insurance" - FirebaseClass.LOG_BOOK_FIREBASE -> s = "Logbook" - FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> s = "Private Hire Vehicle" - } - requireActivity().title = s + " Archive" +// archiveString = requireArguments().getString("archive") +// var s: String = "" +// when (archiveString) { +// FirebaseClass.PRIVATE_HIRE_FIREBASE -> s = "Private Hire" +// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> s = "License" +// FirebaseClass.VEHICLE_DETAILS_FIREBASE -> s = "Vehicle" +// FirebaseClass.MOT_FIREBASE -> s = "M.O.T" +// FirebaseClass.INSURANCE_FIREBASE -> s = "Insurance" +// FirebaseClass.LOG_BOOK_FIREBASE -> s = "Logbook" +// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> s = "Private Hire Vehicle" +// } +// requireActivity().title = s + " Archive" } override fun onCreateView( @@ -52,12 +51,12 @@ class ArchiveFragment : Fragment() { return view } - var valueEventListener: ValueEventListener = object : ValueEventListener { - override fun onDataChange(dataSnapshot: DataSnapshot) { - archive = dataSnapshot.getValue(ArchiveObject::class.java) - listView!!.adapter = ArchiveObjectListAdapter(archive, requireContext(), archiveString) - } - - override fun onCancelled(databaseError: DatabaseError) {} - } +// var valueEventListener: ValueEventListener = object : ValueEventListener { +// override fun onDataChange(dataSnapshot: DataSnapshot) { +// archive = dataSnapshot.getValue(ArchiveObject::class.java) +// listView!!.adapter = ArchiveObjectListAdapter(archive, requireContext(), archiveString) +// } +// +// override fun onCancelled(databaseError: DatabaseError) {} +// } } \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/Archive/ArchiveObjectListAdapter.kt b/app/src/main/java/h_mal/appttude/com/Archive/ArchiveObjectListAdapter.kt new file mode 100644 index 0000000..47f15af --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/Archive/ArchiveObjectListAdapter.kt @@ -0,0 +1,221 @@ +package h_mal.appttude.com.Archive + +import android.content.Context +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.TextView +//import h_mal.appttude.com.Global.FirebaseClass +//import h_mal.appttude.com.Global.ImageSwiperClass +//import h_mal.appttude.com.Objects.ArchiveObject +import h_mal.appttude.com.model.InsuranceObject +import h_mal.appttude.com.R +import h_mal.appttude.com.model.VehicleProfileObject +import h_mal.appttude.com.utils.DateUtils.convertDateStringDatePattern +import java.text.ParseException + +class ArchiveObjectListAdapter( +// var archiveObject: ArchiveObject?, + var context: Context?, + var archiveString: String? +) : BaseAdapter() { + var size: Int = 0 + lateinit var mKeys: Array + private var dateArchivedText: TextView? = null + override fun getCount(): Int { + return size + } + + override fun getItem(position: Int): Any? { + when (archiveString) { +// FirebaseClass.PRIVATE_HIRE_FIREBASE -> return archiveObject?.private_hire +// ?.get(mKeys[position]) +// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> return archiveObject?.driver_license +// ?.get(mKeys[position]) +// FirebaseClass.VEHICLE_DETAILS_FIREBASE -> return archiveObject?.vehicle_details +// ?.get(mKeys[position]) +// FirebaseClass.MOT_FIREBASE -> return archiveObject?.mot_details?.get(mKeys[position]) +// FirebaseClass.INSURANCE_FIREBASE -> return archiveObject?.insurance_details?.get( +// mKeys[position] +// ) +// FirebaseClass.LOG_BOOK_FIREBASE -> return archiveObject?.log_book +// ?.get(mKeys.get(position)) +// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> return archiveObject?.ph_car?.get(mKeys[position]) + else -> return mKeys[position] + } + } + + override fun getItemId(position: Int): Long { + return position.toLong() + } + + override fun getView(position: Int, convertView: View, parent: ViewGroup): View { + var listItemView: View = convertView +// +// if (listItemView == null) { +// if (((archiveString == FirebaseClass.PRIVATE_HIRE_FIREBASE) || (archiveString == FirebaseClass.DRIVERS_LICENSE_FIREBASE) || (archiveString == FirebaseClass.MOT_FIREBASE) || (archiveString == FirebaseClass.LOG_BOOK_FIREBASE) || (archiveString == FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE))) { +// listItemView = LayoutInflater.from(context).inflate( +// R.layout.archive_license_item, parent, false +// ) +// val imageView: ImageView = listItemView.findViewById(R.id.image_archive) +// dateArchivedText = listItemView.findViewById(R.id.date_archived) +// val expiryHolder: LinearLayout = listItemView.findViewById(R.id.expiry_view) +// val fieldTwo: LinearLayout = listItemView.findViewById(R.id.field_two_view) +// val expiryText: TextView = listItemView.findViewById(R.id.exp_text) +// val fiewTwoLable: TextView = listItemView.findViewById(R.id.field_two) +// val fieldTwoText: TextView = listItemView.findViewById(R.id.field_two_text) +// when (archiveString) { +//// FirebaseClass.PRIVATE_HIRE_FIREBASE -> { +//// expiryHolder.visibility = View.VISIBLE +//// fieldTwo.visibility = View.VISIBLE +//// val privateHireObject: PrivateHireObject = +//// getItem(position) as PrivateHireObject +//// Picasso.get().load(privateHireObject.phImageString) +//// .placeholder(R.drawable.choice_img) +//// .into(imageView) +//// dateString(position) +//// expiryText.text = privateHireObject.phExpiry +//// fiewTwoLable.text = "Private Hire License No.:" +//// fieldTwoText.text = privateHireObject.phNumber +//// } +//// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> { +//// expiryHolder.visibility = View.VISIBLE +//// fieldTwo.visibility = View.VISIBLE +//// val driversLicenseObject: DriversLicenseObject = +//// getItem(position) as DriversLicenseObject +//// Picasso.get().load(driversLicenseObject.licenseImageString) +//// .placeholder(R.drawable.choice_img) +//// .into(imageView) +//// dateString(position) +//// expiryText.text = driversLicenseObject.licenseExpiry +//// fiewTwoLable.text = "License No.:" +//// fieldTwoText.text = driversLicenseObject.licenseNumber +//// } +//// FirebaseClass.MOT_FIREBASE -> { +//// expiryHolder.visibility = View.VISIBLE +//// fieldTwo.visibility = View.GONE +//// val motObject: MotObject = getItem(position) as MotObject +//// Picasso.get().load(motObject.motImageString) +//// .placeholder(R.drawable.choice_img) +//// .into(imageView) +//// dateString(position) +//// expiryText.text = motObject.motExpiry +//// } +//// FirebaseClass.LOG_BOOK_FIREBASE -> { +//// expiryHolder.visibility = View.GONE +//// fieldTwo.visibility = View.VISIBLE +//// val logbookObject: LogbookObject = getItem(position) as LogbookObject +//// Picasso.get().load(logbookObject.photoString) +//// .into(MainActivity.loadImage(imageView)) +//// dateString(position) +//// fiewTwoLable.text = "V5C No.:" +//// fieldTwoText.text = logbookObject.v5cnumber +//// } +//// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> { +//// expiryHolder.visibility = View.VISIBLE +//// fieldTwo.visibility = View.VISIBLE +//// val privateHireVehicleObject: PrivateHireVehicleObject = +//// getItem(position) as PrivateHireVehicleObject +//// Picasso.get().load(privateHireVehicleObject.phCarImageString) +//// .into(MainActivity.loadImage(imageView)) +//// dateString(position) +//// expiryText.text = privateHireVehicleObject.phCarExpiry +//// fiewTwoLable.text = "Private Hire Vehicle License No.:" +//// fieldTwoText.text = privateHireVehicleObject.phCarNumber +//// } +//// } +//// } else if ((archiveString == FirebaseClass.INSURANCE_FIREBASE)) { +//// listItemView = LayoutInflater.from(context).inflate( +//// R.layout.archive_insurance_item, parent, false +//// ) +//// val holder: View = listItemView.findViewById(R.id.image_pager) +//// val swiperClass: ImageSwiperClass = ImageSwiperClass(context, holder) +//// // swiperClass.hideDelete(); +//// listItemView.findViewById(R.id.delete).visibility = View.GONE +//// // holder.findViewById(R.id.delete).setVisibility(View.INVISIBLE); +//// dateArchivedText = listItemView.findViewById(R.id.date_archived) +//// dateString(position) +//// val expiryText: TextView = listItemView.findViewById(R.id.exp_text) +//// val fieldTwoText: TextView = listItemView.findViewById(R.id.archive_insurer) +//// val insuranceObject: InsuranceObject = getItem(position) as InsuranceObject +////// swiperClass.reinstantiateList(insuranceObject.photoStrings) +//// expiryText.text = insuranceObject.expiryDate +//// fieldTwoText.text = insuranceObject.insurerName +//// } else if ((archiveString == FirebaseClass.VEHICLE_DETAILS_FIREBASE)) { +//// listItemView = LayoutInflater.from(context).inflate( +//// R.layout.archive_vehicle_item, parent, false +//// ) +//// dateArchivedText = listItemView.findViewById(R.id.date_archived) +//// dateString(position) +//// val numberPlate: TextView = listItemView.findViewById(R.id.number_plate) +//// val keeperName: TextView = listItemView.findViewById(R.id.keeper_name) +//// val keeperAddress: TextView = listItemView.findViewById(R.id.keeper_address) +//// val carText: TextView = listItemView.findViewById(R.id.car_text_arch) +//// val carColour: TextView = listItemView.findViewById(R.id.car_colour) +//// val carSeized: TextView = listItemView.findViewById(R.id.seized_checkbox) +//// val startDate: TextView = listItemView.findViewById(R.id.first_date) +//// val vehicleProfileObject: VehicleProfileObject = +//// getItem(position) as VehicleProfileObject +//// numberPlate.text = vehicleProfileObject.reg +//// keeperName.text = vehicleProfileObject.keeperName +//// keeperAddress.text = vehicleProfileObject.keeperAddress + "\n" + vehicleProfileObject.keeperPostCode +//// carText.text = vehicleProfileObject.make + " " + vehicleProfileObject.model +//// carColour.text = vehicleProfileObject.colour +//// val s: String +//// if (vehicleProfileObject.isSeized) { +//// s = "Yes" +//// } else { +//// s = "No" +//// } +//// carSeized.text = s +//// startDate.text = vehicleProfileObject.startDate +//// } +//// } + return listItemView + } + + private fun dateString(position: Int) { + var success: Boolean = true + try { + dateArchivedText!!.text = mKeys[position].convertDateStringDatePattern("yyyyMMdd_HHmmss", "dd/MM/yyyy") + } catch (e: ParseException) { + e.printStackTrace() + success = false + } finally { + if (!success) { + dateArchivedText!!.text = mKeys.get(position).substring(0, 8) + } + } + } + + companion object { + private val TAG: String = "ArchiveObjectListAdapte" + } + +// init { +// archiveObject?.apply { +// val map = when (archiveString) { +// FirebaseClass.PRIVATE_HIRE_FIREBASE -> private_hire +// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> driver_license +// FirebaseClass.VEHICLE_DETAILS_FIREBASE -> vehicle_details +// FirebaseClass.MOT_FIREBASE -> mot_details +// FirebaseClass.INSURANCE_FIREBASE -> insurance_details +// FirebaseClass.LOG_BOOK_FIREBASE -> log_book +// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> ph_car +// else -> null +// } +// setUp(map) +// } +// +// } + + private fun setUp(map: HashMap?){ + size = map?.size ?: 0 + map?.keys?.toTypedArray()?.let{ + mKeys = it + } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/application/ApplicationViewModelFactory.kt b/app/src/main/java/h_mal/appttude/com/application/ApplicationViewModelFactory.kt similarity index 84% rename from app/src/main/java/h_mal/appttude/com/driver/application/ApplicationViewModelFactory.kt rename to app/src/main/java/h_mal/appttude/com/application/ApplicationViewModelFactory.kt index 77d4103..5195e15 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/application/ApplicationViewModelFactory.kt +++ b/app/src/main/java/h_mal/appttude/com/application/ApplicationViewModelFactory.kt @@ -1,11 +1,11 @@ -package h_mal.appttude.com.driver.application +package h_mal.appttude.com.application import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import h_mal.appttude.com.driver.data.FirebaseAuthSource -import h_mal.appttude.com.driver.data.FirebaseDatabaseSource -import h_mal.appttude.com.driver.data.FirebaseStorageSource -import h_mal.appttude.com.driver.viewmodels.* +import h_mal.appttude.com.data.FirebaseAuthSource +import h_mal.appttude.com.data.FirebaseDatabaseSource +import h_mal.appttude.com.data.FirebaseStorageSource +import h_mal.appttude.com.viewmodels.* class ApplicationViewModelFactory( private val auth: FirebaseAuthSource, @@ -28,6 +28,7 @@ class ApplicationViewModelFactory( isAssignableFrom(MotViewModel::class.java) -> MotViewModel(auth, database, storage) isAssignableFrom(LogbookViewModel::class.java) -> LogbookViewModel(auth, database, storage) isAssignableFrom(PrivateHireVehicleViewModel::class.java) -> PrivateHireVehicleViewModel(auth, database, storage) + isAssignableFrom(RoleViewModel::class.java) -> RoleViewModel(auth, database, storage) else -> throw IllegalArgumentException("Unknown ViewModel class") } as T } diff --git a/app/src/main/java/h_mal/appttude/com/driver/application/DriverApplication.kt b/app/src/main/java/h_mal/appttude/com/application/DriverApplication.kt similarity index 75% rename from app/src/main/java/h_mal/appttude/com/driver/application/DriverApplication.kt rename to app/src/main/java/h_mal/appttude/com/application/DriverApplication.kt index 0b6e77f..7a804f1 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/application/DriverApplication.kt +++ b/app/src/main/java/h_mal/appttude/com/application/DriverApplication.kt @@ -1,9 +1,10 @@ -package h_mal.appttude.com.driver.application +package h_mal.appttude.com.application import android.app.Application -import h_mal.appttude.com.driver.data.FirebaseAuthSource -import h_mal.appttude.com.driver.data.FirebaseDatabaseSource -import h_mal.appttude.com.driver.data.FirebaseStorageSource +import h_mal.appttude.com.data.FirebaseAuthSource +import h_mal.appttude.com.data.FirebaseDatabaseSource +import h_mal.appttude.com.data.FirebaseStorageSource +import h_mal.appttude.com.espresso.IdlingResourceClass import org.kodein.di.Kodein import org.kodein.di.KodeinAware import org.kodein.di.android.x.androidXModule diff --git a/app/src/main/java/h_mal/appttude/com/driver/base/BaseActivity.kt b/app/src/main/java/h_mal/appttude/com/base/BaseActivity.kt similarity index 85% rename from app/src/main/java/h_mal/appttude/com/driver/base/BaseActivity.kt rename to app/src/main/java/h_mal/appttude/com/base/BaseActivity.kt index 0f59ad4..476613f 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/base/BaseActivity.kt +++ b/app/src/main/java/h_mal/appttude/com/base/BaseActivity.kt @@ -1,9 +1,8 @@ -package h_mal.appttude.com.driver.base +package h_mal.appttude.com.base import android.content.Intent import android.os.Bundle import android.view.View -import android.view.ViewGroup import android.view.ViewGroup.LayoutParams import android.view.ViewGroup.LayoutParams.* import androidx.activity.viewModels @@ -11,13 +10,14 @@ import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.Observer import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.application.ApplicationViewModelFactory -import h_mal.appttude.com.driver.data.ViewState -import h_mal.appttude.com.driver.utils.displayToast -import h_mal.appttude.com.driver.utils.hide -import h_mal.appttude.com.driver.utils.show -import h_mal.appttude.com.driver.utils.triggerAnimation +import h_mal.appttude.com.application.ApplicationViewModelFactory +import h_mal.appttude.com.R +import h_mal.appttude.com.data.ViewState +import h_mal.appttude.com.espresso.IdlingResourceClass +import h_mal.appttude.com.utils.displayToast +import h_mal.appttude.com.utils.hide +import h_mal.appttude.com.utils.show +import h_mal.appttude.com.utils.triggerAnimation import org.kodein.di.KodeinAware import org.kodein.di.android.kodein import org.kodein.di.generic.instance @@ -32,6 +32,7 @@ abstract class BaseActivity : AppCompatActivity(), KodeinAwar override val kodein by kodein() val factory by instance() + private val idlingResource by instance() inline fun createLazyViewModel(): Lazy = viewModels { factory } inline fun createViewModel(): VM = @@ -56,7 +57,6 @@ abstract class BaseActivity : AppCompatActivity(), KodeinAwar loadingView = layoutInflater.inflate(R.layout.progress_layout, null) loadingView.setOnClickListener(null) addContentView(loadingView, LayoutParams(MATCH_PARENT, MATCH_PARENT)) - loadingView.hide() } @@ -76,6 +76,7 @@ abstract class BaseActivity : AppCompatActivity(), KodeinAwar open fun onStarted() { loadingView.fadeIn() loading = true + IdlingResourceClass.increment() } /** @@ -84,6 +85,7 @@ abstract class BaseActivity : AppCompatActivity(), KodeinAwar open fun onSuccess(data: Any?) { loadingView.fadeOut() loading = false + IdlingResourceClass.decrement() } /** @@ -93,6 +95,7 @@ abstract class BaseActivity : AppCompatActivity(), KodeinAwar error?.let { displayToast(it) } loadingView.fadeOut() loading = false + IdlingResourceClass.decrement() } private fun configureObserver() { diff --git a/app/src/main/java/h_mal/appttude/com/driver/base/BaseFragment.kt b/app/src/main/java/h_mal/appttude/com/base/BaseFragment.kt similarity index 80% rename from app/src/main/java/h_mal/appttude/com/driver/base/BaseFragment.kt rename to app/src/main/java/h_mal/appttude/com/base/BaseFragment.kt index c8cade6..676d9f3 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/base/BaseFragment.kt +++ b/app/src/main/java/h_mal/appttude/com/base/BaseFragment.kt @@ -1,30 +1,28 @@ -package h_mal.appttude.com.driver.base +package h_mal.appttude.com.base import android.app.Activity import android.content.ClipData import android.content.Intent import android.net.Uri import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup +import androidx.annotation.LayoutRes import androidx.fragment.app.Fragment import androidx.fragment.app.viewModels import androidx.lifecycle.Observer import androidx.lifecycle.ViewModel -import h_mal.appttude.com.driver.application.ApplicationViewModelFactory -import h_mal.appttude.com.driver.data.ViewState -import h_mal.appttude.com.driver.utils.PermissionsUtils +import h_mal.appttude.com.application.ApplicationViewModelFactory +import h_mal.appttude.com.data.ViewState +import h_mal.appttude.com.utils.PermissionsUtils +import kotlinx.android.synthetic.main.fragment_driver_profile.view.* import org.kodein.di.KodeinAware import org.kodein.di.android.x.kodein import org.kodein.di.generic.instance const val IMAGE_SELECT_REQUEST_CODE = 401 -abstract class BaseFragment : Fragment(), KodeinAware { +abstract class BaseFragment(@LayoutRes contentLayoutId: Int) : Fragment(contentLayoutId), KodeinAware { var mActivity: BaseActivity? = null abstract fun getViewModel(): V - abstract fun getLayoutId(): Int private var multipleImage: Boolean = false @@ -37,12 +35,6 @@ abstract class BaseFragment : Fragment(), KodeinAware { inline fun getFragmentViewModel(): Lazy = viewModels { factory } - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle? - ): View? = inflater.inflate(getLayoutId(), container, false) - @Suppress("UNCHECKED_CAST") override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) @@ -100,15 +92,7 @@ abstract class BaseFragment : Fragment(), KodeinAware { } } - private fun ClipData.convertToList(): List { - val list = mutableListOf() - for (i in 0 until itemCount) { - val item: ClipData.Item = getItemAt(i) - val uri = item.uri - list.add(uri) - } - return list.toList() - } + private fun ClipData.convertToList(): List = 0.rangeTo(itemCount).map { getItemAt(it).uri } /** * Pair with {@link #Fragment.onRequestPermissionsResult} @@ -132,7 +116,13 @@ abstract class BaseFragment : Fragment(), KodeinAware { } } + /** + * Called on the result of image selection + */ open fun onImageGalleryResult(imageUri: Uri?){ } + /** + * Called on the result of multiple image selection + */ open fun onImageGalleryResult(imageUris: List?){ } fun openGalleryForImage() { diff --git a/app/src/main/java/h_mal/appttude/com/driver/base/BaseViewModel.kt b/app/src/main/java/h_mal/appttude/com/base/BaseViewModel.kt similarity index 87% rename from app/src/main/java/h_mal/appttude/com/driver/base/BaseViewModel.kt rename to app/src/main/java/h_mal/appttude/com/base/BaseViewModel.kt index 01e5a38..99e8db2 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/base/BaseViewModel.kt +++ b/app/src/main/java/h_mal/appttude/com/base/BaseViewModel.kt @@ -1,9 +1,9 @@ -package h_mal.appttude.com.driver.base +package h_mal.appttude.com.base import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import h_mal.appttude.com.driver.data.ViewState -import h_mal.appttude.com.driver.utils.Event +import h_mal.appttude.com.data.ViewState +import h_mal.appttude.com.utils.Event abstract class BaseViewModel: ViewModel(){ open val uiState: MutableLiveData = MutableLiveData() diff --git a/app/src/main/java/h_mal/appttude/com/driver/base/DataSubmissionBaseFragment.kt b/app/src/main/java/h_mal/appttude/com/base/DataSubmissionBaseFragment.kt similarity index 65% rename from app/src/main/java/h_mal/appttude/com/driver/base/DataSubmissionBaseFragment.kt rename to app/src/main/java/h_mal/appttude/com/base/DataSubmissionBaseFragment.kt index d605eb8..63721e6 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/base/DataSubmissionBaseFragment.kt +++ b/app/src/main/java/h_mal/appttude/com/base/DataSubmissionBaseFragment.kt @@ -1,16 +1,23 @@ -package h_mal.appttude.com.driver.base +package h_mal.appttude.com.base import android.Manifest +import android.content.Intent import android.net.Uri import android.os.Bundle import android.view.View import android.widget.EditText +import androidx.annotation.LayoutRes import androidx.core.widget.doAfterTextChanged -import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions -import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEditText +import androidx.lifecycle.Observer +import h_mal.appttude.com.data.UserAuthState +import h_mal.appttude.com.ui.driver.MainActivity +import h_mal.appttude.com.ui.user.LoginActivity +import h_mal.appttude.com.utils.PermissionsUtils.askForPermissions +import h_mal.appttude.com.utils.TextValidationUtils.validateEditText private const val IMAGE_PERMISSION_RESULT = 402 -abstract class DataSubmissionBaseFragment, T: Any> : BaseFragment(){ +abstract class DataSubmissionBaseFragment, T: Any> + (@LayoutRes contentLayoutId: Int) : BaseFragment(contentLayoutId){ var picUri: Uri? = null @@ -19,10 +26,17 @@ abstract class DataSubmissionBaseFragment, T: override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + getViewModel().stateLiveData.observe(viewLifecycleOwner, Observer { + if (it is UserAuthState.LoggedOut){ + val intent = Intent(requireContext(), LoginActivity::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK) + startActivity(intent) + requireActivity().finish() + } + }) getViewModel().getDataFromDatabase() } - @Suppress("UNCHECKED_CAST") override fun onSuccess(data: Any?) { super.onSuccess(data) @@ -37,9 +51,7 @@ abstract class DataSubmissionBaseFragment, T: model = data } - open fun submit(){ - - } + open fun submit(){} fun openGalleryWithPermissionRequest(){ if (askForPermissions(Manifest.permission.READ_EXTERNAL_STORAGE, IMAGE_PERMISSION_RESULT)) { diff --git a/app/src/main/java/h_mal/appttude/com/driver/base/DataSubmissionBaseViewModel.kt b/app/src/main/java/h_mal/appttude/com/base/DataSubmissionBaseViewModel.kt similarity index 87% rename from app/src/main/java/h_mal/appttude/com/driver/base/DataSubmissionBaseViewModel.kt rename to app/src/main/java/h_mal/appttude/com/base/DataSubmissionBaseViewModel.kt index bd37522..b4ee8ec 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/base/DataSubmissionBaseViewModel.kt +++ b/app/src/main/java/h_mal/appttude/com/base/DataSubmissionBaseViewModel.kt @@ -1,23 +1,25 @@ -package h_mal.appttude.com.driver.base +package h_mal.appttude.com.base import android.net.Uri +import androidx.lifecycle.MutableLiveData import com.google.firebase.database.DatabaseReference import com.google.firebase.storage.StorageReference -import h_mal.appttude.com.driver.data.FirebaseCompletion -import h_mal.appttude.com.driver.data.FirebaseDatabaseSource -import h_mal.appttude.com.driver.data.FirebaseStorageSource -import h_mal.appttude.com.driver.utils.Coroutines.io -import h_mal.appttude.com.driver.utils.DateUtils.getDateTimeStamp -import h_mal.appttude.com.driver.utils.getDataFromDatabaseRef +import h_mal.appttude.com.data.* +import h_mal.appttude.com.utils.Coroutines.io +import h_mal.appttude.com.utils.DateUtils.getDateTimeStamp +import h_mal.appttude.com.utils.getDataFromDatabaseRef import kotlinx.coroutines.Job import kotlinx.coroutines.async import kotlinx.coroutines.coroutineScope import java.io.IOException abstract class DataSubmissionBaseViewModel( + auth: FirebaseAuthentication, private val database: FirebaseDatabaseSource, private val storage: FirebaseStorageSource? ) : BaseViewModel() { + val stateLiveData = auth.userStateListener() + val uid: String = auth.getUid() ?: "" abstract val databaseRef: DatabaseReference abstract val storageRef: StorageReference? diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/DataFieldState.kt b/app/src/main/java/h_mal/appttude/com/data/DataFieldState.kt similarity index 80% rename from app/src/main/java/h_mal/appttude/com/driver/data/DataFieldState.kt rename to app/src/main/java/h_mal/appttude/com/data/DataFieldState.kt index 81342da..f98db94 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/data/DataFieldState.kt +++ b/app/src/main/java/h_mal/appttude/com/data/DataFieldState.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.data +package h_mal.appttude.com.data sealed class DataFieldState { object DefaultState : DataFieldState() diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/EventResponse.kt b/app/src/main/java/h_mal/appttude/com/data/EventResponse.kt similarity index 86% rename from app/src/main/java/h_mal/appttude/com/driver/data/EventResponse.kt rename to app/src/main/java/h_mal/appttude/com/data/EventResponse.kt index c96c91e..20c0e05 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/data/EventResponse.kt +++ b/app/src/main/java/h_mal/appttude/com/data/EventResponse.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.data +package h_mal.appttude.com.data import com.google.firebase.database.DataSnapshot import com.google.firebase.database.DatabaseError diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseAuthSource.kt b/app/src/main/java/h_mal/appttude/com/data/FirebaseAuthSource.kt similarity index 61% rename from app/src/main/java/h_mal/appttude/com/driver/data/FirebaseAuthSource.kt rename to app/src/main/java/h_mal/appttude/com/data/FirebaseAuthSource.kt index 8d68a30..143cd58 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseAuthSource.kt +++ b/app/src/main/java/h_mal/appttude/com/data/FirebaseAuthSource.kt @@ -1,8 +1,9 @@ -package h_mal.appttude.com.driver.data +package h_mal.appttude.com.data import android.net.Uri import com.google.android.gms.tasks.Task import com.google.firebase.auth.* +import java.io.IOException class FirebaseAuthSource: FirebaseAuthentication{ private val auth = FirebaseAuth.getInstance() @@ -24,25 +25,32 @@ class FirebaseAuthSource: FirebaseAuthentication{ override fun updateProfile( name: String?, profilePic: Uri? - ): Task? { + ): Task { val profileUpdates = UserProfileChangeRequest.Builder().apply { name?.let { setDisplayName(it) } profilePic?.let { setPhotoUri(it) } }.build() - - return getUser()?.updateProfile(profileUpdates) + return getCurrentUser().updateProfile(profileUpdates) } override fun reauthenticate( email: String, password: String - ): Task? { + ): Task { val credential = EmailAuthProvider.getCredential(email, password) - - return getUser()?.reauthenticate(credential) + return getCurrentUser().reauthenticate(credential) } - override fun updateEmail(email: String): Task? = getUser()?.updateEmail(email) - override fun updatePassword(password: String): Task? = getUser()?.updatePassword(password) - override fun deleteProfile() = getUser()?.delete() + override fun updateEmail(email: String): Task = getCurrentUser().updateEmail(email) + override fun updatePassword(password: String): Task = getCurrentUser().updatePassword(password) + override fun deleteProfile(): Task = getCurrentUser().delete() + + + override fun userStateListener() : FirebaseLiveData { + return FirebaseLiveData(auth) + } + + private fun getCurrentUser(): FirebaseUser{ + return getUser() ?: throw IOException("User not signed in") + } } \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseAuthentication.kt b/app/src/main/java/h_mal/appttude/com/data/FirebaseAuthentication.kt similarity index 70% rename from app/src/main/java/h_mal/appttude/com/driver/data/FirebaseAuthentication.kt rename to app/src/main/java/h_mal/appttude/com/data/FirebaseAuthentication.kt index 8c038ff..1b2ee5d 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseAuthentication.kt +++ b/app/src/main/java/h_mal/appttude/com/data/FirebaseAuthentication.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.data +package h_mal.appttude.com.data import android.net.Uri import com.google.android.gms.tasks.Task @@ -15,12 +15,13 @@ interface FirebaseAuthentication{ fun updateProfile( name: String?, profilePic: Uri? - ): Task? + ): Task fun reauthenticate( email: String, password: String - ): Task? - fun updateEmail(email: String): Task? - fun updatePassword(password: String): Task? - fun deleteProfile(): Task? + ): Task + fun updateEmail(email: String): Task + fun updatePassword(password: String): Task + fun deleteProfile(): Task + fun userStateListener() : FirebaseLiveData } \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseCompletion.kt b/app/src/main/java/h_mal/appttude/com/data/FirebaseCompletion.kt similarity index 84% rename from app/src/main/java/h_mal/appttude/com/driver/data/FirebaseCompletion.kt rename to app/src/main/java/h_mal/appttude/com/data/FirebaseCompletion.kt index bcf9187..4c0ebaf 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseCompletion.kt +++ b/app/src/main/java/h_mal/appttude/com/data/FirebaseCompletion.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.data +package h_mal.appttude.com.data sealed class FirebaseCompletion{ object Default: FirebaseCompletion() diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseDatabaseSource.kt b/app/src/main/java/h_mal/appttude/com/data/FirebaseDatabaseSource.kt similarity index 98% rename from app/src/main/java/h_mal/appttude/com/driver/data/FirebaseDatabaseSource.kt rename to app/src/main/java/h_mal/appttude/com/data/FirebaseDatabaseSource.kt index 113da92..964be45 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseDatabaseSource.kt +++ b/app/src/main/java/h_mal/appttude/com/data/FirebaseDatabaseSource.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.data +package h_mal.appttude.com.data import com.google.firebase.database.DatabaseReference import com.google.firebase.database.FirebaseDatabase diff --git a/app/src/main/java/h_mal/appttude/com/data/FirebaseLiveData.kt b/app/src/main/java/h_mal/appttude/com/data/FirebaseLiveData.kt new file mode 100644 index 0000000..489267c --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/data/FirebaseLiveData.kt @@ -0,0 +1,28 @@ +package h_mal.appttude.com.data + +import androidx.lifecycle.LiveData +import com.google.firebase.auth.FirebaseAuth +import com.google.firebase.auth.FirebaseUser + +class FirebaseLiveData( + private val firebaseAuth: FirebaseAuth +): LiveData(){ + + override fun onActive() { + super.onActive() + firebaseAuth.addAuthStateListener(stateListener) + } + + override fun onInactive() { + super.onInactive() + firebaseAuth.removeAuthStateListener(stateListener) + } + + private val stateListener = FirebaseAuth.AuthStateListener { p0 -> + if (p0.currentUser == null) { + postValue(UserAuthState.LoggedOut) + } else { + postValue(UserAuthState.LoggedIn(p0.currentUser!!)) + } + } +} diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseStorageSource.kt b/app/src/main/java/h_mal/appttude/com/data/FirebaseStorageSource.kt similarity index 97% rename from app/src/main/java/h_mal/appttude/com/driver/data/FirebaseStorageSource.kt rename to app/src/main/java/h_mal/appttude/com/data/FirebaseStorageSource.kt index d3c5961..323f247 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/data/FirebaseStorageSource.kt +++ b/app/src/main/java/h_mal/appttude/com/data/FirebaseStorageSource.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.data +package h_mal.appttude.com.data import android.net.Uri import com.google.firebase.storage.FirebaseStorage diff --git a/app/src/main/java/h_mal/appttude/com/data/Roles.kt b/app/src/main/java/h_mal/appttude/com/data/Roles.kt new file mode 100644 index 0000000..ec69b30 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/data/Roles.kt @@ -0,0 +1,4 @@ +package h_mal.appttude.com.data + +const val DRIVER = "driver" +const val ADMIN = "super_user" \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/data/UserAuthState.kt b/app/src/main/java/h_mal/appttude/com/data/UserAuthState.kt new file mode 100644 index 0000000..433ae62 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/data/UserAuthState.kt @@ -0,0 +1,9 @@ +package h_mal.appttude.com.data + +import com.google.firebase.auth.FirebaseUser +import h_mal.appttude.com.utils.Event + +sealed class UserAuthState { + object LoggedOut : UserAuthState() + class LoggedIn(val data: FirebaseUser) : UserAuthState() +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/ViewState.kt b/app/src/main/java/h_mal/appttude/com/data/ViewState.kt similarity index 68% rename from app/src/main/java/h_mal/appttude/com/driver/data/ViewState.kt rename to app/src/main/java/h_mal/appttude/com/data/ViewState.kt index 56f22a5..e8be4fa 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/data/ViewState.kt +++ b/app/src/main/java/h_mal/appttude/com/data/ViewState.kt @@ -1,6 +1,6 @@ -package h_mal.appttude.com.driver.data +package h_mal.appttude.com.data -import h_mal.appttude.com.driver.utils.Event +import h_mal.appttude.com.utils.Event sealed class ViewState { diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/DateDialog.kt b/app/src/main/java/h_mal/appttude/com/dialogs/DateDialog.kt similarity index 76% rename from app/src/main/java/h_mal/appttude/com/driver/Global/DateDialog.kt rename to app/src/main/java/h_mal/appttude/com/dialogs/DateDialog.kt index 4df5444..3abba2c 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/DateDialog.kt +++ b/app/src/main/java/h_mal/appttude/com/dialogs/DateDialog.kt @@ -1,30 +1,34 @@ -package h_mal.appttude.com.driver.Global +package h_mal.appttude.com.dialogs import android.app.AlertDialog import android.app.DatePickerDialog import android.app.DatePickerDialog.OnDateSetListener -import android.content.Context import android.icu.util.Calendar import android.os.Build +import android.view.View import android.widget.EditText import androidx.annotation.RequiresApi -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.utils.DateUtils +import h_mal.appttude.com.R +import h_mal.appttude.com.utils.DateUtils private const val DATE_FORMAT = "dd/MM/yyyy" @RequiresApi(api = Build.VERSION_CODES.N) class DateDialog( - private val editText: EditText + private val editText: EditText, + dateSelected:(String?) -> Unit ) : DatePickerDialog(editText.context, AlertDialog.THEME_HOLO_LIGHT) { - var dateSetListener: OnDateSetListener = + private val dateSetListener: OnDateSetListener = OnDateSetListener { _, year, month, dayOfMonth -> val cal = Calendar.getInstance() cal.set(year, month + 1, dayOfMonth) - editText.setText(DateUtils.parseCalenderIntoDateString(cal, DATE_FORMAT)) + val date = DateUtils.parseCalenderIntoDateString(cal, DATE_FORMAT) + dateSelected(date) + editText.setText(date) + editText.error = null } init { diff --git a/app/src/main/java/h_mal/appttude/com/driver/dialogs/ExitDialog.kt b/app/src/main/java/h_mal/appttude/com/dialogs/ExitDialog.kt similarity index 75% rename from app/src/main/java/h_mal/appttude/com/driver/dialogs/ExitDialog.kt rename to app/src/main/java/h_mal/appttude/com/dialogs/ExitDialog.kt index 2012112..075def3 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/dialogs/ExitDialog.kt +++ b/app/src/main/java/h_mal/appttude/com/dialogs/ExitDialog.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.dialogs +package h_mal.appttude.com.dialogs import android.app.Activity import android.app.AlertDialog @@ -10,11 +10,11 @@ object ExitDialog{ fun Activity.displayExitDialog() = AlertDialog.Builder(this) .setTitle("Leave?") .setMessage("Are you sure you want to exit?") - .setNegativeButton(android.R.string.no, null) + .setNegativeButton(android.R.string.cancel, null) .setPositiveButton( - android.R.string.yes + android.R.string.ok ) { _, _ -> - this.finish() + finish() exitProcess(0) } .create() diff --git a/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.kt b/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.kt deleted file mode 100644 index 1aee612..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Archive/ArchiveObjectListAdapter.kt +++ /dev/null @@ -1,227 +0,0 @@ -package h_mal.appttude.com.driver.Archive - -import android.content.Context -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.TextView -import com.squareup.picasso.Picasso -import h_mal.appttude.com.driver.Global.FirebaseClass -import h_mal.appttude.com.driver.Global.ImageSwiperClass -import h_mal.appttude.com.driver.ui.driver.MainActivity -import h_mal.appttude.com.driver.Objects.ArchiveObject -import h_mal.appttude.com.driver.Objects.InsuranceObject -import h_mal.appttude.com.driver.Objects.LogbookObject -import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.model.DriversLicenseObject -import h_mal.appttude.com.driver.model.MotObject -import h_mal.appttude.com.driver.model.PrivateHireObject -import h_mal.appttude.com.driver.model.VehicleProfileObject -import h_mal.appttude.com.driver.utils.DateUtils.convertDateStringDatePattern -import java.text.ParseException - -class ArchiveObjectListAdapter( - var archiveObject: ArchiveObject?, - var context: Context?, - var archiveString: String? -) : BaseAdapter() { - var size: Int = 0 - lateinit var mKeys: Array - private var dateArchivedText: TextView? = null - override fun getCount(): Int { - return size - } - - override fun getItem(position: Int): Any? { - when (archiveString) { - FirebaseClass.PRIVATE_HIRE_FIREBASE -> return archiveObject?.private_hire - ?.get(mKeys[position]) - FirebaseClass.DRIVERS_LICENSE_FIREBASE -> return archiveObject?.driver_license - ?.get(mKeys[position]) - FirebaseClass.VEHICLE_DETAILS_FIREBASE -> return archiveObject?.vehicle_details - ?.get(mKeys[position]) - FirebaseClass.MOT_FIREBASE -> return archiveObject?.mot_details?.get(mKeys[position]) - FirebaseClass.INSURANCE_FIREBASE -> return archiveObject?.insurance_details?.get( - mKeys[position] - ) - FirebaseClass.LOG_BOOK_FIREBASE -> return archiveObject?.log_book - ?.get(mKeys.get(position)) - FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> return archiveObject?.ph_car?.get(mKeys[position]) - else -> return mKeys[position] - } - } - - override fun getItemId(position: Int): Long { - return position.toLong() - } - - override fun getView(position: Int, convertView: View, parent: ViewGroup): View { - var listItemView: View = convertView - if (listItemView == null) { - if (((archiveString == FirebaseClass.PRIVATE_HIRE_FIREBASE) || (archiveString == FirebaseClass.DRIVERS_LICENSE_FIREBASE) || (archiveString == FirebaseClass.MOT_FIREBASE) || (archiveString == FirebaseClass.LOG_BOOK_FIREBASE) || (archiveString == FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE))) { - listItemView = LayoutInflater.from(context).inflate( - R.layout.archive_license_item, parent, false - ) - val imageView: ImageView = listItemView.findViewById(R.id.image_archive) - dateArchivedText = listItemView.findViewById(R.id.date_archived) - val expiryHolder: LinearLayout = listItemView.findViewById(R.id.expiry_view) - val fieldTwo: LinearLayout = listItemView.findViewById(R.id.field_two_view) - val expiryText: TextView = listItemView.findViewById(R.id.exp_text) - val fiewTwoLable: TextView = listItemView.findViewById(R.id.field_two) - val fieldTwoText: TextView = listItemView.findViewById(R.id.field_two_text) - when (archiveString) { -// FirebaseClass.PRIVATE_HIRE_FIREBASE -> { -// expiryHolder.visibility = View.VISIBLE -// fieldTwo.visibility = View.VISIBLE -// val privateHireObject: PrivateHireObject = -// getItem(position) as PrivateHireObject -// Picasso.get().load(privateHireObject.phImageString) -// .placeholder(R.drawable.choice_img) -// .into(imageView) -// dateString(position) -// expiryText.text = privateHireObject.phExpiry -// fiewTwoLable.text = "Private Hire License No.:" -// fieldTwoText.text = privateHireObject.phNumber -// } -// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> { -// expiryHolder.visibility = View.VISIBLE -// fieldTwo.visibility = View.VISIBLE -// val driversLicenseObject: DriversLicenseObject = -// getItem(position) as DriversLicenseObject -// Picasso.get().load(driversLicenseObject.licenseImageString) -// .placeholder(R.drawable.choice_img) -// .into(imageView) -// dateString(position) -// expiryText.text = driversLicenseObject.licenseExpiry -// fiewTwoLable.text = "License No.:" -// fieldTwoText.text = driversLicenseObject.licenseNumber -// } -// FirebaseClass.MOT_FIREBASE -> { -// expiryHolder.visibility = View.VISIBLE -// fieldTwo.visibility = View.GONE -// val motObject: MotObject = getItem(position) as MotObject -// Picasso.get().load(motObject.motImageString) -// .placeholder(R.drawable.choice_img) -// .into(imageView) -// dateString(position) -// expiryText.text = motObject.motExpiry -// } -// FirebaseClass.LOG_BOOK_FIREBASE -> { -// expiryHolder.visibility = View.GONE -// fieldTwo.visibility = View.VISIBLE -// val logbookObject: LogbookObject = getItem(position) as LogbookObject -// Picasso.get().load(logbookObject.photoString) -// .into(MainActivity.loadImage(imageView)) -// dateString(position) -// fiewTwoLable.text = "V5C No.:" -// fieldTwoText.text = logbookObject.v5cnumber -// } -// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> { -// expiryHolder.visibility = View.VISIBLE -// fieldTwo.visibility = View.VISIBLE -// val privateHireVehicleObject: PrivateHireVehicleObject = -// getItem(position) as PrivateHireVehicleObject -// Picasso.get().load(privateHireVehicleObject.phCarImageString) -// .into(MainActivity.loadImage(imageView)) -// dateString(position) -// expiryText.text = privateHireVehicleObject.phCarExpiry -// fiewTwoLable.text = "Private Hire Vehicle License No.:" -// fieldTwoText.text = privateHireVehicleObject.phCarNumber -// } - } - } else if ((archiveString == FirebaseClass.INSURANCE_FIREBASE)) { - listItemView = LayoutInflater.from(context).inflate( - R.layout.archive_insurance_item, parent, false - ) - val holder: View = listItemView.findViewById(R.id.image_pager) - val swiperClass: ImageSwiperClass = ImageSwiperClass(context, holder) - // swiperClass.hideDelete(); - listItemView.findViewById(R.id.delete).visibility = View.GONE - // holder.findViewById(R.id.delete).setVisibility(View.INVISIBLE); - dateArchivedText = listItemView.findViewById(R.id.date_archived) - dateString(position) - val expiryText: TextView = listItemView.findViewById(R.id.exp_text) - val fieldTwoText: TextView = listItemView.findViewById(R.id.archive_insurer) - val insuranceObject: InsuranceObject = getItem(position) as InsuranceObject -// swiperClass.reinstantiateList(insuranceObject.photoStrings) - expiryText.text = insuranceObject.expiryDate - fieldTwoText.text = insuranceObject.insurerName - } else if ((archiveString == FirebaseClass.VEHICLE_DETAILS_FIREBASE)) { - listItemView = LayoutInflater.from(context).inflate( - R.layout.archive_vehicle_item, parent, false - ) - dateArchivedText = listItemView.findViewById(R.id.date_archived) - dateString(position) - val numberPlate: TextView = listItemView.findViewById(R.id.number_plate) - val keeperName: TextView = listItemView.findViewById(R.id.keeper_name) - val keeperAddress: TextView = listItemView.findViewById(R.id.keeper_address) - val carText: TextView = listItemView.findViewById(R.id.car_text_arch) - val carColour: TextView = listItemView.findViewById(R.id.car_colour) - val carSeized: TextView = listItemView.findViewById(R.id.seized_checkbox) - val startDate: TextView = listItemView.findViewById(R.id.first_date) - val vehicleProfileObject: VehicleProfileObject = - getItem(position) as VehicleProfileObject - numberPlate.text = vehicleProfileObject.reg - keeperName.text = vehicleProfileObject.keeperName - keeperAddress.text = vehicleProfileObject.keeperAddress + "\n" + vehicleProfileObject.keeperPostCode - carText.text = vehicleProfileObject.make + " " + vehicleProfileObject.model - carColour.text = vehicleProfileObject.colour - val s: String - if (vehicleProfileObject.isSeized) { - s = "Yes" - } else { - s = "No" - } - carSeized.text = s - startDate.text = vehicleProfileObject.startDate - } - } - return listItemView - } - - private fun dateString(position: Int) { - var success: Boolean = true - try { - dateArchivedText!!.text = mKeys[position].convertDateStringDatePattern("yyyyMMdd_HHmmss", "dd/MM/yyyy") - } catch (e: ParseException) { - e.printStackTrace() - success = false - } finally { - if (!success) { - dateArchivedText!!.text = mKeys.get(position).substring(0, 8) - } - } - } - - companion object { - private val TAG: String = "ArchiveObjectListAdapte" - } - - init { - archiveObject?.apply { - val map = when (archiveString) { - FirebaseClass.PRIVATE_HIRE_FIREBASE -> private_hire - FirebaseClass.DRIVERS_LICENSE_FIREBASE -> driver_license - FirebaseClass.VEHICLE_DETAILS_FIREBASE -> vehicle_details - FirebaseClass.MOT_FIREBASE -> mot_details - FirebaseClass.INSURANCE_FIREBASE -> insurance_details - FirebaseClass.LOG_BOOK_FIREBASE -> log_book - FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> ph_car - else -> null - } - setUp(map) - } - - } - - private fun setUp(map: HashMap?){ - size = map?.size ?: 0 - map?.keys?.toTypedArray()?.let{ - mKeys = it - } - } -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.kt deleted file mode 100644 index 3eb4a5a..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ApprovalsClass.kt +++ /dev/null @@ -1,87 +0,0 @@ -package h_mal.appttude.com.driver.Global - -import h_mal.appttude.com.driver.Objects.ApprovalsObject -import h_mal.appttude.com.driver.Objects.WholeDriverObject -import h_mal.appttude.com.driver.R - - -class ApprovalsClass { - fun getOverApprovalStatusCode(wholeDriverObject: WholeDriverObject?): Int { - if (wholeDriverObject!!.approvalsObject != null) { - val approvalsObject: ApprovalsObject = wholeDriverObject!!.approvalsObject!! - val ints: IntArray = intArrayOf( - approvalsObject.driver_details_approval, - approvalsObject.driver_license_approval, - approvalsObject.private_hire_approval, - approvalsObject.vehicle_details_approval, - approvalsObject.insurance_details_approval, - approvalsObject.mot_details_approval, - approvalsObject.log_book_approval, - approvalsObject.ph_car_approval - ) - return setImageResource(mode(ints)) - } - return setImageResource(FirebaseClass.NO_DATE_PRESENT) - } - - fun setStatusCode(userId: String?, approvalNameString: String, status: Int) { -// if (!(approvalNameString == "")) { -// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE) -// .child((userId)!!).child(FirebaseClass.USER_APPROVALS) -// .child(approvalNameString) -// .setValue(status).addOnCompleteListener { task -> -// if (task.isSuccessful) { -// } else { -// } -// } -// } - } - - fun setImageResource(statusCode: Int): Int { - val imageResource: Int - when (statusCode) { - FirebaseClass.APPROVAL_PENDING -> imageResource = R.drawable.pending - FirebaseClass.APPROVAL_DENIED -> imageResource = R.drawable.denied - FirebaseClass.APPROVED -> imageResource = R.drawable.approved - else -> imageResource = R.drawable.zero - } - return imageResource - } - - companion object { - fun mode(array: IntArray): Int { - var mode: Int = array.get(0) - var maxCount: Int = 0 - if (matchedArray(array, 3)) { - return 3 - } else if (matchedArray(array, 0)) { - return 0 - } else { - for (i in array.indices) { - val value: Int = array.get(i) - var count: Int = 1 - for (j in array.indices) { - if (array.get(j) == value) count++ - if (count > maxCount) { - mode = value - maxCount = count - } - } - } - if (mode == 3) { - return 1 - } - } - return mode - } - - private fun matchedArray(array: IntArray, match: Int): Boolean { - for (i: Int in array) { - if (i != match) { - return false - } - } - return true - } - } -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.kt deleted file mode 100644 index 2f1e129..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ArchiveClass.kt +++ /dev/null @@ -1,70 +0,0 @@ -package h_mal.appttude.com.driver.Global - -import android.app.AlertDialog -import android.content.Context -import android.os.Bundle -import androidx.fragment.app.Fragment -import h_mal.appttude.com.driver.utils.UPLOAD_NEW - - -class ArchiveClass { - fun archiveRecord(UID: String?, item: String?, `object`: Any?) { -// val toPath: DatabaseReference = -// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child( -// (UID)!! -// ) -// .child(FirebaseClass.ARCHIVE_FIREBASE).child((item)!!) -// toPath.child(MainActivity.dateTimeStamp).setValue(`object`) -// .addOnCompleteListener { task -> -// if (task.isSuccessful) { -// Log.i(TAG, "onComplete: archive successful") -// } else { -// Log.i(TAG, "onComplete: archive unsuccessful") -// } -// } - } - - fun openDialogArchive(context: Context?, `object`: Any?, fragment: Fragment) { - if (`object` == null) { -// executeFragment(fragment) - } else { - val builder: AlertDialog.Builder = AlertDialog.Builder(context) - builder.setMessage("Do you want to View/Edit or Upload new?") - .setPositiveButton("View/Edit" - ) { _, _ -> -// executeFragment(fragment) - } - .setNegativeButton("Upload New" - ) { _, _ -> - val bundle = Bundle() - bundle.putString(UPLOAD_NEW, "Yes") - fragment.arguments = bundle -// executeFragment(fragment) - } - .create().show() - } - } - - fun openDialogArchive(context: Context?, `object`: Any?, user: String?, fragment: Fragment?) { - val bundle: Bundle = Bundle() - bundle.putString("user_id", user) - fragment!!.arguments = bundle - if (`object` == null) { -// executeFragment(fragment) - } else { - val builder: AlertDialog.Builder = AlertDialog.Builder(context) - builder.setMessage("Do you want to View/Edit or Upload new?") - .setPositiveButton("View/Edit" - ) { _, _ -> -// executeFragment(fragment) - } - .setNegativeButton("Upload New" - ) { _, _ -> - bundle.putString(UPLOAD_NEW, "Yes") -// executeFragment(fragment) - } - .create().show() - } - } - -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/FirebaseClass.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/FirebaseClass.kt deleted file mode 100644 index d644835..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/FirebaseClass.kt +++ /dev/null @@ -1,71 +0,0 @@ -package h_mal.appttude.com.driver.Global - -import android.content.Context -import android.net.Uri - -class FirebaseClass constructor(var context: Context?, var filePath: Uri?, var delegate: Response) { - open interface Response { - fun processFinish(output: Uri?) - } - - fun uploadImage(path: String, name: String) { -// if (filePath != null) { -// val progressDialog: ProgressDialog = ProgressDialog(context) -// progressDialog.setTitle("Uploading...") -// progressDialog.show() -// val ref: StorageReference = MainActivity.storageReference!!.child( -// ("images/" + MainActivity.auth!!.currentUser!! -// .uid + "/" + path -// + "/" + name) -// ) -// val uploadTask: UploadTask = ref.putFile(filePath!!) -// uploadTask.addOnProgressListener { taskSnapshot -> -// val progress: Double = -// (100.0 * taskSnapshot.bytesTransferred / taskSnapshot -// .totalByteCount) -// progressDialog.setMessage("Uploaded " + progress.toInt() + "%") -// }.continueWithTask { task -> -// if (!task.isSuccessful) { -// throw (task.exception)!! -// } -// -// // Continue with the task to get the download URL -// ref.downloadUrl -// }.addOnCompleteListener { task -> -// if (task.isSuccessful) { -// delegate.processFinish(task.result) -// progressDialog.dismiss() -// context?.displayToast("Uploaded Successfully") -// println("onComplete: uploaded Successful uri: " + task.result) -// } else { -// delegate.processFinish(null) -// progressDialog.dismiss() -// context?.displayToast("Uploaded Successfully") -// } -// } -// } - } - - companion object { - val USER_FIREBASE: String = "user" - val DRIVER_FIREBASE: String = "driver_profile" - val DRIVER_DETAILS_FIREBASE: String = "driver_details" - val PRIVATE_HIRE_FIREBASE: String = "private_hire" - val DRIVERS_LICENSE_FIREBASE: String = "driver_license" - val DRIVER_STATUS: String = "driver_status" - val USER_APPROVALS: String = "approvalsObject" - val APPROVAL_CONSTANT: String = "_approval" - val ARCHIVE_FIREBASE: String = "archive" - val DRIVER_NUMBER: String = "driver_number" - val VEHICLE_FIREBASE: String = "vehicle_profile" - val MOT_FIREBASE: String = "mot_details" - val VEHICLE_DETAILS_FIREBASE: String = "vehicle_details" - val INSURANCE_FIREBASE: String = "insurance_details" - val LOG_BOOK_FIREBASE: String = "log_book" - val PRIVATE_HIRE_VEHICLE_LICENSE: String = "private_hire_vehicle" - val NO_DATE_PRESENT: Int = 0 - val APPROVAL_PENDING: Int = 1 - val APPROVAL_DENIED: Int = 2 - val APPROVED: Int = 3 - } -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorDialog.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorDialog.kt deleted file mode 100644 index 7d0cbd1..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorDialog.kt +++ /dev/null @@ -1,129 +0,0 @@ -package h_mal.appttude.com.driver.Global - -import android.Manifest -import android.app.Dialog -import android.content.Context -import android.content.DialogInterface -import android.content.Intent -import android.content.pm.PackageManager -import android.icu.text.SimpleDateFormat -import android.net.Uri -import android.os.Bundle -import android.os.Environment -import android.provider.MediaStore -import android.widget.Button -import android.widget.Toast -import androidx.core.app.ActivityCompat -import androidx.core.content.FileProvider -import androidx.fragment.app.Fragment -import h_mal.appttude.com.driver.R -import java.io.File -import java.util.* - - -class ImageSelectorDialog : Dialog { - private val TAG: String = this.javaClass.simpleName - private var saveFileName: String - var fragment: Fragment? = null - - constructor(context: Context) : super(context) { - saveFileName = "default_name" - } - - constructor(context: Context, themeResId: Int) : super(context, themeResId) { - saveFileName = "default_name" - } - - protected constructor( - context: Context, - cancelable: Boolean, - cancelListener: DialogInterface.OnCancelListener? - ) : super(context, cancelable, cancelListener) { - saveFileName = "default_name" - } - - override fun onCreate(savedInstanceState: Bundle) { - super.onCreate(savedInstanceState) - setContentView(R.layout.address_dialog) - - //check if we have we have storage rights - val permissionPic: Int = ActivityCompat.checkSelfPermission( - context, - Manifest.permission.WRITE_EXTERNAL_STORAGE - ) - val permissionCam: Int = - ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA) -// fragment = MainActivity.mainFragmentManager.fragments[0] - val upload: Button = findViewById(R.id.upload) - val takePic: Button = findViewById(R.id.take_pic) - upload.setOnClickListener { - if (permissionPic == PackageManager.PERMISSION_GRANTED) { - chooseImage() - } else { - Toast.makeText(context, "Storage permissions required", Toast.LENGTH_SHORT) - .show() - ActivityCompat.requestPermissions( - (fragment!!.requireActivity()), - arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), - STORAGE_PERMISSION_CODE - ) - } - dismiss() - } - takePic.setOnClickListener { - if (permissionCam == PackageManager.PERMISSION_GRANTED) { - val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) - val file: File = createFile() - photoURI = Uri.fromFile(file) - val imageUri: Uri = FileProvider.getUriForFile( - context, - "h_mal.appttude.com.driver", - file - ) - cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri) - fragment!!.startActivityForResult(cameraIntent, CAMERA_REQUEST) - } else { - Toast.makeText(context, "Camera Permissions required", Toast.LENGTH_SHORT) - .show() - ActivityCompat.requestPermissions( - (fragment!!.requireActivity()), arrayOf(Manifest.permission.CAMERA), - MY_CAMERA_PERMISSION_CODE - ) - } - dismiss() - } - } - - fun setImageName(saveFileName: String) { - this.saveFileName = saveFileName - } - - private fun createFile(): File { - //create directory - val root: File = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES) - //create file - val sdf: SimpleDateFormat = SimpleDateFormat("yyyyMMdd_HHmm") - val currentDateandTime: String = sdf.format(Date()) - val fname: String = saveFileName + currentDateandTime - val image: File = File(root, fname) - return image - } - - private fun chooseImage() { - val intent: Intent = Intent() - intent.type = "image/*" - intent.action = Intent.ACTION_GET_CONTENT - fragment!!.startActivityForResult( - Intent.createChooser(intent, "Select Picture"), - PICK_IMAGE_REQUEST - ) - } - - companion object { - val PICK_IMAGE_REQUEST: Int = 71 - val CAMERA_REQUEST: Int = 1888 - val MY_CAMERA_PERMISSION_CODE: Int = 100 - val STORAGE_PERMISSION_CODE: Int = 101 - var photoURI: Uri? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorResults.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorResults.kt deleted file mode 100644 index 36c73f4..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSelectorResults.kt +++ /dev/null @@ -1,159 +0,0 @@ -package h_mal.appttude.com.driver.Global - -import android.Manifest -import android.app.Activity -import android.content.Intent -import android.content.pm.PackageManager -import android.graphics.Bitmap -import android.net.Uri -import android.os.Environment -import android.provider.MediaStore -import android.view.View -import android.widget.ImageView -import android.widget.Toast -import androidx.core.app.ActivityCompat -import h_mal.appttude.com.driver.utils.DateUtils.getDateStamp -import h_mal.appttude.com.driver.utils.DateUtils.getDateTimeStamp -import java.io.File -import java.io.FileOutputStream -import java.io.IOException - -class ImageSelectorResults // public FilepathResponse delegate; -{ - lateinit var activity: Activity - - interface FilepathResponse { - fun processFinish(output: Uri?) - } - - fun Results( - activity: Activity, requestCode: Int, resultCode: Int, data: Intent?, filePath: Uri?, - imageView: ImageView?, delegate: FilepathResponse - ) { - var filePath: Uri? = filePath - this.activity = activity - if ((requestCode == ImageSelectorDialog.PICK_IMAGE_REQUEST) && (resultCode == Activity.RESULT_OK - ) && (data != null) && (data.data != null) - ) { - val uri = data.data - var bitmap: Bitmap? = null - try { - bitmap = - MediaStore.Images.Media.getBitmap(activity.contentResolver, uri) - if (imageView!!.visibility != View.VISIBLE) { - imageView.visibility = View.VISIBLE - } - imageView.setImageBitmap(bitmap) - } catch (e: IOException) { - e.printStackTrace() - } finally { - if (bitmap != null) { - delegate.processFinish(uri) - } - } - } - if (requestCode == ImageSelectorDialog.CAMERA_REQUEST && resultCode == Activity.RESULT_OK) { - //check if we have we have storage rights - val permission: Int = 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 { - val f: File = - Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) - val fname: String = "driver" + getDateStamp() + ".jpg" - val image = File(f, fname) - val fileOutputStream = FileOutputStream(image) - filePath = ImageSelectorDialog.photoURI - val bitmap: Bitmap = MediaStore.Images.Media - .getBitmap( - activity.contentResolver, - ImageSelectorDialog.photoURI - ) - imageView!!.setImageBitmap(bitmap) - bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fileOutputStream) - fileOutputStream.flush() - fileOutputStream.close() - galleryAddPic() - } catch (e: Exception) { - e.printStackTrace() - } - } - delegate.processFinish(filePath) - } - } - - fun Results( - activity: Activity, - requestCode: Int, - resultCode: Int, - data: Intent?, - filePath: Uri?, - delegate: FilepathResponse - ) { - var filePath: Uri? = filePath - this.activity = activity - if ((requestCode == ImageSelectorDialog.PICK_IMAGE_REQUEST) && (resultCode == Activity.RESULT_OK - ) && (data != null) && (data.data != null) - ) { - filePath = data.data - var bitmap: Bitmap? = null - try { - bitmap = - MediaStore.Images.Media.getBitmap(activity.contentResolver, filePath) - } catch (e: IOException) { - e.printStackTrace() - } finally { - if (bitmap != null) { - delegate.processFinish(filePath) - } - } - } - if (requestCode == ImageSelectorDialog.CAMERA_REQUEST && resultCode == Activity.RESULT_OK) { - //check if we have we have storage rights - val permission: Int = 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 { - val f: File = - Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) - val fname: String = "driver" + getDateTimeStamp() + ".jpg" - val image: File = File(f, fname) - val fileOutputStream: FileOutputStream = FileOutputStream(image) - filePath = ImageSelectorDialog.photoURI - val bitmap: Bitmap = MediaStore.Images.Media - .getBitmap( - activity.contentResolver, - ImageSelectorDialog.photoURI - ) - bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fileOutputStream) - fileOutputStream.flush() - fileOutputStream.close() - galleryAddPic() - } catch (e: Exception) { - e.printStackTrace() - } - } - delegate.processFinish(filePath) - } - } - - private fun galleryAddPic() { - val mediaScanIntent: Intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE) - val f: File = File(ImageSelectorDialog.photoURI!!.path) - val contentUri: Uri = Uri.fromFile(f) - mediaScanIntent.data = contentUri - activity.sendBroadcast(mediaScanIntent) - } -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.kt deleted file mode 100644 index 76e9269..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageSwiperClass.kt +++ /dev/null @@ -1,159 +0,0 @@ -package h_mal.appttude.com.driver.Global - -import android.content.Context -import android.content.ContextWrapper -import android.view.View -import android.widget.ImageView -import h_mal.appttude.com.driver.R - - -class ImageSwiperClass( - private val context: Context?, - wholeView: View -) : ContextWrapper(context) { - private var left: ImageView = wholeView.findViewById(R.id.left) - private var right: ImageView = wholeView.findViewById(R.id.right) - - var list: List? = null - -// fun addLocalString(uris: List) { -// list = uris -// } -// -// fun addFirebaseStrings(uris: List) { -// list = uris -// } -// -// private var adapter: SlidingImageViewAdapter? = null -// lateinit var viewPager: ViewPager -// -// -// fun reinstantiateList(imageStrings: MutableList?) { -// this.imageStrings = imageStrings -// adapter = SlidingImageViewAdapter() -// viewPager.adapter = adapter -// setArrows() -// } -// -// fun hideDelete() { -// delete.hide() -// } -// -// private val leftClick: View.OnClickListener = View.OnClickListener { -// viewPager.currentItem = viewPager.currentItem - 1 -// setArrows() -// } -// private val rightClick: View.OnClickListener = View.OnClickListener { -// viewPager.currentItem = viewPager.currentItem + 1 -// setArrows() -// } -// -// private fun deleteDialog(position: Int) { -// val builder: AlertDialog.Builder = AlertDialog.Builder(context) -// builder.setMessage("Are you sure you want to delete?") -// .setPositiveButton( -// android.R.string.ok -// ) { _, _ -> -// imageStrings!!.removeAt(position) -// viewPager.adapter = adapter -// // adapter.notifyDataSetChanged(); -// } -// .setNegativeButton(android.R.string.cancel, null) -// .create() -// .show() -// } -// -// private fun setArrows() { -// with(list) { -// when (list) { -// isNullOrEmpty() -> { } -// isNotEmpty() -> { } -// -// } -// } -// -// if (list?.isNotEmpty()) { -// //left arrow -// if (viewPager.currentItem > 0) { -// setAnimation(left, true) -// } else { -// setAnimation(left, false) -// } -// -// //right -// if (viewPager.currentItem == imageStrings!!.size - 1) { -// setAnimation(right, false) -// } else { -// setAnimation(right, true) -// } -// } -// if (imageStrings == null) { -// setAnimation(left, false) -// setAnimation(right, false) -// } -// } -// -// private fun setAnimation(view: ImageView, up: Boolean) { -// val start: Float -// val finish: Float -// if (up) { -// start = 0.2f -// finish = 1.0f -// } else { -// start = 1.0f -// finish = 0.2f -// } -// val animation1 = AlphaAnimation(start, finish) -// animation1.duration = 500 -// animation1.fillAfter = true -// view.alpha = finish -// } -// -// internal inner class SlidingImageViewAdapter : PagerAdapter() { -// -// override fun getCount(): Int = list?.size ?: 0 -// -// override fun destroyItem(container: ViewGroup, position: Int, item: Any) { -// container.removeView(item as View?) -// } -// -// override fun isViewFromObject(view: View, o: Any): Boolean = view == o -// -// override fun instantiateItem(container: ViewGroup, position: Int): Any { -// val pagerPic: View = -// LayoutInflater.from(context).inflate(R.layout.insurance_item, container, false) -// setArrows() -// if (imageStrings != null && imageStrings!!.size > 0) { -// mainImage = pagerPic.rootView.findViewById(R.id.main_image) -// Picasso.get().load(imageStrings!!.get(position)) -// .placeholder(R.drawable.choice_img) -// .into(MainActivity.loadImage(mainImage)) -// } -// container.addView(pagerPic, 0) -// return pagerPic -// } -// } -// -// -// init { -// left.setOnClickListener(leftClick) -// right.setOnClickListener(rightClick) -// viewPager = wholeView.findViewById(R.id.view_pager) -// delete = wholeView.findViewById(R.id.delete) -// viewPager.addOnPageChangeListener(object : OnPageChangeListener { -// override fun onPageScrolled(i: Int, v: Float, i1: Int) { -// val animation1: AlphaAnimation = AlphaAnimation(0.2f, 1.0f) -// animation1.duration = 200 -// animation1.fillAfter = true -// delete.startAnimation(animation1) -// } -// -// override fun onPageSelected(i: Int) { -// setArrows() -// delete.setOnClickListener { deleteDialog(i) } -// } -// -// override fun onPageScrollStateChanged(i: Int) {} -// }) -// } -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.kt deleted file mode 100644 index cd33774..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/ImageViewClass.kt +++ /dev/null @@ -1,97 +0,0 @@ -package h_mal.appttude.com.driver.Global - -import android.content.Intent -import android.graphics.Bitmap -import android.net.Uri -import android.os.Bundle -import android.os.Environment -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.WindowManager -import androidx.appcompat.app.AppCompatActivity -import androidx.fragment.app.Fragment -import com.github.chrisbanes.photoview.PhotoView -import com.google.android.material.floatingactionbutton.FloatingActionButton -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.utils.DateUtils -import java.io.File -import java.io.FileNotFoundException -import java.io.FileOutputStream -import java.io.IOException - - -class ImageViewClass { - fun open(bitmap: Bitmap?) { - Companion.bitmap = bitmap -// executeFragment(ImageViewerFragment()) - } - - class ImageViewerFragment : Fragment() { - private lateinit var viewer: View - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - } - - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? { - // Inflate the layout for this fragment - viewer = inflater.inflate(R.layout.fragment_image_viewer, container, false) - val fab: FloatingActionButton = viewer.findViewById(R.id.download_pic) - if (bitmap != null) { - val photoView: PhotoView = viewer.findViewById(R.id.photo_view) - photoView.setImageBitmap(bitmap) - fab.setOnClickListener(object : View.OnClickListener { - override fun onClick(v: View) { - try { - downloadPic() - } catch (e: FileNotFoundException) { - e.printStackTrace() - } - } - }) - } - return viewer - } - - override fun onResume() { - super.onResume() - (activity as AppCompatActivity?)!!.supportActionBar!!.hide() - requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) - } - - override fun onStop() { - super.onStop() - (activity as AppCompatActivity?)!!.supportActionBar!!.show() - requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) - } - - @Throws(FileNotFoundException::class) - private fun downloadPic() { - val f: File = - Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) - val fname: String = "driver" + DateUtils.getDateTimeStamp() + ".jpg" - val image: File = File(f, fname) - val fileOutputStream: FileOutputStream = FileOutputStream(image) - bitmap!!.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream) - try { - fileOutputStream.flush() - fileOutputStream.close() - val mediaScanIntent: Intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE) - val contentUri: Uri = Uri.fromFile(image) - mediaScanIntent.data = contentUri - requireActivity().sendBroadcast(mediaScanIntent) - } catch (e: IOException) { - e.printStackTrace() - } - } - } - - companion object { - val IMAGE_VALUE: String = "image" - private var bitmap: Bitmap? = null - } -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.kt b/app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.kt deleted file mode 100644 index 611a00b..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Global/SetApprovalDialog.kt +++ /dev/null @@ -1,115 +0,0 @@ -package h_mal.appttude.com.driver.Global - -import android.app.Activity -import android.app.AlertDialog -import android.content.DialogInterface -import android.widget.ImageView - - -class SetApprovalDialog constructor( - var statusCode: Int, - private val activity: Activity, - private val userId: String?, - position: Int, - private val imageView: ImageView -) { - private val groupNames: Array = arrayOf("Pending", "Denied", "Approved") - private val approvalNameString: String - fun init() { - val checkedItem: Int - when (statusCode) { - FirebaseClass.APPROVAL_PENDING -> checkedItem = 0 - FirebaseClass.APPROVAL_DENIED -> checkedItem = 1 - FirebaseClass.APPROVED -> checkedItem = 2 - else -> checkedItem = -1 - } - val alertBuilder: AlertDialog.Builder = AlertDialog.Builder( - activity - ) - alertBuilder.setSingleChoiceItems(groupNames, checkedItem, singleChoiceListener) - // .setPositiveButton(android.R.string.ok, submit); - alertBuilder.create().ownerActivity - alertBuilder.show() - } - - var singleChoiceListener: DialogInterface.OnClickListener = - object : DialogInterface.OnClickListener { - override fun onClick(dialog: DialogInterface, which: Int) { - when (which) { - 0 -> { - statusCode = FirebaseClass.APPROVAL_PENDING - publishStatuscode(statusCode, dialog) - return - } - 1 -> { - statusCode = FirebaseClass.APPROVAL_DENIED - publishStatuscode(statusCode, dialog) - return - } - 2 -> { - statusCode = FirebaseClass.APPROVED - publishStatuscode(statusCode, dialog) - return - } - } - } - } - - private fun publishStatuscode(status: Int, dialog: DialogInterface) { - -// if (!(approvalNameString == "")) { -// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child( -// (userId)!! -// ).child(FirebaseClass.USER_APPROVALS).child(approvalNameString) -// .setValue(status).addOnCompleteListener { task -> -// if (task.isSuccessful) { -// Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT) -// .show() -// imageView.setImageResource( -// MainActivity.approvalsClass!!.setImageResource( -// status -// ) -// ) -// dialog.dismiss() -// } else { -// Toast.makeText( -// activity, -// "Status change unsuccessful", -// Toast.LENGTH_SHORT -// ).show() -// } -// -// } -// } else { -// Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show() -// } - } - - private fun getElement(i: Int): String { - var element: String = "" - when (i) { - 0 -> element = - FirebaseClass.DRIVER_DETAILS_FIREBASE + FirebaseClass.APPROVAL_CONSTANT - 1 -> element = - FirebaseClass.DRIVERS_LICENSE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT - 2 -> element = - FirebaseClass.PRIVATE_HIRE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT - 3 -> element = - FirebaseClass.VEHICLE_DETAILS_FIREBASE + FirebaseClass.APPROVAL_CONSTANT - 4 -> element = - FirebaseClass.INSURANCE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT - 5 -> element = - FirebaseClass.MOT_FIREBASE + FirebaseClass.APPROVAL_CONSTANT - 6 -> element = - FirebaseClass.LOG_BOOK_FIREBASE + FirebaseClass.APPROVAL_CONSTANT - 7 -> element = - FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE + FirebaseClass.APPROVAL_CONSTANT - } - return element - } - - init { - approvalNameString = getElement(position) - init() - } -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.kt b/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.kt deleted file mode 100644 index c0a9e53..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/LogbookObject.kt +++ /dev/null @@ -1,15 +0,0 @@ -package h_mal.appttude.com.driver.Objects - - - -class LogbookObject { - var photoString: String? = null - var v5cnumber: String? = null - - constructor(photoString: String?, v5cnumber: String?) { - this.photoString = photoString - this.v5cnumber = v5cnumber - } - - constructor() -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/data/Roles.kt b/app/src/main/java/h_mal/appttude/com/driver/data/Roles.kt deleted file mode 100644 index 2f319d8..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/data/Roles.kt +++ /dev/null @@ -1,6 +0,0 @@ -package h_mal.appttude.com.driver.data - -enum class Roles(name: String) { - Driver("driver"), - SuperUser("super_user") -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/HomeFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/HomeFragment.kt deleted file mode 100644 index 57b22f7..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/HomeFragment.kt +++ /dev/null @@ -1,31 +0,0 @@ -package h_mal.appttude.com.driver.ui.driver - -import android.os.Bundle -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import androidx.fragment.app.Fragment -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.utils.navigateTo - -import kotlinx.android.synthetic.main.fragment_home_driver.* - - -class HomeFragment : Fragment() { - - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, - savedInstanceState: Bundle? - ): View? = inflater.inflate(R.layout.fragment_home_driver, container, false) - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - driver.setOnClickListener { - view.navigateTo(R.id.to_driverOverallFragment) - } - car.setOnClickListener { - view.navigateTo(R.id.to_vehicleOverallFragment) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/DriverLicenseFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/DriverLicenseFragment.kt deleted file mode 100644 index 8e16981..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/driver/driverprofile/DriverLicenseFragment.kt +++ /dev/null @@ -1,57 +0,0 @@ -package h_mal.appttude.com.driver.ui.driver.driverprofile - -import android.net.Uri -import android.os.Bundle -import android.view.View -import h_mal.appttude.com.driver.Global.DateDialog -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment -import h_mal.appttude.com.driver.model.DriversLicenseObject -import h_mal.appttude.com.driver.utils.setPicassoImage -import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel -import kotlinx.android.synthetic.main.fragment_driver_license.* - -class DriverLicenseFragment : DataSubmissionBaseFragment() { - - private val viewmodel: DriverLicenseViewModel by getFragmentViewModel() - override fun getViewModel(): DriverLicenseViewModel = viewmodel - override fun getLayoutId(): Int = R.layout.fragment_driver_license - override var model = DriversLicenseObject() - - private var imageUri: Uri? = null - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - lic_expiry.apply { - setTextOnChange{ model.licenseExpiry = it } - setOnClickListener { - DateDialog(this) - } - } - lic_no.setTextOnChange{ model.licenseNumber = it } - - upload_lic.setOnClickListener { openGalleryWithPermissionRequest() } - submit.setOnClickListener{ submit() } - } - - override fun submit(){ - validateEditTexts(lic_expiry,lic_no).takeIf { !it }?.let { return } - - viewmodel.setDataInDatabase(model, imageUri) - } - - override fun setFields(data: DriversLicenseObject) { - super.setFields(data) - driversli_img.setPicassoImage(data.licenseImageString) - lic_no.setText(data.licenseNumber) - lic_expiry.setText(data.licenseExpiry) - } - - override fun onImageGalleryResult(imageUri: Uri?) { - super.onImageGalleryResult(imageUri) - this.imageUri = imageUri - driversli_img.setPicassoImage(imageUri) - } - -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateActivity.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateActivity.kt deleted file mode 100644 index 588eb19..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateActivity.kt +++ /dev/null @@ -1,17 +0,0 @@ -package h_mal.appttude.com.driver.update - -import android.os.Bundle -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseActivity -import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel - -class UpdateActivity : BaseActivity() { - - override val layoutId: Int = R.layout.update_activity - override fun getViewModel(): UpdateUserViewModel? = null - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - createViewModel() - } -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/user/SplashScreenFragment.kt b/app/src/main/java/h_mal/appttude/com/driver/ui/user/SplashScreenFragment.kt deleted file mode 100644 index 12147cd..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/user/SplashScreenFragment.kt +++ /dev/null @@ -1,35 +0,0 @@ -package h_mal.appttude.com.driver.ui.user - -import android.os.Bundle -import android.view.View -import androidx.fragment.app.activityViewModels -import com.google.firebase.auth.FirebaseUser -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseFragment -import h_mal.appttude.com.driver.data.FirebaseCompletion -import h_mal.appttude.com.driver.utils.Coroutines.main -import h_mal.appttude.com.driver.utils.navigateTo -import h_mal.appttude.com.driver.viewmodels.UserViewModel -import kotlinx.coroutines.delay - - -class SplashScreenFragment : BaseFragment() { - - private val userViewModel by activityViewModels() - override fun getViewModel(): UserViewModel = userViewModel - override fun getLayoutId(): Int = R.layout.fragment_splash_screen - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - userViewModel.splashscreenCheckUserIsLoggedIn() - } - - override fun onSuccess(data: Any?) { - super.onSuccess(data) - when(data){ - is FirebaseCompletion.Default -> view?.navigateTo(R.id.to_loginFragment) - } - } - -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/ViewUtils.kt b/app/src/main/java/h_mal/appttude/com/driver/utils/ViewUtils.kt deleted file mode 100644 index 87c1852..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/utils/ViewUtils.kt +++ /dev/null @@ -1,104 +0,0 @@ -package h_mal.appttude.com.driver.utils - -import android.app.Activity -import android.content.Context -import android.content.res.Resources -import android.net.Uri -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.inputmethod.EditorInfo -import android.view.inputmethod.InputMethodManager -import android.widget.EditText -import android.widget.ImageView -import android.widget.TextView -import android.widget.Toast -import androidx.annotation.DrawableRes -import androidx.appcompat.widget.SearchView -import androidx.fragment.app.Fragment -import com.squareup.picasso.Picasso -import h_mal.appttude.com.driver.R - -fun View.show() { - this.visibility = View.VISIBLE -} - -fun View.hide() { - this.visibility = View.GONE -} - -fun Context.displayToast(message: String) { - Toast.makeText(this, message, Toast.LENGTH_LONG).show() -} - -fun Fragment.displayToast(message: String) { - requireContext().displayToast(message) -} - -fun EditText.setEnterPressedListener(action: () -> Unit) { - setOnEditorActionListener(TextView.OnEditorActionListener { _, id, _ -> - if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) { - action() - return@OnEditorActionListener true - } - false - }) -} - -fun ImageView.setPicassoImage( - url: String?, - @DrawableRes placeholderRes: Int = R.drawable.choice_img_round -) { - - val creator = Picasso.get() - .load(url) - viewTreeObserver.addOnPreDrawListener { - creator.resize(width, height) - true - } - creator - .placeholder(placeholderRes) - .into(this) -} - -fun ImageView.setPicassoImage( - url: Uri?, - @DrawableRes placeholderRes: Int = R.drawable.choice_img_round -) { - val creator = Picasso.get() - .load(url) - viewTreeObserver.addOnPreDrawListener { - creator.resize(width, height) - true - } - creator - .placeholder(placeholderRes) - .into(this) -} - -fun ViewGroup.generateView(layoutId: Int): View = LayoutInflater - .from(context) - .inflate(layoutId, this, false) - -fun Int.dpToPx(): Int = (this * Resources.getSystem().displayMetrics.density).toInt() - -fun SearchView.onSubmitListener(searchSubmit: (String) -> Unit) { - this.setOnQueryTextListener(object : - SearchView.OnQueryTextListener { - override fun onQueryTextSubmit(s: String): Boolean { - searchSubmit.invoke(s) - return true - } - - override fun onQueryTextChange(s: String): Boolean { - return true - } - }) -} - -fun Fragment.hideKeyboard() { - val imm = context?.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager? - imm?.hideSoftInputFromWindow(view?.windowToken, 0) -} - -fun EditText.extractString(): String = text.toString().trim() \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/UpdateUserViewModel.kt b/app/src/main/java/h_mal/appttude/com/driver/viewmodels/UpdateUserViewModel.kt deleted file mode 100644 index bf77f3d..0000000 --- a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/UpdateUserViewModel.kt +++ /dev/null @@ -1,75 +0,0 @@ -package h_mal.appttude.com.driver.viewmodels - -import android.net.Uri -import h_mal.appttude.com.driver.base.BaseViewModel -import h_mal.appttude.com.driver.data.FirebaseAuthentication -import h_mal.appttude.com.driver.data.FirebaseCompletion -import h_mal.appttude.com.driver.data.FirebaseStorageSource -import h_mal.appttude.com.driver.utils.Coroutines.io -import kotlinx.coroutines.tasks.await -import java.io.IOException - -class UpdateUserViewModel( - private val auth: FirebaseAuthentication, - private val storage: FirebaseStorageSource -) : BaseViewModel() { - - fun updateEmail(oldEmail: String, password: String, newEmail: String) = io { - doTryOperation("Failed to update email"){ - auth.reauthenticate(oldEmail, password)?.await() - val complete = auth.updateEmail(newEmail)?.await() - complete?.postResult("Email address") - } - } - - fun updatePassword(oldEmail: String, password: String, newPassword: String) = io { - doTryOperation("Failed to update password"){ - auth.reauthenticate(oldEmail, password)?.await() - val complete = auth.updatePassword(newPassword)?.await() - complete?.postResult("Password") - } - } - - fun updateProfile(name: String?, localImageUri: Uri?) = io { - if (name.isNullOrBlank() && localImageUri == null) return@io - doTryOperation("Failed to update User"){ - - val profilePicUrl = localImageUri?.let { - val storageRef = storage.profileImageStorageRef(auth.getUid()!!) - storage.uploadImage(it, storageRef, "profile_pic") - } - - val complete = auth.updateProfile(name, profilePicUrl)?.await() - complete.postResult("Profile updated") - } - } - - fun deleteProfile(oldEmail: String, password: String) = io { - doTryOperation("Failed to delete profile"){ - auth.reauthenticate(oldEmail, password)?.await() - val complete = auth.deleteProfile()?.await() - complete?.let { - onSuccess(FirebaseCompletion.ProfileDeleted("Profile deleted")) - return@doTryOperation - } - throw IOException("Failed to complete") - - } - } - - - fun getUser(): Boolean { - return auth.getUser()?.let { - onSuccess(it) - true - } ?: false - } - - private fun Void?.postResult(section: String){ - this?.let { - onSuccess(FirebaseCompletion.Changed("$section has been updated")) - return - } - throw IOException("Failed to complete") - } -} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/espresso/IdlingResourceClass.kt b/app/src/main/java/h_mal/appttude/com/espresso/IdlingResourceClass.kt new file mode 100644 index 0000000..87134fb --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/espresso/IdlingResourceClass.kt @@ -0,0 +1,24 @@ +package h_mal.appttude.com.espresso + +import androidx.test.espresso.idling.CountingIdlingResource + +object IdlingResourceClass { + private val CLASS_NAME = "IdlingResourceClass" + + private const val RESOURCE = "GLOBAL" + + @JvmField val countingIdlingResource = CountingIdlingResource(RESOURCE) + + fun increment() { + if (!countingIdlingResource.isIdleNow) { + countingIdlingResource.increment() + } + } + + fun decrement() { + if (!countingIdlingResource.isIdleNow) { + countingIdlingResource.decrement() + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/model/DriverProfileObject.kt b/app/src/main/java/h_mal/appttude/com/model/DriverProfileObject.kt similarity index 86% rename from app/src/main/java/h_mal/appttude/com/driver/model/DriverProfileObject.kt rename to app/src/main/java/h_mal/appttude/com/model/DriverProfileObject.kt index 46cecff..b1d70a4 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/model/DriverProfileObject.kt +++ b/app/src/main/java/h_mal/appttude/com/model/DriverProfileObject.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.model +package h_mal.appttude.com.model diff --git a/app/src/main/java/h_mal/appttude/com/driver/model/DriversLicenseObject.kt b/app/src/main/java/h_mal/appttude/com/model/DriversLicenseObject.kt similarity index 79% rename from app/src/main/java/h_mal/appttude/com/driver/model/DriversLicenseObject.kt rename to app/src/main/java/h_mal/appttude/com/model/DriversLicenseObject.kt index 9b6a7e5..d1cb240 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/model/DriversLicenseObject.kt +++ b/app/src/main/java/h_mal/appttude/com/model/DriversLicenseObject.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.model +package h_mal.appttude.com.model data class DriversLicenseObject( diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.kt b/app/src/main/java/h_mal/appttude/com/model/InsuranceObject.kt similarity index 78% rename from app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.kt rename to app/src/main/java/h_mal/appttude/com/model/InsuranceObject.kt index a62dfac..be7d563 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/InsuranceObject.kt +++ b/app/src/main/java/h_mal/appttude/com/model/InsuranceObject.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.Objects +package h_mal.appttude.com.model diff --git a/app/src/main/java/h_mal/appttude/com/model/LogbookObject.kt b/app/src/main/java/h_mal/appttude/com/model/LogbookObject.kt new file mode 100644 index 0000000..3559d66 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/model/LogbookObject.kt @@ -0,0 +1,8 @@ +package h_mal.appttude.com.model + + + +data class LogbookObject( + var photoString: String? = null, + var v5cnumber: String? = null +) diff --git a/app/src/main/java/h_mal/appttude/com/driver/model/MotObject.kt b/app/src/main/java/h_mal/appttude/com/model/MotObject.kt similarity index 70% rename from app/src/main/java/h_mal/appttude/com/driver/model/MotObject.kt rename to app/src/main/java/h_mal/appttude/com/model/MotObject.kt index 0cfd606..e0b42ee 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/model/MotObject.kt +++ b/app/src/main/java/h_mal/appttude/com/model/MotObject.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.model +package h_mal.appttude.com.model diff --git a/app/src/main/java/h_mal/appttude/com/driver/model/PrivateHireObject.kt b/app/src/main/java/h_mal/appttude/com/model/PrivateHireObject.kt similarity index 77% rename from app/src/main/java/h_mal/appttude/com/driver/model/PrivateHireObject.kt rename to app/src/main/java/h_mal/appttude/com/model/PrivateHireObject.kt index 66e707c..ea27ec6 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/model/PrivateHireObject.kt +++ b/app/src/main/java/h_mal/appttude/com/model/PrivateHireObject.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.model +package h_mal.appttude.com.model diff --git a/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.kt b/app/src/main/java/h_mal/appttude/com/model/PrivateHireVehicleObject.kt similarity index 77% rename from app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.kt rename to app/src/main/java/h_mal/appttude/com/model/PrivateHireVehicleObject.kt index c3a754a..f6defbc 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/Objects/PrivateHireVehicleObject.kt +++ b/app/src/main/java/h_mal/appttude/com/model/PrivateHireVehicleObject.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.Objects +package h_mal.appttude.com.model diff --git a/app/src/main/java/h_mal/appttude/com/driver/model/VehicleProfileObject.kt b/app/src/main/java/h_mal/appttude/com/model/VehicleProfileObject.kt similarity index 89% rename from app/src/main/java/h_mal/appttude/com/driver/model/VehicleProfileObject.kt rename to app/src/main/java/h_mal/appttude/com/model/VehicleProfileObject.kt index d82fd7d..fddf3a8 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/model/VehicleProfileObject.kt +++ b/app/src/main/java/h_mal/appttude/com/model/VehicleProfileObject.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.model +package h_mal.appttude.com.model diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/update/DeleteProfileFragment.kt b/app/src/main/java/h_mal/appttude/com/ui/update/DeleteProfileFragment.kt similarity index 63% rename from app/src/main/java/h_mal/appttude/com/driver/ui/update/DeleteProfileFragment.kt rename to app/src/main/java/h_mal/appttude/com/ui/update/DeleteProfileFragment.kt index 87fddb7..35e1a63 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/update/DeleteProfileFragment.kt +++ b/app/src/main/java/h_mal/appttude/com/ui/update/DeleteProfileFragment.kt @@ -1,21 +1,20 @@ -package h_mal.appttude.com.driver.update +package h_mal.appttude.com.ui.update import android.os.Bundle import android.view.View import androidx.fragment.app.activityViewModels -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseFragment -import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText -import h_mal.appttude.com.driver.utils.setEnterPressedListener -import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel -import kotlinx.android.synthetic.main.fragment_update_email.* +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseFragment +import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText +import h_mal.appttude.com.utils.setEnterPressedListener +import h_mal.appttude.com.viewmodels.UpdateUserViewModel +import kotlinx.android.synthetic.main.fragment_delete_profile.* -class DeleteProfileFragment : BaseFragment() { +class DeleteProfileFragment : BaseFragment(R.layout.fragment_delete_profile) { private val viewmodel: UpdateUserViewModel by activityViewModels() override fun getViewModel(): UpdateUserViewModel = viewmodel - override fun getLayoutId(): Int = R.layout.fragment_delete_profile override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/h_mal/appttude/com/ui/update/UpdateActivity.kt b/app/src/main/java/h_mal/appttude/com/ui/update/UpdateActivity.kt new file mode 100644 index 0000000..56d820d --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/ui/update/UpdateActivity.kt @@ -0,0 +1,26 @@ +package h_mal.appttude.com.ui.update + +import android.os.Bundle +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseActivity +import h_mal.appttude.com.data.FirebaseCompletion +import h_mal.appttude.com.utils.displayToast +import h_mal.appttude.com.viewmodels.UpdateUserViewModel + +class UpdateActivity : BaseActivity() { + + override val layoutId: Int = R.layout.update_activity + override fun getViewModel(): UpdateUserViewModel? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + createViewModel() + } + + override fun onSuccess(data: Any?) { + super.onSuccess(data) + when(data){ + is FirebaseCompletion.Changed -> displayToast(data.message) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateEmailFragment.kt b/app/src/main/java/h_mal/appttude/com/ui/update/UpdateEmailFragment.kt similarity index 61% rename from app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateEmailFragment.kt rename to app/src/main/java/h_mal/appttude/com/ui/update/UpdateEmailFragment.kt index 4f04946..3adcc71 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateEmailFragment.kt +++ b/app/src/main/java/h_mal/appttude/com/ui/update/UpdateEmailFragment.kt @@ -1,22 +1,21 @@ -package h_mal.appttude.com.driver.update +package h_mal.appttude.com.ui.update import android.os.Bundle import android.view.View import androidx.fragment.app.activityViewModels -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseFragment -import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText -import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText -import h_mal.appttude.com.driver.utils.setEnterPressedListener -import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseFragment +import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText +import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText +import h_mal.appttude.com.utils.setEnterPressedListener +import h_mal.appttude.com.viewmodels.UpdateUserViewModel import kotlinx.android.synthetic.main.fragment_update_email.* -class UpdateEmailFragment : BaseFragment() { +class UpdateEmailFragment : BaseFragment(R.layout.fragment_update_email) { private val viewmodel: UpdateUserViewModel by activityViewModels() override fun getViewModel(): UpdateUserViewModel = viewmodel - override fun getLayoutId(): Int = R.layout.fragment_update_email override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateOverviewFragment.kt b/app/src/main/java/h_mal/appttude/com/ui/update/UpdateOverviewFragment.kt similarity index 76% rename from app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateOverviewFragment.kt rename to app/src/main/java/h_mal/appttude/com/ui/update/UpdateOverviewFragment.kt index bc23a51..fe79287 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateOverviewFragment.kt +++ b/app/src/main/java/h_mal/appttude/com/ui/update/UpdateOverviewFragment.kt @@ -1,19 +1,18 @@ -package h_mal.appttude.com.driver.update +package h_mal.appttude.com.ui.update import android.os.Bundle import android.view.View import androidx.fragment.app.activityViewModels -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseFragment -import h_mal.appttude.com.driver.utils.navigateTo -import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseFragment +import h_mal.appttude.com.utils.navigateTo +import h_mal.appttude.com.viewmodels.UpdateUserViewModel import kotlinx.android.synthetic.main.update_overview_fragment.* -class UpdateOverviewFragment : BaseFragment(), View.OnClickListener { +class UpdateOverviewFragment : BaseFragment(R.layout.update_overview_fragment), View.OnClickListener { private val vm by activityViewModels() override fun getViewModel(): UpdateUserViewModel = vm - override fun getLayoutId(): Int = R.layout.update_overview_fragment override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -21,6 +20,7 @@ class UpdateOverviewFragment : BaseFragment(), View.OnClick update_email_button.setOnClickListener(this) update_password_button.setOnClickListener(this) update_profile_button.setOnClickListener(this) + delete_profile.setOnClickListener(this) } private fun View.submit(){ diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdatePasswordFragment.kt b/app/src/main/java/h_mal/appttude/com/ui/update/UpdatePasswordFragment.kt similarity index 59% rename from app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdatePasswordFragment.kt rename to app/src/main/java/h_mal/appttude/com/ui/update/UpdatePasswordFragment.kt index 125e628..6abedb8 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdatePasswordFragment.kt +++ b/app/src/main/java/h_mal/appttude/com/ui/update/UpdatePasswordFragment.kt @@ -1,23 +1,22 @@ -package h_mal.appttude.com.driver.update +package h_mal.appttude.com.ui.update import android.os.Bundle import android.view.View import androidx.fragment.app.activityViewModels -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseFragment -import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText -import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText -import h_mal.appttude.com.driver.utils.setEnterPressedListener -import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseFragment +import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText +import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText +import h_mal.appttude.com.utils.setEnterPressedListener +import h_mal.appttude.com.viewmodels.UpdateUserViewModel import kotlinx.android.synthetic.main.fragment_update_password.* -class UpdatePasswordFragment : BaseFragment() { +class UpdatePasswordFragment : + BaseFragment(R.layout.fragment_update_password) { private val viewmodel: UpdateUserViewModel by activityViewModels() override fun getViewModel(): UpdateUserViewModel = viewmodel - override fun getLayoutId(): Int = R.layout.fragment_update_password - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) @@ -26,7 +25,7 @@ class UpdatePasswordFragment : BaseFragment() { email_sign_up.setOnClickListener { registerUser() } } - private fun registerUser(){ + private fun registerUser() { val emailString = email_update.validatePasswordEditText() ?: return val passwordText = password_top.validatePasswordEditText() ?: return val newPassword = password_bottom.validateEmailEditText() ?: return diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateProfileFragment.kt b/app/src/main/java/h_mal/appttude/com/ui/update/UpdateProfileFragment.kt similarity index 81% rename from app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateProfileFragment.kt rename to app/src/main/java/h_mal/appttude/com/ui/update/UpdateProfileFragment.kt index 0633bc7..6d01701 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/update/UpdateProfileFragment.kt +++ b/app/src/main/java/h_mal/appttude/com/ui/update/UpdateProfileFragment.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.update +package h_mal.appttude.com.ui.update import android.Manifest.permission.READ_EXTERNAL_STORAGE import android.net.Uri @@ -7,21 +7,22 @@ import android.view.View import androidx.core.widget.doAfterTextChanged import androidx.fragment.app.activityViewModels import com.google.firebase.auth.FirebaseUser -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseFragment -import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions -import h_mal.appttude.com.driver.utils.setEnterPressedListener -import h_mal.appttude.com.driver.utils.setPicassoImage -import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseFragment +import h_mal.appttude.com.utils.PermissionsUtils.askForPermissions +import h_mal.appttude.com.utils.setEnterPressedListener +import h_mal.appttude.com.utils.setGlideImage + +import h_mal.appttude.com.viewmodels.UpdateUserViewModel import kotlinx.android.synthetic.main.fragment_update_profile.* const val TAG_CONST = "non-user" private const val IMAGE_PERMISSION_RESULT = 402 -class UpdateProfileFragment : BaseFragment() { + +class UpdateProfileFragment : BaseFragment(R.layout.fragment_update_profile) { private val viewmodel: UpdateUserViewModel by activityViewModels() override fun getViewModel(): UpdateUserViewModel = viewmodel - override fun getLayoutId(): Int = R.layout.fragment_update_profile private var imageChangeListener: Boolean = false private var nameChangeListener: Boolean = false @@ -75,7 +76,7 @@ class UpdateProfileFragment : BaseFragment() { } private fun setFields(firebaseUser: FirebaseUser) { - profile_img.setPicassoImage(firebaseUser.photoUrl) + profile_img.setGlideImage(firebaseUser.photoUrl) update_name.apply { setText(firebaseUser.displayName) tag = TAG_CONST @@ -85,7 +86,7 @@ class UpdateProfileFragment : BaseFragment() { override fun onImageGalleryResult(imageUri: Uri?) { super.onImageGalleryResult(imageUri) this.imageUri = imageUri - profile_img.setPicassoImage(imageUri) + profile_img.setGlideImage(imageUri) imageChangeListener = true } diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/user/ForgotPasswordFragment.kt b/app/src/main/java/h_mal/appttude/com/ui/user/ForgotPasswordFragment.kt similarity index 61% rename from app/src/main/java/h_mal/appttude/com/driver/ui/user/ForgotPasswordFragment.kt rename to app/src/main/java/h_mal/appttude/com/ui/user/ForgotPasswordFragment.kt index 7f8015e..4b74413 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/user/ForgotPasswordFragment.kt +++ b/app/src/main/java/h_mal/appttude/com/ui/user/ForgotPasswordFragment.kt @@ -1,21 +1,19 @@ -package h_mal.appttude.com.driver.user +package h_mal.appttude.com.ui.user import android.os.Bundle import android.view.View import androidx.fragment.app.activityViewModels -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseFragment -import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText -import h_mal.appttude.com.driver.viewmodels.UserViewModel +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseFragment +import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText +import h_mal.appttude.com.viewmodels.UserViewModel import kotlinx.android.synthetic.main.fragment_forgot_password.* -class ForgotPasswordFragment : BaseFragment() { +class ForgotPasswordFragment : BaseFragment(R.layout.fragment_forgot_password) { private val userViewModel: UserViewModel by activityViewModels() - override fun getViewModel(): UserViewModel = userViewModel - override fun getLayoutId(): Int = R.layout.fragment_forgot_password override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/user/LoginActivity.kt b/app/src/main/java/h_mal/appttude/com/ui/user/LoginActivity.kt similarity index 78% rename from app/src/main/java/h_mal/appttude/com/driver/ui/user/LoginActivity.kt rename to app/src/main/java/h_mal/appttude/com/ui/user/LoginActivity.kt index bfcaf95..f05cb08 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/user/LoginActivity.kt +++ b/app/src/main/java/h_mal/appttude/com/ui/user/LoginActivity.kt @@ -1,14 +1,14 @@ -package h_mal.appttude.com.driver.ui.user +package h_mal.appttude.com.ui.user import android.content.Intent import android.os.Bundle import com.google.firebase.auth.AuthResult import com.google.firebase.auth.FirebaseUser -import h_mal.appttude.com.driver.ui.driver.MainActivity -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseActivity -import h_mal.appttude.com.driver.viewmodels.UserViewModel +import h_mal.appttude.com.ui.driver.MainActivity +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseActivity +import h_mal.appttude.com.viewmodels.UserViewModel /** diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/user/LoginFragment.kt b/app/src/main/java/h_mal/appttude/com/ui/user/LoginFragment.kt similarity index 64% rename from app/src/main/java/h_mal/appttude/com/driver/ui/user/LoginFragment.kt rename to app/src/main/java/h_mal/appttude/com/ui/user/LoginFragment.kt index 0d0efe4..2c8109d 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/user/LoginFragment.kt +++ b/app/src/main/java/h_mal/appttude/com/ui/user/LoginFragment.kt @@ -1,22 +1,21 @@ -package h_mal.appttude.com.driver.ui.user +package h_mal.appttude.com.ui.user import android.os.Bundle import android.view.View import androidx.fragment.app.activityViewModels -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseFragment -import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText -import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText -import h_mal.appttude.com.driver.utils.navigateTo -import h_mal.appttude.com.driver.utils.setEnterPressedListener -import h_mal.appttude.com.driver.viewmodels.UserViewModel +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseFragment +import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText +import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText +import h_mal.appttude.com.utils.navigateTo +import h_mal.appttude.com.utils.setEnterPressedListener +import h_mal.appttude.com.viewmodels.UserViewModel import kotlinx.android.synthetic.main.fragment_login.* -class LoginFragment : BaseFragment() { +class LoginFragment : BaseFragment(R.layout.fragment_login) { private val userViewModel: UserViewModel by activityViewModels() override fun getViewModel(): UserViewModel = userViewModel - override fun getLayoutId(): Int = R.layout.fragment_login override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) diff --git a/app/src/main/java/h_mal/appttude/com/driver/ui/user/RegisterFragment.kt b/app/src/main/java/h_mal/appttude/com/ui/user/RegisterFragment.kt similarity index 68% rename from app/src/main/java/h_mal/appttude/com/driver/ui/user/RegisterFragment.kt rename to app/src/main/java/h_mal/appttude/com/ui/user/RegisterFragment.kt index fe83477..f890728 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/ui/user/RegisterFragment.kt +++ b/app/src/main/java/h_mal/appttude/com/ui/user/RegisterFragment.kt @@ -1,19 +1,18 @@ -package h_mal.appttude.com.driver.ui.user +package h_mal.appttude.com.ui.user import android.os.Bundle import android.view.View import androidx.fragment.app.activityViewModels -import h_mal.appttude.com.driver.R -import h_mal.appttude.com.driver.base.BaseFragment -import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText -import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText -import h_mal.appttude.com.driver.utils.setEnterPressedListener -import h_mal.appttude.com.driver.viewmodels.UserViewModel +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseFragment +import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText +import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText +import h_mal.appttude.com.utils.setEnterPressedListener +import h_mal.appttude.com.viewmodels.UserViewModel import kotlinx.android.synthetic.main.fragment_register.* -class RegisterFragment : BaseFragment() { +class RegisterFragment : BaseFragment(R.layout.fragment_register) { - override fun getLayoutId(): Int = R.layout.fragment_register override fun getViewModel(): UserViewModel { val userViewModel: UserViewModel by activityViewModels() return userViewModel diff --git a/app/src/main/java/h_mal/appttude/com/ui/user/SplashScreenFragment.kt b/app/src/main/java/h_mal/appttude/com/ui/user/SplashScreenFragment.kt new file mode 100644 index 0000000..0f96cee --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/ui/user/SplashScreenFragment.kt @@ -0,0 +1,29 @@ +package h_mal.appttude.com.ui.user + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.activityViewModels +import h_mal.appttude.com.R +import h_mal.appttude.com.base.BaseFragment +import h_mal.appttude.com.data.FirebaseCompletion +import h_mal.appttude.com.utils.navigateTo +import h_mal.appttude.com.viewmodels.UserViewModel + + +class SplashScreenFragment : BaseFragment(R.layout.fragment_splash_screen) { + + private val userViewModel by activityViewModels() + override fun getViewModel(): UserViewModel = userViewModel + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + userViewModel.splashscreenCheckUserIsLoggedIn() + } + + override fun onSuccess(data: Any?) { + super.onSuccess(data) + if (data is FirebaseCompletion.Default) view?.navigateTo(R.id.to_loginFragment) + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/ActivityIntentBuilder.kt b/app/src/main/java/h_mal/appttude/com/utils/ActivityIntentBuilder.kt similarity index 91% rename from app/src/main/java/h_mal/appttude/com/driver/utils/ActivityIntentBuilder.kt rename to app/src/main/java/h_mal/appttude/com/utils/ActivityIntentBuilder.kt index 0da57af..9e11ff9 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/utils/ActivityIntentBuilder.kt +++ b/app/src/main/java/h_mal/appttude/com/utils/ActivityIntentBuilder.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.utils +package h_mal.appttude.com.utils import android.content.Context import android.content.Intent diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/AnimationUtils.kt b/app/src/main/java/h_mal/appttude/com/utils/AnimationUtils.kt similarity index 93% rename from app/src/main/java/h_mal/appttude/com/driver/utils/AnimationUtils.kt rename to app/src/main/java/h_mal/appttude/com/utils/AnimationUtils.kt index 0968518..513fc1e 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/utils/AnimationUtils.kt +++ b/app/src/main/java/h_mal/appttude/com/utils/AnimationUtils.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.utils +package h_mal.appttude.com.utils import android.view.View import android.view.animation.Animation diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/Coroutines.kt b/app/src/main/java/h_mal/appttude/com/utils/Coroutines.kt similarity index 90% rename from app/src/main/java/h_mal/appttude/com/driver/utils/Coroutines.kt rename to app/src/main/java/h_mal/appttude/com/utils/Coroutines.kt index dfed4d5..834fbcd 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/utils/Coroutines.kt +++ b/app/src/main/java/h_mal/appttude/com/utils/Coroutines.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.utils +package h_mal.appttude.com.utils import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/DateUtils.kt b/app/src/main/java/h_mal/appttude/com/utils/DateUtils.kt similarity index 97% rename from app/src/main/java/h_mal/appttude/com/driver/utils/DateUtils.kt rename to app/src/main/java/h_mal/appttude/com/utils/DateUtils.kt index 89cd3f4..f0b01d1 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/utils/DateUtils.kt +++ b/app/src/main/java/h_mal/appttude/com/utils/DateUtils.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.utils +package h_mal.appttude.com.utils import android.icu.util.Calendar import java.text.ParseException diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/FirebaseUtils.kt b/app/src/main/java/h_mal/appttude/com/utils/FirebaseUtils.kt similarity index 92% rename from app/src/main/java/h_mal/appttude/com/driver/utils/FirebaseUtils.kt rename to app/src/main/java/h_mal/appttude/com/utils/FirebaseUtils.kt index 35fd6f9..8ac5ac8 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/utils/FirebaseUtils.kt +++ b/app/src/main/java/h_mal/appttude/com/utils/FirebaseUtils.kt @@ -1,10 +1,10 @@ -package h_mal.appttude.com.driver.utils +package h_mal.appttude.com.utils 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.data.EventResponse +import h_mal.appttude.com.data.EventResponse import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/LiveDataUtils.kt b/app/src/main/java/h_mal/appttude/com/utils/LiveDataUtils.kt similarity index 92% rename from app/src/main/java/h_mal/appttude/com/driver/utils/LiveDataUtils.kt rename to app/src/main/java/h_mal/appttude/com/utils/LiveDataUtils.kt index eeb7640..6e4d25d 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/utils/LiveDataUtils.kt +++ b/app/src/main/java/h_mal/appttude/com/utils/LiveDataUtils.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.utils +package h_mal.appttude.com.utils open class Event(private val content: T) { diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/NavigationUtils.kt b/app/src/main/java/h_mal/appttude/com/utils/NavigationUtils.kt similarity index 94% rename from app/src/main/java/h_mal/appttude/com/driver/utils/NavigationUtils.kt rename to app/src/main/java/h_mal/appttude/com/utils/NavigationUtils.kt index 75b4bff..da3df41 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/utils/NavigationUtils.kt +++ b/app/src/main/java/h_mal/appttude/com/utils/NavigationUtils.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.utils +package h_mal.appttude.com.utils import android.content.Context import android.content.Intent diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/Navigations.kt b/app/src/main/java/h_mal/appttude/com/utils/Navigations.kt similarity index 63% rename from app/src/main/java/h_mal/appttude/com/driver/utils/Navigations.kt rename to app/src/main/java/h_mal/appttude/com/utils/Navigations.kt index 6f1335f..000b29d 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/utils/Navigations.kt +++ b/app/src/main/java/h_mal/appttude/com/utils/Navigations.kt @@ -1,4 +1,4 @@ -package h_mal.appttude.com.driver.utils +package h_mal.appttude.com.utils enum class Navigations(val value: String) { Main("MainActivity"); diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/PermissionsUtils.kt b/app/src/main/java/h_mal/appttude/com/utils/PermissionsUtils.kt similarity index 92% rename from app/src/main/java/h_mal/appttude/com/driver/utils/PermissionsUtils.kt rename to app/src/main/java/h_mal/appttude/com/utils/PermissionsUtils.kt index 136b8bf..851976c 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/utils/PermissionsUtils.kt +++ b/app/src/main/java/h_mal/appttude/com/utils/PermissionsUtils.kt @@ -1,9 +1,10 @@ -package h_mal.appttude.com.driver.utils +package h_mal.appttude.com.utils import android.app.Activity import android.content.Context import android.content.Intent import android.content.pm.PackageManager +import android.content.pm.PackageManager.* import android.net.Uri import android.provider.Settings import androidx.appcompat.app.AlertDialog @@ -23,7 +24,7 @@ object PermissionsUtils { fun Context.isPermissionsAllowed(permission: String): Boolean { return ContextCompat.checkSelfPermission( this, permission - ) == PackageManager.PERMISSION_GRANTED + ) == PERMISSION_GRANTED } @@ -43,8 +44,7 @@ object PermissionsUtils { requireActivity().askForPermissions(permission, requestCode) fun isGranted(grantResults: IntArray): Boolean = - grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED - + grantResults.getOrNull(0)?.equals(PERMISSION_GRANTED) ?: false private fun Context.showPermissionDeniedDialog() { AlertDialog.Builder(this) diff --git a/app/src/main/java/h_mal/appttude/com/driver/utils/TextValidationUtils.kt b/app/src/main/java/h_mal/appttude/com/utils/TextValidationUtils.kt similarity index 96% rename from app/src/main/java/h_mal/appttude/com/driver/utils/TextValidationUtils.kt rename to app/src/main/java/h_mal/appttude/com/utils/TextValidationUtils.kt index db97e0b..b3b38d3 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/utils/TextValidationUtils.kt +++ b/app/src/main/java/h_mal/appttude/com/utils/TextValidationUtils.kt @@ -1,7 +1,7 @@ -package h_mal.appttude.com.driver.utils +package h_mal.appttude.com.utils import android.widget.EditText -import h_mal.appttude.com.driver.R +import h_mal.appttude.com.R object TextValidationUtils { diff --git a/app/src/main/java/h_mal/appttude/com/utils/ViewUtils.kt b/app/src/main/java/h_mal/appttude/com/utils/ViewUtils.kt new file mode 100644 index 0000000..391fd7a --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/utils/ViewUtils.kt @@ -0,0 +1,152 @@ +package h_mal.appttude.com.utils + +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.content.res.Resources +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import android.net.Uri +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.inputmethod.EditorInfo +import android.view.inputmethod.InputMethodManager +import android.widget.EditText +import android.widget.ImageView +import android.widget.TextView +import android.widget.Toast +import androidx.annotation.DrawableRes +import androidx.appcompat.widget.SearchView +import androidx.fragment.app.Fragment +import com.bumptech.glide.Glide +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.engine.GlideException +import com.bumptech.glide.request.RequestListener +import com.squareup.picasso.Picasso +import com.squareup.picasso.Target +import h_mal.appttude.com.R +import com.bumptech.glide.request.target.Target as GlideRequestTarget + +fun View.show() { + this.visibility = View.VISIBLE +} + +fun View.hide() { + this.visibility = View.GONE +} + +fun Context.displayToast(message: String) { + Toast.makeText(this, message, Toast.LENGTH_LONG).show() +} + +fun Fragment.displayToast(message: String) { + requireContext().displayToast(message) +} + +fun EditText.setEnterPressedListener(action: () -> Unit) { + setOnEditorActionListener(TextView.OnEditorActionListener { _, id, _ -> + if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) { + action() + return@OnEditorActionListener true + } + false + }) +} + +fun ImageView.setGlideImage( + url: String?, + @DrawableRes placeholderRes: Int = R.drawable.choice_img_round +) { + + val c = Glide.with(this) + .load(url) + viewTreeObserver.addOnPreDrawListener { + c.override(width, height) + true + } + c.placeholder(placeholderRes) + .fitCenter() + .into(this) +} + +fun ImageView.setGlideImage( + url: Uri?, + @DrawableRes placeholderRes: Int = R.drawable.choice_img_round +) { + val c = Glide.with(this) + .load(url) + viewTreeObserver.addOnPreDrawListener { + c.override(width, height) + true + } + c.placeholder(placeholderRes) + .into(this) +} + +fun ImageView.setPicassoImage( + url: String?, + @DrawableRes placeholderRes: Int = R.drawable.choice_img_round +) { + + val creator = Picasso.get() + .load(url) + viewTreeObserver.addOnPreDrawListener { + creator.resize(width, height) + true + } + creator + .placeholder(placeholderRes) + .into(object : Target { + override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) { + setImageBitmap(bitmap) + setOnClickListener { + context?.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) + } + } + override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {} + override fun onPrepareLoad(placeHolderDrawable: Drawable?) {} + }) +} + +fun ImageView.setPicassoImage( + url: Uri?, + @DrawableRes placeholderRes: Int = R.drawable.choice_img_round +) { + val creator = Picasso.get() + .load(url) + viewTreeObserver.addOnPreDrawListener { + creator.resize(width, height) + true + } + creator + .placeholder(placeholderRes) + .into(this) +} + +fun ViewGroup.generateView(layoutId: Int): View = LayoutInflater + .from(context) + .inflate(layoutId, this, false) + +fun Int.dpToPx(): Int = (this * Resources.getSystem().displayMetrics.density).toInt() + +fun SearchView.onSubmitListener(searchSubmit: (String) -> Unit) { + this.setOnQueryTextListener(object : + SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(s: String): Boolean { + searchSubmit.invoke(s) + return true + } + + override fun onQueryTextChange(s: String): Boolean { + return true + } + }) +} + +fun Fragment.hideKeyboard() { + val imm = context?.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager? + imm?.hideSoftInputFromWindow(view?.windowToken, 0) +} + +fun EditText.extractString(): String = text.toString().trim() \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/DriverLicenseViewModel.kt b/app/src/main/java/h_mal/appttude/com/viewmodels/DriverLicenseViewModel.kt similarity index 63% rename from app/src/main/java/h_mal/appttude/com/driver/viewmodels/DriverLicenseViewModel.kt rename to app/src/main/java/h_mal/appttude/com/viewmodels/DriverLicenseViewModel.kt index 3959b61..f7fc0f7 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/DriverLicenseViewModel.kt +++ b/app/src/main/java/h_mal/appttude/com/viewmodels/DriverLicenseViewModel.kt @@ -1,21 +1,20 @@ -package h_mal.appttude.com.driver.viewmodels +package h_mal.appttude.com.viewmodels import android.net.Uri import com.google.firebase.database.DatabaseReference import com.google.firebase.storage.StorageReference -import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel -import h_mal.appttude.com.driver.data.FirebaseAuthentication -import h_mal.appttude.com.driver.data.FirebaseDatabaseSource -import h_mal.appttude.com.driver.data.FirebaseStorageSource -import h_mal.appttude.com.driver.model.DriversLicenseObject -import h_mal.appttude.com.driver.utils.Coroutines.io +import h_mal.appttude.com.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.data.FirebaseAuthentication +import h_mal.appttude.com.data.FirebaseDatabaseSource +import h_mal.appttude.com.data.FirebaseStorageSource +import h_mal.appttude.com.model.DriversLicenseObject +import h_mal.appttude.com.utils.Coroutines.io class DriverLicenseViewModel( auth: FirebaseAuthentication, database: FirebaseDatabaseSource, storage: FirebaseStorageSource -) : DataSubmissionBaseViewModel(database, storage) { - val uid = auth.getUid()!! +) : DataSubmissionBaseViewModel(auth, database, storage) { override val databaseRef: DatabaseReference = database.getDriverLicenseRef(uid) override val storageRef: StorageReference = storage.driversLicenseStorageRef(uid) diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/DriverProfileViewModel.kt b/app/src/main/java/h_mal/appttude/com/viewmodels/DriverProfileViewModel.kt similarity index 63% rename from app/src/main/java/h_mal/appttude/com/driver/viewmodels/DriverProfileViewModel.kt rename to app/src/main/java/h_mal/appttude/com/viewmodels/DriverProfileViewModel.kt index cd1e112..98d6852 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/DriverProfileViewModel.kt +++ b/app/src/main/java/h_mal/appttude/com/viewmodels/DriverProfileViewModel.kt @@ -1,21 +1,20 @@ -package h_mal.appttude.com.driver.viewmodels +package h_mal.appttude.com.viewmodels import android.net.Uri import com.google.firebase.database.DatabaseReference import com.google.firebase.storage.StorageReference -import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel -import h_mal.appttude.com.driver.data.FirebaseAuthentication -import h_mal.appttude.com.driver.data.FirebaseDatabaseSource -import h_mal.appttude.com.driver.data.FirebaseStorageSource -import h_mal.appttude.com.driver.model.DriverProfileObject -import h_mal.appttude.com.driver.utils.Coroutines.io +import h_mal.appttude.com.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.data.FirebaseAuthentication +import h_mal.appttude.com.data.FirebaseDatabaseSource +import h_mal.appttude.com.data.FirebaseStorageSource +import h_mal.appttude.com.model.DriverProfileObject +import h_mal.appttude.com.utils.Coroutines.io class DriverProfileViewModel( auth: FirebaseAuthentication, database: FirebaseDatabaseSource, storage: FirebaseStorageSource -) : DataSubmissionBaseViewModel(database, storage) { - val uid = auth.getUid()!! +) : DataSubmissionBaseViewModel(auth, database, storage) { override val databaseRef: DatabaseReference = database.getDriverDetailsRef(uid) override val storageRef: StorageReference = storage.profileImageStorageRef(uid) diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/InsuranceViewModel.kt b/app/src/main/java/h_mal/appttude/com/viewmodels/InsuranceViewModel.kt similarity index 69% rename from app/src/main/java/h_mal/appttude/com/driver/viewmodels/InsuranceViewModel.kt rename to app/src/main/java/h_mal/appttude/com/viewmodels/InsuranceViewModel.kt index e99934b..9fb8ee5 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/InsuranceViewModel.kt +++ b/app/src/main/java/h_mal/appttude/com/viewmodels/InsuranceViewModel.kt @@ -1,21 +1,20 @@ -package h_mal.appttude.com.driver.viewmodels +package h_mal.appttude.com.viewmodels import android.net.Uri import com.google.firebase.database.DatabaseReference import com.google.firebase.storage.StorageReference -import h_mal.appttude.com.driver.Objects.InsuranceObject -import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel -import h_mal.appttude.com.driver.data.FirebaseAuthentication -import h_mal.appttude.com.driver.data.FirebaseDatabaseSource -import h_mal.appttude.com.driver.data.FirebaseStorageSource -import h_mal.appttude.com.driver.utils.Coroutines.io +import h_mal.appttude.com.model.InsuranceObject +import h_mal.appttude.com.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.data.FirebaseAuthentication +import h_mal.appttude.com.data.FirebaseDatabaseSource +import h_mal.appttude.com.data.FirebaseStorageSource +import h_mal.appttude.com.utils.Coroutines.io class InsuranceViewModel ( auth: FirebaseAuthentication, database: FirebaseDatabaseSource, storage: FirebaseStorageSource -) : DataSubmissionBaseViewModel(database, storage) { - val uid = auth.getUid()!! +) : DataSubmissionBaseViewModel(auth, database, storage) { override val databaseRef: DatabaseReference = database.getInsuranceDetailsRef(uid) override val storageRef: StorageReference? = storage.insuranceStorageRef(uid) diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/LogbookViewModel.kt b/app/src/main/java/h_mal/appttude/com/viewmodels/LogbookViewModel.kt similarity index 62% rename from app/src/main/java/h_mal/appttude/com/driver/viewmodels/LogbookViewModel.kt rename to app/src/main/java/h_mal/appttude/com/viewmodels/LogbookViewModel.kt index 616e04c..aa54cfb 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/LogbookViewModel.kt +++ b/app/src/main/java/h_mal/appttude/com/viewmodels/LogbookViewModel.kt @@ -1,21 +1,21 @@ -package h_mal.appttude.com.driver.viewmodels +package h_mal.appttude.com.viewmodels import android.net.Uri import com.google.firebase.database.DatabaseReference import com.google.firebase.storage.StorageReference -import h_mal.appttude.com.driver.Objects.LogbookObject -import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel -import h_mal.appttude.com.driver.data.FirebaseAuthentication -import h_mal.appttude.com.driver.data.FirebaseDatabaseSource -import h_mal.appttude.com.driver.data.FirebaseStorageSource -import h_mal.appttude.com.driver.utils.Coroutines.io +import h_mal.appttude.com.model.LogbookObject +import h_mal.appttude.com.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.data.FirebaseAuthentication +import h_mal.appttude.com.data.FirebaseDatabaseSource +import h_mal.appttude.com.data.FirebaseStorageSource +import h_mal.appttude.com.utils.Coroutines.io class LogbookViewModel ( auth: FirebaseAuthentication, database: FirebaseDatabaseSource, storage: FirebaseStorageSource -) : DataSubmissionBaseViewModel(database, storage) { - val uid = auth.getUid()!! +) : DataSubmissionBaseViewModel(auth, database, storage) { + override val databaseRef: DatabaseReference = database.getLogbookRef(uid) override val storageRef: StorageReference = storage.logBookStorageRef(uid) override val objectName: String = "Log book" diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/MainViewModel.kt b/app/src/main/java/h_mal/appttude/com/viewmodels/MainViewModel.kt similarity index 62% rename from app/src/main/java/h_mal/appttude/com/driver/viewmodels/MainViewModel.kt rename to app/src/main/java/h_mal/appttude/com/viewmodels/MainViewModel.kt index 69bbbe4..d850e4c 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/MainViewModel.kt +++ b/app/src/main/java/h_mal/appttude/com/viewmodels/MainViewModel.kt @@ -1,24 +1,22 @@ -package h_mal.appttude.com.driver.viewmodels +package h_mal.appttude.com.viewmodels -import h_mal.appttude.com.driver.base.BaseViewModel -import h_mal.appttude.com.driver.data.FirebaseAuthentication -import h_mal.appttude.com.driver.data.FirebaseDatabaseSource -import h_mal.appttude.com.driver.utils.Coroutines.io -import h_mal.appttude.com.driver.utils.getDataFromDatabaseRef +import h_mal.appttude.com.base.BaseViewModel +import h_mal.appttude.com.data.FirebaseAuthentication +import h_mal.appttude.com.data.FirebaseDatabaseSource +import h_mal.appttude.com.utils.Coroutines.io +import h_mal.appttude.com.utils.getDataFromDatabaseRef class MainViewModel( private val firebaseAuth: FirebaseAuthentication, private val firebaseDatabase: FirebaseDatabaseSource ) : BaseViewModel(){ - val uid = firebaseAuth.getUid()!! - fun getRole() = io { doTryOperation("failed to retrieve data") { + val uid = firebaseAuth.getUid() ?: return@doTryOperation val ref = firebaseDatabase.getUserRoleRef(uid) val role = ref.getDataFromDatabaseRef() role?.apply { onSuccess(this) } ?: onError("No role found") -// } } diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/MotViewModel.kt b/app/src/main/java/h_mal/appttude/com/viewmodels/MotViewModel.kt similarity index 63% rename from app/src/main/java/h_mal/appttude/com/driver/viewmodels/MotViewModel.kt rename to app/src/main/java/h_mal/appttude/com/viewmodels/MotViewModel.kt index cc38fa1..a93b2c3 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/MotViewModel.kt +++ b/app/src/main/java/h_mal/appttude/com/viewmodels/MotViewModel.kt @@ -1,21 +1,20 @@ -package h_mal.appttude.com.driver.viewmodels +package h_mal.appttude.com.viewmodels import android.net.Uri import com.google.firebase.database.DatabaseReference import com.google.firebase.storage.StorageReference -import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel -import h_mal.appttude.com.driver.data.FirebaseAuthentication -import h_mal.appttude.com.driver.data.FirebaseDatabaseSource -import h_mal.appttude.com.driver.data.FirebaseStorageSource -import h_mal.appttude.com.driver.model.MotObject -import h_mal.appttude.com.driver.utils.Coroutines.io +import h_mal.appttude.com.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.data.FirebaseAuthentication +import h_mal.appttude.com.data.FirebaseDatabaseSource +import h_mal.appttude.com.data.FirebaseStorageSource +import h_mal.appttude.com.model.MotObject +import h_mal.appttude.com.utils.Coroutines.io class MotViewModel ( auth: FirebaseAuthentication, database: FirebaseDatabaseSource, storage: FirebaseStorageSource -) : DataSubmissionBaseViewModel(database, storage) { - val uid = auth.getUid()!! +) : DataSubmissionBaseViewModel(auth, database, storage) { override val databaseRef: DatabaseReference = database.getMotDetailsRef(uid) override val storageRef: StorageReference? = storage.motStorageRef(uid) diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/PrivateHireLicenseViewModel.kt b/app/src/main/java/h_mal/appttude/com/viewmodels/PrivateHireLicenseViewModel.kt similarity index 67% rename from app/src/main/java/h_mal/appttude/com/driver/viewmodels/PrivateHireLicenseViewModel.kt rename to app/src/main/java/h_mal/appttude/com/viewmodels/PrivateHireLicenseViewModel.kt index 1ebd506..d47e929 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/PrivateHireLicenseViewModel.kt +++ b/app/src/main/java/h_mal/appttude/com/viewmodels/PrivateHireLicenseViewModel.kt @@ -1,21 +1,20 @@ -package h_mal.appttude.com.driver.viewmodels +package h_mal.appttude.com.viewmodels import android.net.Uri import com.google.firebase.database.DatabaseReference import com.google.firebase.storage.StorageReference -import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel -import h_mal.appttude.com.driver.data.FirebaseAuthentication -import h_mal.appttude.com.driver.data.FirebaseDatabaseSource -import h_mal.appttude.com.driver.data.FirebaseStorageSource -import h_mal.appttude.com.driver.model.PrivateHireObject -import h_mal.appttude.com.driver.utils.Coroutines.io +import h_mal.appttude.com.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.data.FirebaseAuthentication +import h_mal.appttude.com.data.FirebaseDatabaseSource +import h_mal.appttude.com.data.FirebaseStorageSource +import h_mal.appttude.com.model.PrivateHireObject +import h_mal.appttude.com.utils.Coroutines.io class PrivateHireLicenseViewModel( auth: FirebaseAuthentication, database: FirebaseDatabaseSource, storage: FirebaseStorageSource -) : DataSubmissionBaseViewModel(database, storage) { - val uid = auth.getUid()!! +) : DataSubmissionBaseViewModel(auth, database, storage) { override val databaseRef: DatabaseReference = database.getPrivateHireRef(uid) override val storageRef: StorageReference = storage.privateHireStorageRef(uid) diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/PrivateHireVehicleViewModel.kt b/app/src/main/java/h_mal/appttude/com/viewmodels/PrivateHireVehicleViewModel.kt similarity index 64% rename from app/src/main/java/h_mal/appttude/com/driver/viewmodels/PrivateHireVehicleViewModel.kt rename to app/src/main/java/h_mal/appttude/com/viewmodels/PrivateHireVehicleViewModel.kt index 6ed3790..5567e42 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/PrivateHireVehicleViewModel.kt +++ b/app/src/main/java/h_mal/appttude/com/viewmodels/PrivateHireVehicleViewModel.kt @@ -1,21 +1,20 @@ -package h_mal.appttude.com.driver.viewmodels +package h_mal.appttude.com.viewmodels import android.net.Uri import com.google.firebase.database.DatabaseReference import com.google.firebase.storage.StorageReference -import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject -import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel -import h_mal.appttude.com.driver.data.FirebaseAuthentication -import h_mal.appttude.com.driver.data.FirebaseDatabaseSource -import h_mal.appttude.com.driver.data.FirebaseStorageSource -import h_mal.appttude.com.driver.utils.Coroutines.io +import h_mal.appttude.com.model.PrivateHireVehicleObject +import h_mal.appttude.com.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.data.FirebaseAuthentication +import h_mal.appttude.com.data.FirebaseDatabaseSource +import h_mal.appttude.com.data.FirebaseStorageSource +import h_mal.appttude.com.utils.Coroutines.io class PrivateHireVehicleViewModel ( auth: FirebaseAuthentication, database: FirebaseDatabaseSource, storage: FirebaseStorageSource -) : DataSubmissionBaseViewModel(database, storage) { - val uid = auth.getUid()!! +) : DataSubmissionBaseViewModel(auth, database, storage) { override val databaseRef: DatabaseReference = database.getPrivateHireVehicleRef(uid) override val storageRef: StorageReference? = storage.privateHireVehicleStorageRef(uid) diff --git a/app/src/main/java/h_mal/appttude/com/viewmodels/RoleViewModel.kt b/app/src/main/java/h_mal/appttude/com/viewmodels/RoleViewModel.kt new file mode 100644 index 0000000..789b10a --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/viewmodels/RoleViewModel.kt @@ -0,0 +1,31 @@ +package h_mal.appttude.com.viewmodels + +import com.google.firebase.database.DatabaseReference +import com.google.firebase.storage.StorageReference +import h_mal.appttude.com.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.data.FirebaseAuthentication +import h_mal.appttude.com.data.FirebaseDatabaseSource +import h_mal.appttude.com.data.FirebaseStorageSource +import h_mal.appttude.com.utils.Coroutines.io + +class RoleViewModel( + auth: FirebaseAuthentication, + database: FirebaseDatabaseSource, + storage: FirebaseStorageSource +) : DataSubmissionBaseViewModel(auth, database, storage) { + + override val databaseRef: DatabaseReference = database.getUserRoleRef(uid) + override val storageRef: StorageReference? = null + override val objectName: String = "role" + + override fun getDataFromDatabase() = getDataClass() + + override fun setDataInDatabase(data: String) { + io { + doTryOperation("Failed to upload $objectName") { + postDataToDatabase(data) + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/viewmodels/UpdateUserViewModel.kt b/app/src/main/java/h_mal/appttude/com/viewmodels/UpdateUserViewModel.kt new file mode 100644 index 0000000..391f644 --- /dev/null +++ b/app/src/main/java/h_mal/appttude/com/viewmodels/UpdateUserViewModel.kt @@ -0,0 +1,73 @@ +package h_mal.appttude.com.viewmodels + +import android.net.Uri +import h_mal.appttude.com.base.BaseViewModel +import h_mal.appttude.com.data.FirebaseAuthentication +import h_mal.appttude.com.data.FirebaseCompletion +import h_mal.appttude.com.data.FirebaseStorageSource +import h_mal.appttude.com.utils.Coroutines.io +import kotlinx.coroutines.tasks.await +import java.io.IOException +import java.lang.Exception + +class UpdateUserViewModel( + private val auth: FirebaseAuthentication, + private val storage: FirebaseStorageSource +) : BaseViewModel() { + + fun updateEmail(oldEmail: String, password: String, newEmail: String) = io { + doTryOperation("Failed to update email") { + auth.reauthenticate(oldEmail, password).await() + auth.updateEmail(newEmail).await() + postResult("Email address") + } + } + + fun updatePassword(oldEmail: String, password: String, newPassword: String) = io { + doTryOperation("Failed to update password") { + auth.reauthenticate(oldEmail, password).await() + auth.updatePassword(newPassword).await() + postResult("Password") + } + } + + fun updateProfile(name: String?, localImageUri: Uri?) = io { + if (name.isNullOrBlank() && localImageUri == null) return@io + doTryOperation("Failed to update User") { + + val profilePicUrl = localImageUri?.let { + val uid = auth.getUid() ?: return@doTryOperation + val storageRef = storage.profileImageStorageRef(uid) + storage.uploadImage(it, storageRef, "profile_pic") + } + + auth.updateProfile(name, profilePicUrl).await() + postResult("Profile updated") + } + } + + fun deleteProfile(oldEmail: String, password: String) = io { + doTryOperation("Failed to delete profile") { + auth.reauthenticate(oldEmail, password).await() + val complete = auth.deleteProfile().await() + complete.let { + onSuccess(FirebaseCompletion.ProfileDeleted("Profile deleted")) + return@doTryOperation + } + } + } + + + fun getUser() { + auth.getUser()?.let { + onSuccess(it) + return + } + onError("No user signed in") + } + + private fun postResult(section: String) { + onSuccess(FirebaseCompletion.Changed("$section has been updated")) + return + } +} \ No newline at end of file diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/UserViewModel.kt b/app/src/main/java/h_mal/appttude/com/viewmodels/UserViewModel.kt similarity index 77% rename from app/src/main/java/h_mal/appttude/com/driver/viewmodels/UserViewModel.kt rename to app/src/main/java/h_mal/appttude/com/viewmodels/UserViewModel.kt index cde9d3e..1818fca 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/UserViewModel.kt +++ b/app/src/main/java/h_mal/appttude/com/viewmodels/UserViewModel.kt @@ -1,12 +1,14 @@ -package h_mal.appttude.com.driver.viewmodels +package h_mal.appttude.com.viewmodels import com.google.firebase.auth.AuthResult -import h_mal.appttude.com.driver.base.BaseViewModel -import h_mal.appttude.com.driver.data.FirebaseAuthentication -import h_mal.appttude.com.driver.data.FirebaseCompletion -import h_mal.appttude.com.driver.utils.Coroutines.io +import h_mal.appttude.com.base.BaseViewModel +import h_mal.appttude.com.data.FirebaseAuthentication +import h_mal.appttude.com.data.FirebaseCompletion +import h_mal.appttude.com.utils.Coroutines.io import kotlinx.coroutines.delay import kotlinx.coroutines.tasks.await +import java.io.IOException +import java.lang.Exception class UserViewModel( val auth: FirebaseAuthentication @@ -37,9 +39,11 @@ class UserViewModel( } fun splashscreenCheckUserIsLoggedIn() = io { + onStart() delay(1000) auth.getUser()?.let { onSuccess(it) + return@io } onSuccess(FirebaseCompletion.Default) } diff --git a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/VehicleProfileViewModel.kt b/app/src/main/java/h_mal/appttude/com/viewmodels/VehicleProfileViewModel.kt similarity index 58% rename from app/src/main/java/h_mal/appttude/com/driver/viewmodels/VehicleProfileViewModel.kt rename to app/src/main/java/h_mal/appttude/com/viewmodels/VehicleProfileViewModel.kt index 58f9132..215891c 100644 --- a/app/src/main/java/h_mal/appttude/com/driver/viewmodels/VehicleProfileViewModel.kt +++ b/app/src/main/java/h_mal/appttude/com/viewmodels/VehicleProfileViewModel.kt @@ -1,20 +1,19 @@ -package h_mal.appttude.com.driver.viewmodels +package h_mal.appttude.com.viewmodels import com.google.firebase.database.DatabaseReference import com.google.firebase.storage.StorageReference -import h_mal.appttude.com.driver.base.DataSubmissionBaseViewModel -import h_mal.appttude.com.driver.data.FirebaseAuthentication -import h_mal.appttude.com.driver.data.FirebaseDatabaseSource -import h_mal.appttude.com.driver.data.FirebaseStorageSource -import h_mal.appttude.com.driver.model.VehicleProfileObject -import h_mal.appttude.com.driver.utils.Coroutines.io +import h_mal.appttude.com.base.DataSubmissionBaseViewModel +import h_mal.appttude.com.data.FirebaseAuthentication +import h_mal.appttude.com.data.FirebaseDatabaseSource +import h_mal.appttude.com.data.FirebaseStorageSource +import h_mal.appttude.com.model.VehicleProfileObject +import h_mal.appttude.com.utils.Coroutines.io class VehicleProfileViewModel ( auth: FirebaseAuthentication, database: FirebaseDatabaseSource, storage: FirebaseStorageSource -) : DataSubmissionBaseViewModel(database, storage) { - val uid = auth.getUid()!! +) : DataSubmissionBaseViewModel(auth, database, storage) { override val databaseRef: DatabaseReference = database.getVehicleDetailsRef(uid) override val storageRef: StorageReference? = null diff --git a/app/src/main/res/drawable-hdpi/cars.png b/app/src/main/res/drawable-hdpi/cars.png new file mode 100644 index 0000000..f45e424 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/cars.png differ diff --git a/app/src/main/res/drawable-ldpi/cars.png b/app/src/main/res/drawable-ldpi/cars.png new file mode 100644 index 0000000..b0b31c7 Binary files /dev/null and b/app/src/main/res/drawable-ldpi/cars.png differ diff --git a/app/src/main/res/drawable-mdpi/cars.png b/app/src/main/res/drawable-mdpi/cars.png new file mode 100644 index 0000000..c863164 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/cars.png differ diff --git a/app/src/main/res/drawable-v21/cars.jpg b/app/src/main/res/drawable-v21/cars.jpg deleted file mode 100644 index e0d291a..0000000 Binary files a/app/src/main/res/drawable-v21/cars.jpg and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/cars.png b/app/src/main/res/drawable-xhdpi/cars.png new file mode 100644 index 0000000..fc40c5e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/cars.png differ diff --git a/app/src/main/res/drawable-xxhdpi/cars.jpg b/app/src/main/res/drawable-xxhdpi/cars.jpg deleted file mode 100644 index e0d291a..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/cars.jpg and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/cars.png b/app/src/main/res/drawable-xxhdpi/cars.png new file mode 100644 index 0000000..248c230 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/cars.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/cars.png b/app/src/main/res/drawable-xxxhdpi/cars.png new file mode 100644 index 0000000..bdd868f Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/cars.png differ diff --git a/app/src/main/res/drawable/cars.jpg b/app/src/main/res/drawable/cars.jpg deleted file mode 100644 index e0d291a..0000000 Binary files a/app/src/main/res/drawable/cars.jpg and /dev/null differ diff --git a/app/src/main/res/drawable/ic_baseline_photo_library_24.xml b/app/src/main/res/drawable/ic_baseline_photo_library_24.xml new file mode 100644 index 0000000..b2b971d --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_photo_library_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 1ec6c38..e0cf4e6 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -6,7 +6,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/cars" - tools:context=".ui.user.LoginActivity"> + tools:context="h_mal.appttude.com.ui.user.LoginActivity"> + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_delete_profile.xml b/app/src/main/res/layout/fragment_delete_profile.xml index b70b441..550abee 100644 --- a/app/src/main/res/layout/fragment_delete_profile.xml +++ b/app/src/main/res/layout/fragment_delete_profile.xml @@ -5,7 +5,7 @@ android:id="@+id/container" style="@style/constraint_container" android:background="#73000000" - tools:context=".update.DeleteProfileFragment"> + tools:context=".ui.update.DeleteProfileFragment"> + style="@style/edit_text_entry_style" /> + style="@style/edit_text_entry_style"/> diff --git a/app/src/main/res/layout/fragment_driver_license.xml b/app/src/main/res/layout/fragment_driver_license.xml index 66d422f..68758ae 100644 --- a/app/src/main/res/layout/fragment_driver_license.xml +++ b/app/src/main/res/layout/fragment_driver_license.xml @@ -1,9 +1,9 @@ - + - + - - - -