mirror of
https://github.com/hmalik144/Driver.git
synced 2026-03-18 07:26:03 +00:00
mid commit
This commit is contained in:
@@ -14,11 +14,11 @@ repositories {
|
|||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 28
|
compileSdkVersion 30
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "h_mal.appttude.com.driver"
|
applicationId "h_mal.appttude.com"
|
||||||
minSdkVersion 24
|
minSdkVersion 24
|
||||||
targetSdkVersion 28
|
targetSdkVersion 30
|
||||||
versionCode 6
|
versionCode 6
|
||||||
versionName "1.6"
|
versionName "1.6"
|
||||||
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
||||||
@@ -37,6 +37,31 @@ android {
|
|||||||
jvmTarget = "1.8"
|
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 {
|
dependencies {
|
||||||
@@ -60,6 +85,7 @@ dependencies {
|
|||||||
androidTestImplementation "androidx.test.ext:junit:1.1.1"
|
androidTestImplementation "androidx.test.ext:junit:1.1.1"
|
||||||
androidTestImplementation "androidx.test.espresso:espresso-core:3.1.0"
|
androidTestImplementation "androidx.test.espresso:espresso-core:3.1.0"
|
||||||
androidTestImplementation "androidx.test:rules:1.1.1"
|
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"
|
implementation "androidx.legacy:legacy-support-v4:1.0.0"
|
||||||
// Google play services
|
// Google play services
|
||||||
@@ -89,4 +115,8 @@ dependencies {
|
|||||||
|
|
||||||
/* Image Carousal */
|
/* Image Carousal */
|
||||||
implementation 'com.synnapps:carouselview:0.1.5'
|
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'
|
||||||
}
|
}
|
||||||
|
|||||||
40
app/src/androidTest/java/h_mal/appttude/com/BaseTestRobot.kt
Normal file
40
app/src/androidTest/java/h_mal/appttude/com/BaseTestRobot.kt
Normal file
@@ -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)
|
||||||
|
|
||||||
|
}
|
||||||
38
app/src/androidTest/java/h_mal/appttude/com/BaseUiTest.kt
Normal file
38
app/src/androidTest/java/h_mal/appttude/com/BaseUiTest.kt
Normal file
@@ -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<T : AppCompatActivity> {
|
||||||
|
|
||||||
|
@Ignore
|
||||||
|
abstract fun getApplicationClass(): Class<T>
|
||||||
|
|
||||||
|
@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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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<View?>? {
|
||||||
|
return object : TypeSafeMatcher<View?>() {
|
||||||
|
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?) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -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 <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
|
||||||
*/
|
|
||||||
@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());
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -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<MainActivity> activityActivityTestRule = new ActivityTestRule<MainActivity>(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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.base
|
|
||||||
|
|
||||||
import org.junit.Assert.*
|
|
||||||
|
|
||||||
class BaseActivityTest{
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -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<LoginActivity> 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<View> childAtPosition(
|
|
||||||
final Matcher<View> parentMatcher, final int position) {
|
|
||||||
|
|
||||||
return new TypeSafeMatcher<View>() {
|
|
||||||
@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));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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<LoginActivity> 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.<View>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<View> childAtPosition(
|
|
||||||
final Matcher<View> parentMatcher, final int position) {
|
|
||||||
|
|
||||||
return new TypeSafeMatcher<View>() {
|
|
||||||
@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));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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<LoginActivity>() {
|
||||||
|
|
||||||
|
@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))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
35
app/src/driver/AndroidManifest.xml
Normal file
35
app/src/driver/AndroidManifest.xml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<application>
|
||||||
|
<activity
|
||||||
|
android:name="h_mal.appttude.com.ui.user.LoginActivity"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:theme="@style/AppTheme.NoActionBar.User">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
|
||||||
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
|
</intent-filter>
|
||||||
|
</activity>
|
||||||
|
<activity
|
||||||
|
android:name="h_mal.appttude.com.ui.driver.MainActivity"
|
||||||
|
android:configChanges="orientation|screenSize"
|
||||||
|
android:label="@string/app_name"
|
||||||
|
android:theme="@style/AppTheme.NoActionBar" />
|
||||||
|
<activity
|
||||||
|
android:name="h_mal.appttude.com.ui.update.UpdateActivity"
|
||||||
|
android:theme="@style/AppTheme.NoActionBar.Update" />
|
||||||
|
<provider
|
||||||
|
android:name="androidx.core.content.FileProvider"
|
||||||
|
android:authorities="h_mal.appttude.com.driver"
|
||||||
|
android:exported="false"
|
||||||
|
android:grantUriPermissions="true">
|
||||||
|
<meta-data
|
||||||
|
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||||
|
android:resource="@xml/file_paths" />
|
||||||
|
</provider>
|
||||||
|
</application>
|
||||||
|
|
||||||
|
</manifest>
|
||||||
@@ -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.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import h_mal.appttude.com.driver.R
|
import androidx.fragment.app.Fragment
|
||||||
import h_mal.appttude.com.driver.base.BaseFragment
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.utils.navigateTo
|
import h_mal.appttude.com.base.BaseFragment
|
||||||
import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel
|
import h_mal.appttude.com.utils.navigateTo
|
||||||
|
import h_mal.appttude.com.viewmodels.DriverLicenseViewModel
|
||||||
|
|
||||||
import kotlinx.android.synthetic.main.fragment_driver_overall.*
|
import kotlinx.android.synthetic.main.fragment_driver_overall.*
|
||||||
|
|
||||||
class DriverOverallFragment : BaseFragment<DriverLicenseViewModel>() {
|
class DriverOverallFragment : Fragment(R.layout.fragment_driver_overall) {
|
||||||
|
|
||||||
private val viewmodel: DriverLicenseViewModel by getFragmentViewModel()
|
|
||||||
override fun getViewModel(): DriverLicenseViewModel = viewmodel
|
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_driver_overall
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -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<RoleViewModel, String>(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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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.os.Bundle
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageView
|
|
||||||
import androidx.core.view.GravityCompat
|
import androidx.core.view.GravityCompat
|
||||||
import androidx.navigation.NavController
|
import androidx.navigation.NavController
|
||||||
import androidx.navigation.findNavController
|
import androidx.navigation.findNavController
|
||||||
@@ -16,18 +13,11 @@ import androidx.navigation.ui.setupActionBarWithNavController
|
|||||||
import androidx.navigation.ui.setupWithNavController
|
import androidx.navigation.ui.setupWithNavController
|
||||||
import com.google.android.material.navigation.NavigationView
|
import com.google.android.material.navigation.NavigationView
|
||||||
import com.google.firebase.auth.FirebaseUser
|
import com.google.firebase.auth.FirebaseUser
|
||||||
import com.squareup.picasso.Picasso.LoadedFrom
|
import h_mal.appttude.com.R
|
||||||
import com.squareup.picasso.Target
|
import h_mal.appttude.com.base.BaseActivity
|
||||||
import h_mal.appttude.com.driver.Global.ApprovalsClass
|
import h_mal.appttude.com.dialogs.ExitDialog.displayExitDialog
|
||||||
import h_mal.appttude.com.driver.Global.ArchiveClass
|
import h_mal.appttude.com.utils.setGlideImage
|
||||||
import h_mal.appttude.com.driver.Global.ImageViewClass
|
import h_mal.appttude.com.viewmodels.MainViewModel
|
||||||
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 kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||||
import kotlinx.android.synthetic.main.nav_header_main.view.*
|
import kotlinx.android.synthetic.main.nav_header_main.view.*
|
||||||
@@ -70,7 +60,7 @@ class MainActivity : BaseActivity<MainViewModel>(),
|
|||||||
drawer_layout.closeDrawer(GravityCompat.START)
|
drawer_layout.closeDrawer(GravityCompat.START)
|
||||||
} else {
|
} else {
|
||||||
val navHostFragment = supportFragmentManager.findFragmentById(R.id.container)
|
val navHostFragment = supportFragmentManager.findFragmentById(R.id.container)
|
||||||
navHostFragment?.childFragmentManager?.backStackEntryCount?.takeIf { it > 1 }?.let {
|
navHostFragment?.childFragmentManager?.backStackEntryCount?.takeIf { it >= 1 }?.let {
|
||||||
return super.onBackPressed()
|
return super.onBackPressed()
|
||||||
}
|
}
|
||||||
displayExitDialog()
|
displayExitDialog()
|
||||||
@@ -90,14 +80,12 @@ class MainActivity : BaseActivity<MainViewModel>(),
|
|||||||
val header: View = nav_view.getHeaderView(0)
|
val header: View = nav_view.getHeaderView(0)
|
||||||
header.driver_email.text = user.email
|
header.driver_email.text = user.email
|
||||||
header.driver_name.text = user.displayName
|
header.driver_name.text = user.displayName
|
||||||
header.profileImage.setPicassoImage(user.photoUrl)
|
header.profileImage.setGlideImage(user.photoUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setupLogoutInDrawer(){
|
private fun setupLogoutInDrawer(){
|
||||||
logout.setOnClickListener {
|
logout.setOnClickListener {
|
||||||
getViewModel().logOut()
|
getViewModel().logOut()
|
||||||
startActivity(createIntent<LoginActivity>())
|
|
||||||
finish()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -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.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import h_mal.appttude.com.driver.R
|
import androidx.fragment.app.Fragment
|
||||||
import h_mal.appttude.com.driver.base.BaseFragment
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.utils.navigateTo
|
import h_mal.appttude.com.base.BaseFragment
|
||||||
import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel
|
import h_mal.appttude.com.utils.navigateTo
|
||||||
|
import h_mal.appttude.com.viewmodels.DriverLicenseViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_vehicle_overall.*
|
import kotlinx.android.synthetic.main.fragment_vehicle_overall.*
|
||||||
|
|
||||||
|
|
||||||
class VehicleOverallFragment : BaseFragment<DriverLicenseViewModel>() {
|
class VehicleOverallFragment : Fragment(R.layout.fragment_vehicle_overall) {
|
||||||
|
|
||||||
private val viewmodel: DriverLicenseViewModel by getFragmentViewModel()
|
|
||||||
override fun getViewModel(): DriverLicenseViewModel = viewmodel
|
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_vehicle_overall
|
|
||||||
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
@@ -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<DriverLicenseViewModel, DriversLicenseObject>(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)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import h_mal.appttude.com.driver.Global.DateDialog
|
import h_mal.appttude.com.dialogs.DateDialog
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
import h_mal.appttude.com.base.DataSubmissionBaseFragment
|
||||||
import h_mal.appttude.com.driver.model.DriverProfileObject
|
import h_mal.appttude.com.model.DriverProfileObject
|
||||||
import h_mal.appttude.com.driver.utils.setPicassoImage
|
import h_mal.appttude.com.utils.setGlideImage
|
||||||
import h_mal.appttude.com.driver.viewmodels.DriverProfileViewModel
|
import h_mal.appttude.com.viewmodels.DriverProfileViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_driver_profile.*
|
import kotlinx.android.synthetic.main.fragment_driver_profile.*
|
||||||
|
|
||||||
|
|
||||||
class DriverProfileFragment: DataSubmissionBaseFragment<DriverProfileViewModel, DriverProfileObject>() {
|
class DriverProfileFragment: DataSubmissionBaseFragment
|
||||||
|
<DriverProfileViewModel, DriverProfileObject>(R.layout.fragment_driver_profile) {
|
||||||
|
|
||||||
var localUri: Uri? = null
|
var localUri: Uri? = null
|
||||||
|
|
||||||
private val viewmodel by getFragmentViewModel<DriverProfileViewModel>()
|
private val viewmodel by getFragmentViewModel<DriverProfileViewModel>()
|
||||||
override fun getViewModel(): DriverProfileViewModel = viewmodel
|
override fun getViewModel(): DriverProfileViewModel = viewmodel
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_driver_profile
|
|
||||||
override var model = DriverProfileObject()
|
override var model = DriverProfileObject()
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
@@ -30,17 +30,21 @@ class DriverProfileFragment: DataSubmissionBaseFragment<DriverProfileViewModel,
|
|||||||
dob_input.apply {
|
dob_input.apply {
|
||||||
setTextOnChange{ model.dob = it }
|
setTextOnChange{ model.dob = it }
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
DateDialog(this)
|
DateDialog(this){ date ->
|
||||||
|
model.dob = date
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ni_number.setTextOnChange{ model.ni = it }
|
ni_number.setTextOnChange{ model.ni = it }
|
||||||
date_first.apply {
|
date_first.apply {
|
||||||
setTextOnChange{ model.dateFirst = it }
|
setTextOnChange{ model.dateFirst = it }
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
DateDialog(this)
|
DateDialog(this){ date ->
|
||||||
|
model.dateFirst = date
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
add_driver_pic.setOnClickListener { openGalleryWithPermissionRequest() }
|
add_photo.setOnClickListener { openGalleryWithPermissionRequest() }
|
||||||
submit_driver.setOnClickListener{ submit() }
|
submit_driver.setOnClickListener{ submit() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +59,7 @@ class DriverProfileFragment: DataSubmissionBaseFragment<DriverProfileViewModel,
|
|||||||
|
|
||||||
override fun setFields(data: DriverProfileObject) {
|
override fun setFields(data: DriverProfileObject) {
|
||||||
super.setFields(data)
|
super.setFields(data)
|
||||||
driver_pic.setPicassoImage(data.driverPic)
|
driver_pic.setGlideImage(data.driverPic)
|
||||||
names_input.setText(data.forenames)
|
names_input.setText(data.forenames)
|
||||||
address_input.setText(data.address)
|
address_input.setText(data.address)
|
||||||
postcode_input.setText(data.postcode)
|
postcode_input.setText(data.postcode)
|
||||||
@@ -67,7 +71,7 @@ class DriverProfileFragment: DataSubmissionBaseFragment<DriverProfileViewModel,
|
|||||||
override fun onImageGalleryResult(imageUri: Uri?) {
|
override fun onImageGalleryResult(imageUri: Uri?) {
|
||||||
super.onImageGalleryResult(imageUri)
|
super.onImageGalleryResult(imageUri)
|
||||||
localUri = imageUri
|
localUri = imageUri
|
||||||
driver_pic.setPicassoImage(imageUri)
|
driver_pic.setGlideImage(imageUri)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,23 +1,23 @@
|
|||||||
package h_mal.appttude.com.driver.ui.driver.driverprofile
|
package h_mal.appttude.com.ui.driver.driverprofile
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import h_mal.appttude.com.driver.Global.DateDialog
|
import h_mal.appttude.com.dialogs.DateDialog
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
import h_mal.appttude.com.base.DataSubmissionBaseFragment
|
||||||
import h_mal.appttude.com.driver.model.PrivateHireObject
|
import h_mal.appttude.com.model.PrivateHireObject
|
||||||
import h_mal.appttude.com.driver.utils.setPicassoImage
|
import h_mal.appttude.com.utils.setGlideImage
|
||||||
import h_mal.appttude.com.driver.viewmodels.PrivateHireLicenseViewModel
|
import h_mal.appttude.com.viewmodels.PrivateHireLicenseViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_private_hire_license.*
|
import kotlinx.android.synthetic.main.fragment_private_hire_license.*
|
||||||
|
|
||||||
|
|
||||||
class PrivateHireLicenseFragment : DataSubmissionBaseFragment<PrivateHireLicenseViewModel, PrivateHireObject>() {
|
class PrivateHireLicenseFragment : DataSubmissionBaseFragment
|
||||||
|
<PrivateHireLicenseViewModel, PrivateHireObject>(R.layout.fragment_private_hire_license) {
|
||||||
|
|
||||||
val viewmodel by getFragmentViewModel<PrivateHireLicenseViewModel>()
|
val viewmodel by getFragmentViewModel<PrivateHireLicenseViewModel>()
|
||||||
override fun getViewModel(): PrivateHireLicenseViewModel = viewmodel
|
override fun getViewModel(): PrivateHireLicenseViewModel = viewmodel
|
||||||
override var model = PrivateHireObject()
|
override var model = PrivateHireObject()
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_private_hire_license
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -26,7 +26,9 @@ class PrivateHireLicenseFragment : DataSubmissionBaseFragment<PrivateHireLicense
|
|||||||
ph_expiry.apply {
|
ph_expiry.apply {
|
||||||
setTextOnChange{ model.phExpiry = it }
|
setTextOnChange{ model.phExpiry = it }
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
DateDialog(this)
|
DateDialog(this){ date ->
|
||||||
|
model.phExpiry = date
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,14 +44,14 @@ class PrivateHireLicenseFragment : DataSubmissionBaseFragment<PrivateHireLicense
|
|||||||
|
|
||||||
override fun setFields(data: PrivateHireObject) {
|
override fun setFields(data: PrivateHireObject) {
|
||||||
super.setFields(data)
|
super.setFields(data)
|
||||||
imageView2.setPicassoImage(data.phImageString)
|
imageView2.setGlideImage(data.phImageString)
|
||||||
ph_no.setText(data.phNumber)
|
ph_no.setText(data.phNumber)
|
||||||
ph_expiry.setText(data.phExpiry)
|
ph_expiry.setText(data.phExpiry)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onImageGalleryResult(imageUri: Uri?) {
|
override fun onImageGalleryResult(imageUri: Uri?) {
|
||||||
super.onImageGalleryResult(imageUri)
|
super.onImageGalleryResult(imageUri)
|
||||||
imageView2.setPicassoImage(imageUri)
|
imageView2.setGlideImage(imageUri)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,25 +1,24 @@
|
|||||||
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
|
package h_mal.appttude.com.ui.driver.vehicleprofile
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import h_mal.appttude.com.driver.Global.DateDialog
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.Objects.InsuranceObject
|
import h_mal.appttude.com.base.DataSubmissionBaseFragment
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.dialogs.DateDialog
|
||||||
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
import h_mal.appttude.com.model.InsuranceObject
|
||||||
import h_mal.appttude.com.driver.utils.setPicassoImage
|
import h_mal.appttude.com.utils.setGlideImage
|
||||||
import h_mal.appttude.com.driver.viewmodels.InsuranceViewModel
|
import h_mal.appttude.com.viewmodels.InsuranceViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_insurance.*
|
import kotlinx.android.synthetic.main.fragment_insurance.*
|
||||||
|
|
||||||
|
|
||||||
class InsuranceFragment : DataSubmissionBaseFragment<InsuranceViewModel, InsuranceObject>() {
|
class InsuranceFragment : DataSubmissionBaseFragment<InsuranceViewModel, InsuranceObject>(R.layout.fragment_insurance) {
|
||||||
|
|
||||||
private var selectedImages: List<Uri>? = listOf()
|
private var selectedImages: List<Uri>? = listOf()
|
||||||
|
|
||||||
private val viewmodel: InsuranceViewModel by getFragmentViewModel()
|
private val viewmodel: InsuranceViewModel by getFragmentViewModel()
|
||||||
override fun getViewModel(): InsuranceViewModel = viewmodel
|
override fun getViewModel(): InsuranceViewModel = viewmodel
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_insurance
|
|
||||||
override var model = InsuranceObject()
|
override var model = InsuranceObject()
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
@@ -28,8 +27,11 @@ class InsuranceFragment : DataSubmissionBaseFragment<InsuranceViewModel, Insuran
|
|||||||
|
|
||||||
insurer.setTextOnChange { model.insurerName = it }
|
insurer.setTextOnChange { model.insurerName = it }
|
||||||
insurance_exp.apply {
|
insurance_exp.apply {
|
||||||
setOnClickListener { DateDialog(this) }
|
setOnClickListener {
|
||||||
setTextOnChange { model.expiryDate = it }
|
DateDialog(this) { date ->
|
||||||
|
model.expiryDate = date
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
uploadInsurance.setOnClickListener { openGalleryWithPermissionRequest() }
|
uploadInsurance.setOnClickListener { openGalleryWithPermissionRequest() }
|
||||||
@@ -40,8 +42,10 @@ class InsuranceFragment : DataSubmissionBaseFragment<InsuranceViewModel, Insuran
|
|||||||
carouselView.setImageClickListener(null)
|
carouselView.setImageClickListener(null)
|
||||||
carouselView.setImageListener { i: Int, imageView: ImageView ->
|
carouselView.setImageListener { i: Int, imageView: ImageView ->
|
||||||
when (list[i]) {
|
when (list[i]) {
|
||||||
is Uri -> { imageView.setPicassoImage(list[i] as Uri) }
|
is Uri -> {
|
||||||
is String -> imageView.setPicassoImage(list[i] as String)
|
imageView.setGlideImage(list[i] as Uri)
|
||||||
|
}
|
||||||
|
is String -> imageView.setGlideImage(list[i] as String)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
carouselView.pageCount = list.size
|
carouselView.pageCount = list.size
|
||||||
@@ -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.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import h_mal.appttude.com.driver.Objects.LogbookObject
|
import h_mal.appttude.com.model.LogbookObject
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
import h_mal.appttude.com.base.DataSubmissionBaseFragment
|
||||||
import h_mal.appttude.com.driver.utils.setPicassoImage
|
import h_mal.appttude.com.utils.setGlideImage
|
||||||
import h_mal.appttude.com.driver.viewmodels.LogbookViewModel
|
import h_mal.appttude.com.viewmodels.LogbookViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_logbook.*
|
import kotlinx.android.synthetic.main.fragment_logbook.*
|
||||||
|
|
||||||
|
|
||||||
class LogbookFragment : DataSubmissionBaseFragment<LogbookViewModel, LogbookObject>() {
|
class LogbookFragment : DataSubmissionBaseFragment<LogbookViewModel, LogbookObject>(R.layout.fragment_logbook) {
|
||||||
|
|
||||||
private val viewmodel by getFragmentViewModel<LogbookViewModel>()
|
private val viewmodel by getFragmentViewModel<LogbookViewModel>()
|
||||||
override fun getViewModel(): LogbookViewModel = viewmodel
|
override fun getViewModel(): LogbookViewModel = viewmodel
|
||||||
override var model = LogbookObject()
|
override var model = LogbookObject()
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_logbook
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -38,7 +37,7 @@ class LogbookFragment : DataSubmissionBaseFragment<LogbookViewModel, LogbookObje
|
|||||||
override fun setFields(data: LogbookObject) {
|
override fun setFields(data: LogbookObject) {
|
||||||
super.setFields(data)
|
super.setFields(data)
|
||||||
|
|
||||||
log_book_img.setPicassoImage(data.photoString)
|
log_book_img.setGlideImage(data.photoString)
|
||||||
v5c_no.setText(data.v5cnumber)
|
v5c_no.setText(data.v5cnumber)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -46,6 +45,6 @@ class LogbookFragment : DataSubmissionBaseFragment<LogbookViewModel, LogbookObje
|
|||||||
super.onImageGalleryResult(imageUri)
|
super.onImageGalleryResult(imageUri)
|
||||||
|
|
||||||
picUri = imageUri
|
picUri = imageUri
|
||||||
log_book_img.setPicassoImage(picUri)
|
log_book_img.setGlideImage(picUri)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,32 +1,32 @@
|
|||||||
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
|
package h_mal.appttude.com.ui.driver.vehicleprofile
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
|
||||||
import h_mal.appttude.com.driver.Global.DateDialog
|
import h_mal.appttude.com.dialogs.DateDialog
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
import h_mal.appttude.com.base.DataSubmissionBaseFragment
|
||||||
import h_mal.appttude.com.driver.model.MotObject
|
import h_mal.appttude.com.model.MotObject
|
||||||
import h_mal.appttude.com.driver.utils.setPicassoImage
|
import h_mal.appttude.com.utils.setGlideImage
|
||||||
import h_mal.appttude.com.driver.viewmodels.MotViewModel
|
import h_mal.appttude.com.viewmodels.MotViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_mot.*
|
import kotlinx.android.synthetic.main.fragment_mot.*
|
||||||
|
|
||||||
|
|
||||||
class MotFragment: DataSubmissionBaseFragment<MotViewModel, MotObject>(){
|
class MotFragment: DataSubmissionBaseFragment<MotViewModel, MotObject>(R.layout.fragment_mot){
|
||||||
|
|
||||||
private val viewmodel by getFragmentViewModel<MotViewModel>()
|
private val viewmodel by getFragmentViewModel<MotViewModel>()
|
||||||
override fun getViewModel(): MotViewModel = viewmodel
|
override fun getViewModel(): MotViewModel = viewmodel
|
||||||
override var model = MotObject()
|
override var model = MotObject()
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_mot
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
mot_expiry.apply {
|
mot_expiry.apply {
|
||||||
setTextOnChange{ model.motExpiry = it }
|
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
DateDialog(this)
|
DateDialog(this){ date ->
|
||||||
|
model.motExpiry = date
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,12 +42,12 @@ class MotFragment: DataSubmissionBaseFragment<MotViewModel, MotObject>(){
|
|||||||
|
|
||||||
override fun setFields(data: MotObject) {
|
override fun setFields(data: MotObject) {
|
||||||
super.setFields(data)
|
super.setFields(data)
|
||||||
mot_img.setPicassoImage(data.motImageString)
|
mot_img.setGlideImage(data.motImageString)
|
||||||
mot_expiry.setText(data.motExpiry)
|
mot_expiry.setText(data.motExpiry)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onImageGalleryResult(imageUri: Uri?) {
|
override fun onImageGalleryResult(imageUri: Uri?) {
|
||||||
super.onImageGalleryResult(imageUri)
|
super.onImageGalleryResult(imageUri)
|
||||||
mot_img.setPicassoImage(imageUri)
|
mot_img.setGlideImage(imageUri)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
|
||||||
import h_mal.appttude.com.driver.Global.DateDialog
|
import h_mal.appttude.com.dialogs.DateDialog
|
||||||
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
|
import h_mal.appttude.com.model.PrivateHireVehicleObject
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
import h_mal.appttude.com.base.DataSubmissionBaseFragment
|
||||||
import h_mal.appttude.com.driver.utils.setPicassoImage
|
import h_mal.appttude.com.utils.setGlideImage
|
||||||
import h_mal.appttude.com.driver.viewmodels.PrivateHireVehicleViewModel
|
import h_mal.appttude.com.viewmodels.PrivateHireVehicleViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_private_hire_vehicle.*
|
import kotlinx.android.synthetic.main.fragment_private_hire_vehicle.*
|
||||||
|
|
||||||
|
|
||||||
class PrivateHireVehicleFragment: DataSubmissionBaseFragment<PrivateHireVehicleViewModel, PrivateHireVehicleObject>(){
|
class PrivateHireVehicleFragment: DataSubmissionBaseFragment
|
||||||
|
<PrivateHireVehicleViewModel, PrivateHireVehicleObject>(R.layout.fragment_private_hire_vehicle){
|
||||||
|
|
||||||
private val viewmodel by getFragmentViewModel<PrivateHireVehicleViewModel>()
|
private val viewmodel by getFragmentViewModel<PrivateHireVehicleViewModel>()
|
||||||
override fun getViewModel(): PrivateHireVehicleViewModel = viewmodel
|
override fun getViewModel(): PrivateHireVehicleViewModel = viewmodel
|
||||||
override var model = PrivateHireVehicleObject()
|
override var model = PrivateHireVehicleObject()
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_private_hire_vehicle
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
ph_no.setTextOnChange{ model.phCarNumber = it }
|
ph_no.setTextOnChange{ model.phCarNumber = it }
|
||||||
ph_expiry.apply {
|
ph_expiry.apply {
|
||||||
setTextOnChange{ model.phCarExpiry = it }
|
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
DateDialog(this)
|
DateDialog(this){ date ->
|
||||||
|
model.phCarExpiry = date
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -43,13 +44,13 @@ class PrivateHireVehicleFragment: DataSubmissionBaseFragment<PrivateHireVehicleV
|
|||||||
|
|
||||||
override fun setFields(data: PrivateHireVehicleObject) {
|
override fun setFields(data: PrivateHireVehicleObject) {
|
||||||
super.setFields(data)
|
super.setFields(data)
|
||||||
imageView2.setPicassoImage(data.phCarImageString)
|
imageView2.setGlideImage(data.phCarImageString)
|
||||||
ph_no.setText(data.phCarNumber)
|
ph_no.setText(data.phCarNumber)
|
||||||
ph_expiry.setText(data.phCarExpiry)
|
ph_expiry.setText(data.phCarExpiry)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onImageGalleryResult(imageUri: Uri?) {
|
override fun onImageGalleryResult(imageUri: Uri?) {
|
||||||
super.onImageGalleryResult(imageUri)
|
super.onImageGalleryResult(imageUri)
|
||||||
imageView2.setPicassoImage(imageUri)
|
imageView2.setGlideImage(imageUri)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,22 +1,22 @@
|
|||||||
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
|
package h_mal.appttude.com.ui.driver.vehicleprofile
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
|
||||||
import h_mal.appttude.com.driver.Global.DateDialog
|
import h_mal.appttude.com.dialogs.DateDialog
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
import h_mal.appttude.com.base.DataSubmissionBaseFragment
|
||||||
import h_mal.appttude.com.driver.model.VehicleProfileObject
|
import h_mal.appttude.com.model.VehicleProfileObject
|
||||||
import h_mal.appttude.com.driver.viewmodels.VehicleProfileViewModel
|
import h_mal.appttude.com.viewmodels.VehicleProfileViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_vehicle_setup.*
|
import kotlinx.android.synthetic.main.fragment_vehicle_setup.*
|
||||||
|
|
||||||
|
|
||||||
class VehicleProfileFragment: DataSubmissionBaseFragment<VehicleProfileViewModel, VehicleProfileObject>(){
|
class VehicleProfileFragment: DataSubmissionBaseFragment
|
||||||
|
<VehicleProfileViewModel, VehicleProfileObject>(R.layout.fragment_vehicle_setup){
|
||||||
|
|
||||||
private val viewmodel by getFragmentViewModel<VehicleProfileViewModel>()
|
private val viewmodel by getFragmentViewModel<VehicleProfileViewModel>()
|
||||||
override fun getViewModel(): VehicleProfileViewModel = viewmodel
|
override fun getViewModel(): VehicleProfileViewModel = viewmodel
|
||||||
override var model = VehicleProfileObject()
|
override var model = VehicleProfileObject()
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_vehicle_setup
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -29,9 +29,10 @@ class VehicleProfileFragment: DataSubmissionBaseFragment<VehicleProfileViewModel
|
|||||||
address.setTextOnChange { model.keeperAddress = it }
|
address.setTextOnChange { model.keeperAddress = it }
|
||||||
postcode.setTextOnChange { model.keeperPostCode = it }
|
postcode.setTextOnChange { model.keeperPostCode = it }
|
||||||
start_date.apply {
|
start_date.apply {
|
||||||
setTextOnChange{ model.startDate = it }
|
|
||||||
setOnClickListener {
|
setOnClickListener {
|
||||||
DateDialog(this)
|
DateDialog(this){ date ->
|
||||||
|
model.startDate = date
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
seized_checkbox.setOnCheckedChangeListener { _, res -> model.isSeized = res}
|
seized_checkbox.setOnCheckedChangeListener { _, res -> model.isSeized = res}
|
||||||
@@ -1,37 +1,20 @@
|
|||||||
package h_mal.appttude.com.driver.SuperUser
|
package h_mal.appttude.com.SuperUser
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
|
||||||
import android.util.DisplayMetrics
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.ArrayAdapter
|
import android.widget.ArrayAdapter
|
||||||
import android.widget.ImageView
|
import h_mal.appttude.com.Objects.WholeObject.MappedObject
|
||||||
import android.widget.TextView
|
import h_mal.appttude.com.R
|
||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
class ApprovalListAdapter(
|
class ApprovalListAdapter(
|
||||||
val activity: Activity,
|
val activity: Activity,
|
||||||
objects: Array<MappedObject>
|
objects: Array<MappedObject?>
|
||||||
): ArrayAdapter<MappedObject?>(activity, 0, objects) {
|
): ArrayAdapter<MappedObject?>(activity, 0, objects) {
|
||||||
|
|
||||||
var mappedObject: MappedObject = objects[0]
|
var mappedObject: MappedObject? = objects[0]
|
||||||
|
|
||||||
var names: Array<String> = arrayOf(
|
var names: Array<String> = arrayOf(
|
||||||
"Driver Profile",
|
"Driver Profile",
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.SuperUser
|
package h_mal.appttude.com.SuperUser
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.Objects
|
package h_mal.appttude.com.Objects
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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.model.*
|
||||||
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 java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class ArchiveObject {
|
class ArchiveObject {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.Objects
|
package h_mal.appttude.com.Objects
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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.Objects.WholeObject.DriverProfile
|
||||||
import h_mal.appttude.com.driver.Objects.WholeObject.VehicleProfile
|
import h_mal.appttude.com.Objects.WholeObject.VehicleProfile
|
||||||
|
|
||||||
|
|
||||||
class WholeDriverObject {
|
class WholeDriverObject {
|
||||||
@@ -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.model.DriverProfileObject
|
||||||
import h_mal.appttude.com.driver.model.DriversLicenseObject
|
import h_mal.appttude.com.model.DriversLicenseObject
|
||||||
import h_mal.appttude.com.driver.model.PrivateHireObject
|
import h_mal.appttude.com.model.PrivateHireObject
|
||||||
|
|
||||||
|
|
||||||
class DriverProfile {
|
class DriverProfile {
|
||||||
@@ -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.Parcel
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import h_mal.appttude.com.driver.Objects.WholeDriverObject
|
import h_mal.appttude.com.Objects.WholeDriverObject
|
||||||
|
|
||||||
|
|
||||||
class MappedObject : Parcelable {
|
class MappedObject : Parcelable {
|
||||||
@@ -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.model.InsuranceObject
|
||||||
import h_mal.appttude.com.driver.Objects.LogbookObject
|
import h_mal.appttude.com.model.LogbookObject
|
||||||
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
|
import h_mal.appttude.com.model.PrivateHireVehicleObject
|
||||||
import h_mal.appttude.com.driver.model.MotObject
|
import h_mal.appttude.com.model.MotObject
|
||||||
import h_mal.appttude.com.driver.model.VehicleProfileObject
|
import h_mal.appttude.com.model.VehicleProfileObject
|
||||||
|
|
||||||
|
|
||||||
class VehicleProfile {
|
class VehicleProfile {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.SuperUser
|
package h_mal.appttude.com.SuperUser
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
@@ -12,10 +12,10 @@ import android.widget.LinearLayout
|
|||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.squareup.picasso.Picasso
|
import com.squareup.picasso.Picasso
|
||||||
import h_mal.appttude.com.driver.ui.driver.MainActivity
|
import h_mal.appttude.com.ui.driver.MainActivity
|
||||||
import h_mal.appttude.com.driver.Objects.UserObject
|
import h_mal.appttude.com.Objects.UserObject
|
||||||
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
|
import h_mal.appttude.com.Objects.WholeObject.MappedObject
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
|
|
||||||
|
|
||||||
class RecyclerViewAdapter constructor(var context: Context?, var objects: List<MappedObject>?) :
|
class RecyclerViewAdapter constructor(var context: Context?, var objects: List<MappedObject>?) :
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.SuperUser
|
package h_mal.appttude.com.SuperUser
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
@@ -7,8 +7,8 @@ import android.view.View
|
|||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.GridView
|
import android.widget.GridView
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
|
import h_mal.appttude.com.Objects.WholeObject.MappedObject
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
|
|
||||||
|
|
||||||
class UserMainFragment : Fragment() {
|
class UserMainFragment : Fragment() {
|
||||||
@@ -20,8 +20,8 @@ class UserMainFragment : Fragment() {
|
|||||||
// Inflate the layout for this fragment
|
// Inflate the layout for this fragment
|
||||||
val view: View = inflater.inflate(R.layout.fragment_user_main, container, false)
|
val view: View = inflater.inflate(R.layout.fragment_user_main, container, false)
|
||||||
Log.i("UserMain", "onCreateView: height = " + view.height)
|
Log.i("UserMain", "onCreateView: height = " + view.height)
|
||||||
val mappedObject: MappedObject = requireArguments().getParcelable<MappedObject>("mapped")
|
val mappedObject: MappedObject? = requireArguments().getParcelable<MappedObject>("mapped")
|
||||||
activity?.title = mappedObject.wholeDriverObject?.user_details?.profileName
|
activity?.title = mappedObject?.wholeDriverObject?.user_details?.profileName
|
||||||
|
|
||||||
val listView: GridView = view.findViewById(R.id.approvals_list)
|
val listView: GridView = view.findViewById(R.id.approvals_list)
|
||||||
listView.adapter = ApprovalListAdapter(requireActivity(), arrayOf(mappedObject))
|
listView.adapter = ApprovalListAdapter(requireActivity(), arrayOf(mappedObject))
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.SuperUser
|
package h_mal.appttude.com.SuperUser
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.DialogInterface
|
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.DatabaseError
|
||||||
import com.google.firebase.database.DatabaseReference
|
import com.google.firebase.database.DatabaseReference
|
||||||
import com.google.firebase.database.ValueEventListener
|
import com.google.firebase.database.ValueEventListener
|
||||||
import h_mal.appttude.com.driver.ui.driver.MainActivity
|
import h_mal.appttude.com.ui.driver.MainActivity
|
||||||
import h_mal.appttude.com.driver.Objects.WholeDriverObject
|
import h_mal.appttude.com.Objects.WholeDriverObject
|
||||||
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
|
import h_mal.appttude.com.Objects.WholeObject.MappedObject
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import kotlinx.android.synthetic.main.fragment_home_super_user.*
|
import kotlinx.android.synthetic.main.fragment_home_super_user.*
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -1,50 +1,18 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="h_mal.appttude.com.driver">
|
package="h_mal.appttude.com">
|
||||||
<!-- To auto-complete the email text field in the login form with the user's emails -->
|
<!-- To auto-complete the email text field in the login form with the user's emails -->
|
||||||
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
|
|
||||||
<uses-permission android:name="android.permission.READ_PROFILE" />
|
|
||||||
<uses-permission android:name="android.permission.READ_CONTACTS" />
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
||||||
<uses-permission android:name="android.permission.CAMERA" />
|
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".application.DriverApplication"
|
android:name="h_mal.appttude.com.application.DriverApplication"
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:roundIcon="@mipmap/ic_launcher_round"
|
android:roundIcon="@mipmap/ic_launcher_round"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/AppTheme">
|
android:theme="@style/AppTheme">
|
||||||
<activity android:name=".update.UpdateActivity" />
|
|
||||||
<activity
|
|
||||||
android:name=".ui.user.LoginActivity"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:theme="@style/Theme.Design.NoActionBar">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
<activity
|
|
||||||
android:name=".ui.driver.MainActivity"
|
|
||||||
android:configChanges="orientation|screenSize"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:theme="@style/AppTheme.NoActionBar" />
|
|
||||||
|
|
||||||
<provider
|
|
||||||
android:name="androidx.core.content.FileProvider"
|
|
||||||
android:authorities="h_mal.appttude.com.driver"
|
|
||||||
android:exported="false"
|
|
||||||
android:grantUriPermissions="true">
|
|
||||||
<meta-data
|
|
||||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
|
||||||
android:resource="@xml/file_paths" />
|
|
||||||
</provider>
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.Archive
|
package h_mal.appttude.com.Archive
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
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.DatabaseError
|
||||||
import com.google.firebase.database.DatabaseReference
|
import com.google.firebase.database.DatabaseReference
|
||||||
import com.google.firebase.database.ValueEventListener
|
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.R
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
class ArchiveFragment : Fragment() {
|
class ArchiveFragment : Fragment() {
|
||||||
var archive: ArchiveObject? = null
|
// var archive: ArchiveObject? = null
|
||||||
private var reference: DatabaseReference? = null
|
private var reference: DatabaseReference? = null
|
||||||
private var listView: ListView? = null
|
private var listView: ListView? = null
|
||||||
var archiveString: String? = null
|
var archiveString: String? = null
|
||||||
@@ -27,18 +26,18 @@ class ArchiveFragment : Fragment() {
|
|||||||
// )
|
// )
|
||||||
// .child(FirebaseClass.ARCHIVE_FIREBASE)
|
// .child(FirebaseClass.ARCHIVE_FIREBASE)
|
||||||
|
|
||||||
archiveString = requireArguments().getString("archive")
|
// archiveString = requireArguments().getString("archive")
|
||||||
var s: String = ""
|
// var s: String = ""
|
||||||
when (archiveString) {
|
// when (archiveString) {
|
||||||
FirebaseClass.PRIVATE_HIRE_FIREBASE -> s = "Private Hire"
|
// FirebaseClass.PRIVATE_HIRE_FIREBASE -> s = "Private Hire"
|
||||||
FirebaseClass.DRIVERS_LICENSE_FIREBASE -> s = "License"
|
// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> s = "License"
|
||||||
FirebaseClass.VEHICLE_DETAILS_FIREBASE -> s = "Vehicle"
|
// FirebaseClass.VEHICLE_DETAILS_FIREBASE -> s = "Vehicle"
|
||||||
FirebaseClass.MOT_FIREBASE -> s = "M.O.T"
|
// FirebaseClass.MOT_FIREBASE -> s = "M.O.T"
|
||||||
FirebaseClass.INSURANCE_FIREBASE -> s = "Insurance"
|
// FirebaseClass.INSURANCE_FIREBASE -> s = "Insurance"
|
||||||
FirebaseClass.LOG_BOOK_FIREBASE -> s = "Logbook"
|
// FirebaseClass.LOG_BOOK_FIREBASE -> s = "Logbook"
|
||||||
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> s = "Private Hire Vehicle"
|
// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> s = "Private Hire Vehicle"
|
||||||
}
|
// }
|
||||||
requireActivity().title = s + " Archive"
|
// requireActivity().title = s + " Archive"
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
@@ -52,12 +51,12 @@ class ArchiveFragment : Fragment() {
|
|||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
var valueEventListener: ValueEventListener = object : ValueEventListener {
|
// var valueEventListener: ValueEventListener = object : ValueEventListener {
|
||||||
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
// override fun onDataChange(dataSnapshot: DataSnapshot) {
|
||||||
archive = dataSnapshot.getValue(ArchiveObject::class.java)
|
// archive = dataSnapshot.getValue(ArchiveObject::class.java)
|
||||||
listView!!.adapter = ArchiveObjectListAdapter(archive, requireContext(), archiveString)
|
// listView!!.adapter = ArchiveObjectListAdapter(archive, requireContext(), archiveString)
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
override fun onCancelled(databaseError: DatabaseError) {}
|
// override fun onCancelled(databaseError: DatabaseError) {}
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
@@ -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<String>
|
||||||
|
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<View>(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<String,*>?){
|
||||||
|
size = map?.size ?: 0
|
||||||
|
map?.keys?.toTypedArray()?.let{
|
||||||
|
mKeys = it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
package h_mal.appttude.com.driver.application
|
package h_mal.appttude.com.application
|
||||||
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import h_mal.appttude.com.driver.data.FirebaseAuthSource
|
import h_mal.appttude.com.data.FirebaseAuthSource
|
||||||
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
|
import h_mal.appttude.com.data.FirebaseDatabaseSource
|
||||||
import h_mal.appttude.com.driver.data.FirebaseStorageSource
|
import h_mal.appttude.com.data.FirebaseStorageSource
|
||||||
import h_mal.appttude.com.driver.viewmodels.*
|
import h_mal.appttude.com.viewmodels.*
|
||||||
|
|
||||||
class ApplicationViewModelFactory(
|
class ApplicationViewModelFactory(
|
||||||
private val auth: FirebaseAuthSource,
|
private val auth: FirebaseAuthSource,
|
||||||
@@ -28,6 +28,7 @@ class ApplicationViewModelFactory(
|
|||||||
isAssignableFrom(MotViewModel::class.java) -> MotViewModel(auth, database, storage)
|
isAssignableFrom(MotViewModel::class.java) -> MotViewModel(auth, database, storage)
|
||||||
isAssignableFrom(LogbookViewModel::class.java) -> LogbookViewModel(auth, database, storage)
|
isAssignableFrom(LogbookViewModel::class.java) -> LogbookViewModel(auth, database, storage)
|
||||||
isAssignableFrom(PrivateHireVehicleViewModel::class.java) -> PrivateHireVehicleViewModel(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")
|
else -> throw IllegalArgumentException("Unknown ViewModel class")
|
||||||
} as T
|
} as T
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,10 @@
|
|||||||
package h_mal.appttude.com.driver.application
|
package h_mal.appttude.com.application
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import h_mal.appttude.com.driver.data.FirebaseAuthSource
|
import h_mal.appttude.com.data.FirebaseAuthSource
|
||||||
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
|
import h_mal.appttude.com.data.FirebaseDatabaseSource
|
||||||
import h_mal.appttude.com.driver.data.FirebaseStorageSource
|
import h_mal.appttude.com.data.FirebaseStorageSource
|
||||||
|
import h_mal.appttude.com.espresso.IdlingResourceClass
|
||||||
import org.kodein.di.Kodein
|
import org.kodein.di.Kodein
|
||||||
import org.kodein.di.KodeinAware
|
import org.kodein.di.KodeinAware
|
||||||
import org.kodein.di.android.x.androidXModule
|
import org.kodein.di.android.x.androidXModule
|
||||||
@@ -1,9 +1,8 @@
|
|||||||
package h_mal.appttude.com.driver.base
|
package h_mal.appttude.com.base
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.view.ViewGroup.LayoutParams
|
import android.view.ViewGroup.LayoutParams
|
||||||
import android.view.ViewGroup.LayoutParams.*
|
import android.view.ViewGroup.LayoutParams.*
|
||||||
import androidx.activity.viewModels
|
import androidx.activity.viewModels
|
||||||
@@ -11,13 +10,14 @@ import androidx.appcompat.app.AppCompatActivity
|
|||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.ViewModelProvider
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.application.ApplicationViewModelFactory
|
||||||
import h_mal.appttude.com.driver.application.ApplicationViewModelFactory
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.data.ViewState
|
import h_mal.appttude.com.data.ViewState
|
||||||
import h_mal.appttude.com.driver.utils.displayToast
|
import h_mal.appttude.com.espresso.IdlingResourceClass
|
||||||
import h_mal.appttude.com.driver.utils.hide
|
import h_mal.appttude.com.utils.displayToast
|
||||||
import h_mal.appttude.com.driver.utils.show
|
import h_mal.appttude.com.utils.hide
|
||||||
import h_mal.appttude.com.driver.utils.triggerAnimation
|
import h_mal.appttude.com.utils.show
|
||||||
|
import h_mal.appttude.com.utils.triggerAnimation
|
||||||
import org.kodein.di.KodeinAware
|
import org.kodein.di.KodeinAware
|
||||||
import org.kodein.di.android.kodein
|
import org.kodein.di.android.kodein
|
||||||
import org.kodein.di.generic.instance
|
import org.kodein.di.generic.instance
|
||||||
@@ -32,6 +32,7 @@ abstract class BaseActivity<V : BaseViewModel> : AppCompatActivity(), KodeinAwar
|
|||||||
|
|
||||||
override val kodein by kodein()
|
override val kodein by kodein()
|
||||||
val factory by instance<ApplicationViewModelFactory>()
|
val factory by instance<ApplicationViewModelFactory>()
|
||||||
|
private val idlingResource by instance<IdlingResourceClass>()
|
||||||
|
|
||||||
inline fun <reified VM : ViewModel> createLazyViewModel(): Lazy<VM> = viewModels { factory }
|
inline fun <reified VM : ViewModel> createLazyViewModel(): Lazy<VM> = viewModels { factory }
|
||||||
inline fun <reified VM : ViewModel> createViewModel(): VM =
|
inline fun <reified VM : ViewModel> createViewModel(): VM =
|
||||||
@@ -56,7 +57,6 @@ abstract class BaseActivity<V : BaseViewModel> : AppCompatActivity(), KodeinAwar
|
|||||||
loadingView = layoutInflater.inflate(R.layout.progress_layout, null)
|
loadingView = layoutInflater.inflate(R.layout.progress_layout, null)
|
||||||
loadingView.setOnClickListener(null)
|
loadingView.setOnClickListener(null)
|
||||||
addContentView(loadingView, LayoutParams(MATCH_PARENT, MATCH_PARENT))
|
addContentView(loadingView, LayoutParams(MATCH_PARENT, MATCH_PARENT))
|
||||||
|
|
||||||
loadingView.hide()
|
loadingView.hide()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,6 +76,7 @@ abstract class BaseActivity<V : BaseViewModel> : AppCompatActivity(), KodeinAwar
|
|||||||
open fun onStarted() {
|
open fun onStarted() {
|
||||||
loadingView.fadeIn()
|
loadingView.fadeIn()
|
||||||
loading = true
|
loading = true
|
||||||
|
IdlingResourceClass.increment()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -84,6 +85,7 @@ abstract class BaseActivity<V : BaseViewModel> : AppCompatActivity(), KodeinAwar
|
|||||||
open fun onSuccess(data: Any?) {
|
open fun onSuccess(data: Any?) {
|
||||||
loadingView.fadeOut()
|
loadingView.fadeOut()
|
||||||
loading = false
|
loading = false
|
||||||
|
IdlingResourceClass.decrement()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -93,6 +95,7 @@ abstract class BaseActivity<V : BaseViewModel> : AppCompatActivity(), KodeinAwar
|
|||||||
error?.let { displayToast(it) }
|
error?.let { displayToast(it) }
|
||||||
loadingView.fadeOut()
|
loadingView.fadeOut()
|
||||||
loading = false
|
loading = false
|
||||||
|
IdlingResourceClass.decrement()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun configureObserver() {
|
private fun configureObserver() {
|
||||||
@@ -1,30 +1,28 @@
|
|||||||
package h_mal.appttude.com.driver.base
|
package h_mal.appttude.com.base
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import androidx.annotation.LayoutRes
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
import androidx.lifecycle.Observer
|
import androidx.lifecycle.Observer
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import h_mal.appttude.com.driver.application.ApplicationViewModelFactory
|
import h_mal.appttude.com.application.ApplicationViewModelFactory
|
||||||
import h_mal.appttude.com.driver.data.ViewState
|
import h_mal.appttude.com.data.ViewState
|
||||||
import h_mal.appttude.com.driver.utils.PermissionsUtils
|
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.KodeinAware
|
||||||
import org.kodein.di.android.x.kodein
|
import org.kodein.di.android.x.kodein
|
||||||
import org.kodein.di.generic.instance
|
import org.kodein.di.generic.instance
|
||||||
|
|
||||||
const val IMAGE_SELECT_REQUEST_CODE = 401
|
const val IMAGE_SELECT_REQUEST_CODE = 401
|
||||||
abstract class BaseFragment<V : BaseViewModel> : Fragment(), KodeinAware {
|
abstract class BaseFragment<V : BaseViewModel>(@LayoutRes contentLayoutId: Int) : Fragment(contentLayoutId), KodeinAware {
|
||||||
|
|
||||||
var mActivity: BaseActivity<V>? = null
|
var mActivity: BaseActivity<V>? = null
|
||||||
abstract fun getViewModel(): V
|
abstract fun getViewModel(): V
|
||||||
abstract fun getLayoutId(): Int
|
|
||||||
|
|
||||||
private var multipleImage: Boolean = false
|
private var multipleImage: Boolean = false
|
||||||
|
|
||||||
@@ -37,12 +35,6 @@ abstract class BaseFragment<V : BaseViewModel> : Fragment(), KodeinAware {
|
|||||||
|
|
||||||
inline fun <reified VM : ViewModel> getFragmentViewModel(): Lazy<VM> = viewModels { factory }
|
inline fun <reified VM : ViewModel> getFragmentViewModel(): Lazy<VM> = viewModels { factory }
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater,
|
|
||||||
container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? = inflater.inflate(getLayoutId(), container, false)
|
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
super.onActivityCreated(savedInstanceState)
|
super.onActivityCreated(savedInstanceState)
|
||||||
@@ -100,15 +92,7 @@ abstract class BaseFragment<V : BaseViewModel> : Fragment(), KodeinAware {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun ClipData.convertToList(): List<Uri> {
|
private fun ClipData.convertToList(): List<Uri> = 0.rangeTo(itemCount).map { getItemAt(it).uri }
|
||||||
val list = mutableListOf<Uri>()
|
|
||||||
for (i in 0 until itemCount) {
|
|
||||||
val item: ClipData.Item = getItemAt(i)
|
|
||||||
val uri = item.uri
|
|
||||||
list.add(uri)
|
|
||||||
}
|
|
||||||
return list.toList()
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pair with {@link #Fragment.onRequestPermissionsResult}
|
* Pair with {@link #Fragment.onRequestPermissionsResult}
|
||||||
@@ -132,7 +116,13 @@ abstract class BaseFragment<V : BaseViewModel> : Fragment(), KodeinAware {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called on the result of image selection
|
||||||
|
*/
|
||||||
open fun onImageGalleryResult(imageUri: Uri?){ }
|
open fun onImageGalleryResult(imageUri: Uri?){ }
|
||||||
|
/**
|
||||||
|
* Called on the result of multiple image selection
|
||||||
|
*/
|
||||||
open fun onImageGalleryResult(imageUris: List<Uri>?){ }
|
open fun onImageGalleryResult(imageUris: List<Uri>?){ }
|
||||||
|
|
||||||
fun openGalleryForImage() {
|
fun openGalleryForImage() {
|
||||||
@@ -1,9 +1,9 @@
|
|||||||
package h_mal.appttude.com.driver.base
|
package h_mal.appttude.com.base
|
||||||
|
|
||||||
import androidx.lifecycle.MutableLiveData
|
import androidx.lifecycle.MutableLiveData
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import h_mal.appttude.com.driver.data.ViewState
|
import h_mal.appttude.com.data.ViewState
|
||||||
import h_mal.appttude.com.driver.utils.Event
|
import h_mal.appttude.com.utils.Event
|
||||||
|
|
||||||
abstract class BaseViewModel: ViewModel(){
|
abstract class BaseViewModel: ViewModel(){
|
||||||
open val uiState: MutableLiveData<ViewState> = MutableLiveData()
|
open val uiState: MutableLiveData<ViewState> = MutableLiveData()
|
||||||
@@ -1,16 +1,23 @@
|
|||||||
package h_mal.appttude.com.driver.base
|
package h_mal.appttude.com.base
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
|
import androidx.annotation.LayoutRes
|
||||||
import androidx.core.widget.doAfterTextChanged
|
import androidx.core.widget.doAfterTextChanged
|
||||||
import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions
|
import androidx.lifecycle.Observer
|
||||||
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEditText
|
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
|
private const val IMAGE_PERMISSION_RESULT = 402
|
||||||
abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, T: Any> : BaseFragment<BaseViewModel>(){
|
abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, T: Any>
|
||||||
|
(@LayoutRes contentLayoutId: Int) : BaseFragment<BaseViewModel>(contentLayoutId){
|
||||||
|
|
||||||
var picUri: Uri? = null
|
var picUri: Uri? = null
|
||||||
|
|
||||||
@@ -19,10 +26,17 @@ abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, T:
|
|||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
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()
|
getViewModel().getDataFromDatabase()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun onSuccess(data: Any?) {
|
override fun onSuccess(data: Any?) {
|
||||||
super.onSuccess(data)
|
super.onSuccess(data)
|
||||||
@@ -37,9 +51,7 @@ abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, T:
|
|||||||
model = data
|
model = data
|
||||||
}
|
}
|
||||||
|
|
||||||
open fun submit(){
|
open fun submit(){}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
fun openGalleryWithPermissionRequest(){
|
fun openGalleryWithPermissionRequest(){
|
||||||
if (askForPermissions(Manifest.permission.READ_EXTERNAL_STORAGE, IMAGE_PERMISSION_RESULT)) {
|
if (askForPermissions(Manifest.permission.READ_EXTERNAL_STORAGE, IMAGE_PERMISSION_RESULT)) {
|
||||||
@@ -1,23 +1,25 @@
|
|||||||
package h_mal.appttude.com.driver.base
|
package h_mal.appttude.com.base
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import androidx.lifecycle.MutableLiveData
|
||||||
import com.google.firebase.database.DatabaseReference
|
import com.google.firebase.database.DatabaseReference
|
||||||
import com.google.firebase.storage.StorageReference
|
import com.google.firebase.storage.StorageReference
|
||||||
import h_mal.appttude.com.driver.data.FirebaseCompletion
|
import h_mal.appttude.com.data.*
|
||||||
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
|
import h_mal.appttude.com.utils.Coroutines.io
|
||||||
import h_mal.appttude.com.driver.data.FirebaseStorageSource
|
import h_mal.appttude.com.utils.DateUtils.getDateTimeStamp
|
||||||
import h_mal.appttude.com.driver.utils.Coroutines.io
|
import h_mal.appttude.com.utils.getDataFromDatabaseRef
|
||||||
import h_mal.appttude.com.driver.utils.DateUtils.getDateTimeStamp
|
|
||||||
import h_mal.appttude.com.driver.utils.getDataFromDatabaseRef
|
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.coroutineScope
|
import kotlinx.coroutines.coroutineScope
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
abstract class DataSubmissionBaseViewModel<T : Any>(
|
abstract class DataSubmissionBaseViewModel<T : Any>(
|
||||||
|
auth: FirebaseAuthentication,
|
||||||
private val database: FirebaseDatabaseSource,
|
private val database: FirebaseDatabaseSource,
|
||||||
private val storage: FirebaseStorageSource?
|
private val storage: FirebaseStorageSource?
|
||||||
) : BaseViewModel() {
|
) : BaseViewModel() {
|
||||||
|
val stateLiveData = auth.userStateListener()
|
||||||
|
val uid: String = auth.getUid() ?: ""
|
||||||
|
|
||||||
abstract val databaseRef: DatabaseReference
|
abstract val databaseRef: DatabaseReference
|
||||||
abstract val storageRef: StorageReference?
|
abstract val storageRef: StorageReference?
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.data
|
package h_mal.appttude.com.data
|
||||||
|
|
||||||
sealed class DataFieldState {
|
sealed class DataFieldState {
|
||||||
object DefaultState : DataFieldState()
|
object DefaultState : DataFieldState()
|
||||||
@@ -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.DataSnapshot
|
||||||
import com.google.firebase.database.DatabaseError
|
import com.google.firebase.database.DatabaseError
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
package h_mal.appttude.com.driver.data
|
package h_mal.appttude.com.data
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.google.android.gms.tasks.Task
|
import com.google.android.gms.tasks.Task
|
||||||
import com.google.firebase.auth.*
|
import com.google.firebase.auth.*
|
||||||
|
import java.io.IOException
|
||||||
|
|
||||||
class FirebaseAuthSource: FirebaseAuthentication{
|
class FirebaseAuthSource: FirebaseAuthentication{
|
||||||
private val auth = FirebaseAuth.getInstance()
|
private val auth = FirebaseAuth.getInstance()
|
||||||
@@ -24,25 +25,32 @@ class FirebaseAuthSource: FirebaseAuthentication{
|
|||||||
override fun updateProfile(
|
override fun updateProfile(
|
||||||
name: String?,
|
name: String?,
|
||||||
profilePic: Uri?
|
profilePic: Uri?
|
||||||
): Task<Void>? {
|
): Task<Void> {
|
||||||
val profileUpdates = UserProfileChangeRequest.Builder().apply {
|
val profileUpdates = UserProfileChangeRequest.Builder().apply {
|
||||||
name?.let { setDisplayName(it) }
|
name?.let { setDisplayName(it) }
|
||||||
profilePic?.let { setPhotoUri(it) }
|
profilePic?.let { setPhotoUri(it) }
|
||||||
}.build()
|
}.build()
|
||||||
|
return getCurrentUser().updateProfile(profileUpdates)
|
||||||
return getUser()?.updateProfile(profileUpdates)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun reauthenticate(
|
override fun reauthenticate(
|
||||||
email: String,
|
email: String,
|
||||||
password: String
|
password: String
|
||||||
): Task<Void>? {
|
): Task<Void> {
|
||||||
val credential = EmailAuthProvider.getCredential(email, password)
|
val credential = EmailAuthProvider.getCredential(email, password)
|
||||||
|
return getCurrentUser().reauthenticate(credential)
|
||||||
return getUser()?.reauthenticate(credential)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateEmail(email: String): Task<Void>? = getUser()?.updateEmail(email)
|
override fun updateEmail(email: String): Task<Void> = getCurrentUser().updateEmail(email)
|
||||||
override fun updatePassword(password: String): Task<Void>? = getUser()?.updatePassword(password)
|
override fun updatePassword(password: String): Task<Void> = getCurrentUser().updatePassword(password)
|
||||||
override fun deleteProfile() = getUser()?.delete()
|
override fun deleteProfile(): Task<Void> = getCurrentUser().delete()
|
||||||
|
|
||||||
|
|
||||||
|
override fun userStateListener() : FirebaseLiveData {
|
||||||
|
return FirebaseLiveData(auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getCurrentUser(): FirebaseUser{
|
||||||
|
return getUser() ?: throw IOException("User not signed in")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.data
|
package h_mal.appttude.com.data
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.google.android.gms.tasks.Task
|
import com.google.android.gms.tasks.Task
|
||||||
@@ -15,12 +15,13 @@ interface FirebaseAuthentication{
|
|||||||
fun updateProfile(
|
fun updateProfile(
|
||||||
name: String?,
|
name: String?,
|
||||||
profilePic: Uri?
|
profilePic: Uri?
|
||||||
): Task<Void>?
|
): Task<Void>
|
||||||
fun reauthenticate(
|
fun reauthenticate(
|
||||||
email: String,
|
email: String,
|
||||||
password: String
|
password: String
|
||||||
): Task<Void>?
|
): Task<Void>
|
||||||
fun updateEmail(email: String): Task<Void>?
|
fun updateEmail(email: String): Task<Void>
|
||||||
fun updatePassword(password: String): Task<Void>?
|
fun updatePassword(password: String): Task<Void>
|
||||||
fun deleteProfile(): Task<Void>?
|
fun deleteProfile(): Task<Void>
|
||||||
|
fun userStateListener() : FirebaseLiveData
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.data
|
package h_mal.appttude.com.data
|
||||||
|
|
||||||
sealed class FirebaseCompletion{
|
sealed class FirebaseCompletion{
|
||||||
object Default: FirebaseCompletion()
|
object Default: FirebaseCompletion()
|
||||||
@@ -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.DatabaseReference
|
||||||
import com.google.firebase.database.FirebaseDatabase
|
import com.google.firebase.database.FirebaseDatabase
|
||||||
@@ -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<UserAuthState>(){
|
||||||
|
|
||||||
|
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!!))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.data
|
package h_mal.appttude.com.data
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.google.firebase.storage.FirebaseStorage
|
import com.google.firebase.storage.FirebaseStorage
|
||||||
4
app/src/main/java/h_mal/appttude/com/data/Roles.kt
Normal file
4
app/src/main/java/h_mal/appttude/com/data/Roles.kt
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
package h_mal.appttude.com.data
|
||||||
|
|
||||||
|
const val DRIVER = "driver"
|
||||||
|
const val ADMIN = "super_user"
|
||||||
@@ -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()
|
||||||
|
}
|
||||||
@@ -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 {
|
sealed class ViewState {
|
||||||
@@ -1,30 +1,34 @@
|
|||||||
package h_mal.appttude.com.driver.Global
|
package h_mal.appttude.com.dialogs
|
||||||
|
|
||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.app.DatePickerDialog
|
import android.app.DatePickerDialog
|
||||||
import android.app.DatePickerDialog.OnDateSetListener
|
import android.app.DatePickerDialog.OnDateSetListener
|
||||||
import android.content.Context
|
|
||||||
import android.icu.util.Calendar
|
import android.icu.util.Calendar
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
import android.view.View
|
||||||
import android.widget.EditText
|
import android.widget.EditText
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.utils.DateUtils
|
import h_mal.appttude.com.utils.DateUtils
|
||||||
|
|
||||||
|
|
||||||
private const val DATE_FORMAT = "dd/MM/yyyy"
|
private const val DATE_FORMAT = "dd/MM/yyyy"
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||||
class DateDialog(
|
class DateDialog(
|
||||||
private val editText: EditText
|
private val editText: EditText,
|
||||||
|
dateSelected:(String?) -> Unit
|
||||||
) : DatePickerDialog(editText.context, AlertDialog.THEME_HOLO_LIGHT) {
|
) : DatePickerDialog(editText.context, AlertDialog.THEME_HOLO_LIGHT) {
|
||||||
|
|
||||||
var dateSetListener: OnDateSetListener =
|
private val dateSetListener: OnDateSetListener =
|
||||||
OnDateSetListener { _, year, month, dayOfMonth ->
|
OnDateSetListener { _, year, month, dayOfMonth ->
|
||||||
val cal = Calendar.getInstance()
|
val cal = Calendar.getInstance()
|
||||||
cal.set(year, month + 1, dayOfMonth)
|
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 {
|
init {
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.dialogs
|
package h_mal.appttude.com.dialogs
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
@@ -10,11 +10,11 @@ object ExitDialog{
|
|||||||
fun Activity.displayExitDialog() = AlertDialog.Builder(this)
|
fun Activity.displayExitDialog() = AlertDialog.Builder(this)
|
||||||
.setTitle("Leave?")
|
.setTitle("Leave?")
|
||||||
.setMessage("Are you sure you want to exit?")
|
.setMessage("Are you sure you want to exit?")
|
||||||
.setNegativeButton(android.R.string.no, null)
|
.setNegativeButton(android.R.string.cancel, null)
|
||||||
.setPositiveButton(
|
.setPositiveButton(
|
||||||
android.R.string.yes
|
android.R.string.ok
|
||||||
) { _, _ ->
|
) { _, _ ->
|
||||||
this.finish()
|
finish()
|
||||||
exitProcess(0)
|
exitProcess(0)
|
||||||
}
|
}
|
||||||
.create()
|
.create()
|
||||||
@@ -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<String>
|
|
||||||
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<View>(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<String,*>?){
|
|
||||||
size = map?.size ?: 0
|
|
||||||
map?.keys?.toTypedArray()?.let{
|
|
||||||
mKeys = it
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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<Any>? = null
|
|
||||||
|
|
||||||
// fun addLocalString(uris: List<Uri>) {
|
|
||||||
// list = uris
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// fun addFirebaseStrings(uris: List<String>) {
|
|
||||||
// list = uris
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// private var adapter: SlidingImageViewAdapter? = null
|
|
||||||
// lateinit var viewPager: ViewPager
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// fun reinstantiateList(imageStrings: MutableList<String?>?) {
|
|
||||||
// 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) {}
|
|
||||||
// })
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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<String> = 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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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()
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.data
|
|
||||||
|
|
||||||
enum class Roles(name: String) {
|
|
||||||
Driver("driver"),
|
|
||||||
SuperUser("super_user")
|
|
||||||
}
|
|
||||||
@@ -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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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<DriverLicenseViewModel, DriversLicenseObject>() {
|
|
||||||
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -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<UpdateUserViewModel>() {
|
|
||||||
|
|
||||||
override val layoutId: Int = R.layout.update_activity
|
|
||||||
override fun getViewModel(): UpdateUserViewModel? = null
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
createViewModel<UpdateUserViewModel>()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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<UserViewModel>() {
|
|
||||||
|
|
||||||
private val userViewModel by activityViewModels<UserViewModel>()
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -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()
|
|
||||||
@@ -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")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.model
|
package h_mal.appttude.com.model
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.model
|
package h_mal.appttude.com.model
|
||||||
|
|
||||||
|
|
||||||
data class DriversLicenseObject(
|
data class DriversLicenseObject(
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.Objects
|
package h_mal.appttude.com.model
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package h_mal.appttude.com.model
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
data class LogbookObject(
|
||||||
|
var photoString: String? = null,
|
||||||
|
var v5cnumber: String? = null
|
||||||
|
)
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.model
|
package h_mal.appttude.com.model
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.model
|
package h_mal.appttude.com.model
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.Objects
|
package h_mal.appttude.com.model
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.model
|
package h_mal.appttude.com.model
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,21 +1,20 @@
|
|||||||
package h_mal.appttude.com.driver.update
|
package h_mal.appttude.com.ui.update
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.BaseFragment
|
import h_mal.appttude.com.base.BaseFragment
|
||||||
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
|
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText
|
||||||
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
import h_mal.appttude.com.utils.setEnterPressedListener
|
||||||
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
|
import h_mal.appttude.com.viewmodels.UpdateUserViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_update_email.*
|
import kotlinx.android.synthetic.main.fragment_delete_profile.*
|
||||||
|
|
||||||
|
|
||||||
class DeleteProfileFragment : BaseFragment<UpdateUserViewModel>() {
|
class DeleteProfileFragment : BaseFragment<UpdateUserViewModel>(R.layout.fragment_delete_profile) {
|
||||||
|
|
||||||
private val viewmodel: UpdateUserViewModel by activityViewModels()
|
private val viewmodel: UpdateUserViewModel by activityViewModels()
|
||||||
override fun getViewModel(): UpdateUserViewModel = viewmodel
|
override fun getViewModel(): UpdateUserViewModel = viewmodel
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_delete_profile
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -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<UpdateUserViewModel>() {
|
||||||
|
|
||||||
|
override val layoutId: Int = R.layout.update_activity
|
||||||
|
override fun getViewModel(): UpdateUserViewModel? = null
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
createViewModel<UpdateUserViewModel>()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSuccess(data: Any?) {
|
||||||
|
super.onSuccess(data)
|
||||||
|
when(data){
|
||||||
|
is FirebaseCompletion.Changed -> displayToast(data.message)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,22 +1,21 @@
|
|||||||
package h_mal.appttude.com.driver.update
|
package h_mal.appttude.com.ui.update
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.BaseFragment
|
import h_mal.appttude.com.base.BaseFragment
|
||||||
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
|
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText
|
||||||
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
|
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText
|
||||||
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
import h_mal.appttude.com.utils.setEnterPressedListener
|
||||||
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
|
import h_mal.appttude.com.viewmodels.UpdateUserViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_update_email.*
|
import kotlinx.android.synthetic.main.fragment_update_email.*
|
||||||
|
|
||||||
|
|
||||||
class UpdateEmailFragment : BaseFragment<UpdateUserViewModel>() {
|
class UpdateEmailFragment : BaseFragment<UpdateUserViewModel>(R.layout.fragment_update_email) {
|
||||||
|
|
||||||
private val viewmodel: UpdateUserViewModel by activityViewModels()
|
private val viewmodel: UpdateUserViewModel by activityViewModels()
|
||||||
override fun getViewModel(): UpdateUserViewModel = viewmodel
|
override fun getViewModel(): UpdateUserViewModel = viewmodel
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_update_email
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -1,19 +1,18 @@
|
|||||||
package h_mal.appttude.com.driver.update
|
package h_mal.appttude.com.ui.update
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.BaseFragment
|
import h_mal.appttude.com.base.BaseFragment
|
||||||
import h_mal.appttude.com.driver.utils.navigateTo
|
import h_mal.appttude.com.utils.navigateTo
|
||||||
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
|
import h_mal.appttude.com.viewmodels.UpdateUserViewModel
|
||||||
import kotlinx.android.synthetic.main.update_overview_fragment.*
|
import kotlinx.android.synthetic.main.update_overview_fragment.*
|
||||||
|
|
||||||
class UpdateOverviewFragment : BaseFragment<UpdateUserViewModel>(), View.OnClickListener {
|
class UpdateOverviewFragment : BaseFragment<UpdateUserViewModel>(R.layout.update_overview_fragment), View.OnClickListener {
|
||||||
|
|
||||||
private val vm by activityViewModels<UpdateUserViewModel>()
|
private val vm by activityViewModels<UpdateUserViewModel>()
|
||||||
override fun getViewModel(): UpdateUserViewModel = vm
|
override fun getViewModel(): UpdateUserViewModel = vm
|
||||||
override fun getLayoutId(): Int = R.layout.update_overview_fragment
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -21,6 +20,7 @@ class UpdateOverviewFragment : BaseFragment<UpdateUserViewModel>(), View.OnClick
|
|||||||
update_email_button.setOnClickListener(this)
|
update_email_button.setOnClickListener(this)
|
||||||
update_password_button.setOnClickListener(this)
|
update_password_button.setOnClickListener(this)
|
||||||
update_profile_button.setOnClickListener(this)
|
update_profile_button.setOnClickListener(this)
|
||||||
|
delete_profile.setOnClickListener(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun View.submit(){
|
private fun View.submit(){
|
||||||
@@ -1,23 +1,22 @@
|
|||||||
package h_mal.appttude.com.driver.update
|
package h_mal.appttude.com.ui.update
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.BaseFragment
|
import h_mal.appttude.com.base.BaseFragment
|
||||||
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
|
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText
|
||||||
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
|
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText
|
||||||
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
import h_mal.appttude.com.utils.setEnterPressedListener
|
||||||
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
|
import h_mal.appttude.com.viewmodels.UpdateUserViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_update_password.*
|
import kotlinx.android.synthetic.main.fragment_update_password.*
|
||||||
|
|
||||||
|
|
||||||
class UpdatePasswordFragment : BaseFragment<UpdateUserViewModel>() {
|
class UpdatePasswordFragment :
|
||||||
|
BaseFragment<UpdateUserViewModel>(R.layout.fragment_update_password) {
|
||||||
|
|
||||||
private val viewmodel: UpdateUserViewModel by activityViewModels()
|
private val viewmodel: UpdateUserViewModel by activityViewModels()
|
||||||
override fun getViewModel(): UpdateUserViewModel = viewmodel
|
override fun getViewModel(): UpdateUserViewModel = viewmodel
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_update_password
|
|
||||||
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -26,7 +25,7 @@ class UpdatePasswordFragment : BaseFragment<UpdateUserViewModel>() {
|
|||||||
email_sign_up.setOnClickListener { registerUser() }
|
email_sign_up.setOnClickListener { registerUser() }
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun registerUser(){
|
private fun registerUser() {
|
||||||
val emailString = email_update.validatePasswordEditText() ?: return
|
val emailString = email_update.validatePasswordEditText() ?: return
|
||||||
val passwordText = password_top.validatePasswordEditText() ?: return
|
val passwordText = password_top.validatePasswordEditText() ?: return
|
||||||
val newPassword = password_bottom.validateEmailEditText() ?: return
|
val newPassword = password_bottom.validateEmailEditText() ?: return
|
||||||
@@ -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.Manifest.permission.READ_EXTERNAL_STORAGE
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
@@ -7,21 +7,22 @@ import android.view.View
|
|||||||
import androidx.core.widget.doAfterTextChanged
|
import androidx.core.widget.doAfterTextChanged
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import com.google.firebase.auth.FirebaseUser
|
import com.google.firebase.auth.FirebaseUser
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.BaseFragment
|
import h_mal.appttude.com.base.BaseFragment
|
||||||
import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions
|
import h_mal.appttude.com.utils.PermissionsUtils.askForPermissions
|
||||||
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
import h_mal.appttude.com.utils.setEnterPressedListener
|
||||||
import h_mal.appttude.com.driver.utils.setPicassoImage
|
import h_mal.appttude.com.utils.setGlideImage
|
||||||
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
|
|
||||||
|
import h_mal.appttude.com.viewmodels.UpdateUserViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_update_profile.*
|
import kotlinx.android.synthetic.main.fragment_update_profile.*
|
||||||
|
|
||||||
const val TAG_CONST = "non-user"
|
const val TAG_CONST = "non-user"
|
||||||
private const val IMAGE_PERMISSION_RESULT = 402
|
private const val IMAGE_PERMISSION_RESULT = 402
|
||||||
class UpdateProfileFragment : BaseFragment<UpdateUserViewModel>() {
|
|
||||||
|
class UpdateProfileFragment : BaseFragment<UpdateUserViewModel>(R.layout.fragment_update_profile) {
|
||||||
|
|
||||||
private val viewmodel: UpdateUserViewModel by activityViewModels()
|
private val viewmodel: UpdateUserViewModel by activityViewModels()
|
||||||
override fun getViewModel(): UpdateUserViewModel = viewmodel
|
override fun getViewModel(): UpdateUserViewModel = viewmodel
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_update_profile
|
|
||||||
|
|
||||||
private var imageChangeListener: Boolean = false
|
private var imageChangeListener: Boolean = false
|
||||||
private var nameChangeListener: Boolean = false
|
private var nameChangeListener: Boolean = false
|
||||||
@@ -75,7 +76,7 @@ class UpdateProfileFragment : BaseFragment<UpdateUserViewModel>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun setFields(firebaseUser: FirebaseUser) {
|
private fun setFields(firebaseUser: FirebaseUser) {
|
||||||
profile_img.setPicassoImage(firebaseUser.photoUrl)
|
profile_img.setGlideImage(firebaseUser.photoUrl)
|
||||||
update_name.apply {
|
update_name.apply {
|
||||||
setText(firebaseUser.displayName)
|
setText(firebaseUser.displayName)
|
||||||
tag = TAG_CONST
|
tag = TAG_CONST
|
||||||
@@ -85,7 +86,7 @@ class UpdateProfileFragment : BaseFragment<UpdateUserViewModel>() {
|
|||||||
override fun onImageGalleryResult(imageUri: Uri?) {
|
override fun onImageGalleryResult(imageUri: Uri?) {
|
||||||
super.onImageGalleryResult(imageUri)
|
super.onImageGalleryResult(imageUri)
|
||||||
this.imageUri = imageUri
|
this.imageUri = imageUri
|
||||||
profile_img.setPicassoImage(imageUri)
|
profile_img.setGlideImage(imageUri)
|
||||||
imageChangeListener = true
|
imageChangeListener = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1,21 +1,19 @@
|
|||||||
package h_mal.appttude.com.driver.user
|
package h_mal.appttude.com.ui.user
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.BaseFragment
|
import h_mal.appttude.com.base.BaseFragment
|
||||||
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
|
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText
|
||||||
import h_mal.appttude.com.driver.viewmodels.UserViewModel
|
import h_mal.appttude.com.viewmodels.UserViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_forgot_password.*
|
import kotlinx.android.synthetic.main.fragment_forgot_password.*
|
||||||
|
|
||||||
|
|
||||||
class ForgotPasswordFragment : BaseFragment<UserViewModel>() {
|
class ForgotPasswordFragment : BaseFragment<UserViewModel>(R.layout.fragment_forgot_password) {
|
||||||
|
|
||||||
private val userViewModel: UserViewModel by activityViewModels()
|
private val userViewModel: UserViewModel by activityViewModels()
|
||||||
|
|
||||||
override fun getViewModel(): UserViewModel = userViewModel
|
override fun getViewModel(): UserViewModel = userViewModel
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_forgot_password
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -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.content.Intent
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import com.google.firebase.auth.AuthResult
|
import com.google.firebase.auth.AuthResult
|
||||||
import com.google.firebase.auth.FirebaseUser
|
import com.google.firebase.auth.FirebaseUser
|
||||||
import h_mal.appttude.com.driver.ui.driver.MainActivity
|
import h_mal.appttude.com.ui.driver.MainActivity
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.BaseActivity
|
import h_mal.appttude.com.base.BaseActivity
|
||||||
import h_mal.appttude.com.driver.viewmodels.UserViewModel
|
import h_mal.appttude.com.viewmodels.UserViewModel
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -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.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.BaseFragment
|
import h_mal.appttude.com.base.BaseFragment
|
||||||
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
|
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText
|
||||||
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
|
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText
|
||||||
import h_mal.appttude.com.driver.utils.navigateTo
|
import h_mal.appttude.com.utils.navigateTo
|
||||||
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
import h_mal.appttude.com.utils.setEnterPressedListener
|
||||||
import h_mal.appttude.com.driver.viewmodels.UserViewModel
|
import h_mal.appttude.com.viewmodels.UserViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_login.*
|
import kotlinx.android.synthetic.main.fragment_login.*
|
||||||
|
|
||||||
class LoginFragment : BaseFragment<UserViewModel>() {
|
class LoginFragment : BaseFragment<UserViewModel>(R.layout.fragment_login) {
|
||||||
|
|
||||||
private val userViewModel: UserViewModel by activityViewModels()
|
private val userViewModel: UserViewModel by activityViewModels()
|
||||||
override fun getViewModel(): UserViewModel = userViewModel
|
override fun getViewModel(): UserViewModel = userViewModel
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_login
|
|
||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
@@ -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.os.Bundle
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.R
|
||||||
import h_mal.appttude.com.driver.base.BaseFragment
|
import h_mal.appttude.com.base.BaseFragment
|
||||||
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
|
import h_mal.appttude.com.utils.TextValidationUtils.validateEmailEditText
|
||||||
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
|
import h_mal.appttude.com.utils.TextValidationUtils.validatePasswordEditText
|
||||||
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
import h_mal.appttude.com.utils.setEnterPressedListener
|
||||||
import h_mal.appttude.com.driver.viewmodels.UserViewModel
|
import h_mal.appttude.com.viewmodels.UserViewModel
|
||||||
import kotlinx.android.synthetic.main.fragment_register.*
|
import kotlinx.android.synthetic.main.fragment_register.*
|
||||||
|
|
||||||
class RegisterFragment : BaseFragment<UserViewModel>() {
|
class RegisterFragment : BaseFragment<UserViewModel>(R.layout.fragment_register) {
|
||||||
|
|
||||||
override fun getLayoutId(): Int = R.layout.fragment_register
|
|
||||||
override fun getViewModel(): UserViewModel {
|
override fun getViewModel(): UserViewModel {
|
||||||
val userViewModel: UserViewModel by activityViewModels()
|
val userViewModel: UserViewModel by activityViewModels()
|
||||||
return userViewModel
|
return userViewModel
|
||||||
@@ -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<UserViewModel>(R.layout.fragment_splash_screen) {
|
||||||
|
|
||||||
|
private val userViewModel by activityViewModels<UserViewModel>()
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.utils
|
package h_mal.appttude.com.utils
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package h_mal.appttude.com.driver.utils
|
package h_mal.appttude.com.utils
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.animation.Animation
|
import android.view.animation.Animation
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user