mirror of
https://github.com/hmalik144/Driver.git
synced 2026-03-17 23:16:00 +00:00
Kotlin migration Successful
This commit is contained in:
@@ -40,28 +40,52 @@ android {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
implementation 'androidx.appcompat:appcompat:1.0.0'
|
implementation "androidx.appcompat:appcompat:1.0.0"
|
||||||
implementation 'com.google.android.material:material:1.0.0'
|
implementation "com.google.android.material:material:1.0.0"
|
||||||
implementation 'androidx.cardview:cardview:1.0.0'
|
implementation "androidx.cardview:cardview:1.0.0"
|
||||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
implementation "androidx.legacy:legacy-support-v4:1.0.0"
|
||||||
implementation 'androidx.exifinterface:exifinterface:1.0.0'
|
implementation "androidx.exifinterface:exifinterface:1.0.0"
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
implementation "androidx.constraintlayout:constraintlayout:1.1.3"
|
||||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
implementation "androidx.fragment:fragment-ktx:1.2.5"
|
||||||
|
implementation "androidx.activity:activity-ktx:1.2.0"
|
||||||
|
implementation "androidx.recyclerview:recyclerview:1.1.0"
|
||||||
|
implementation "androidx.navigation:navigation-fragment-ktx:2.3.3"
|
||||||
|
implementation "androidx.navigation:navigation-ui-ktx:2.3.3"
|
||||||
|
implementation "androidx.drawerlayout:drawerlayout:1.1.1"
|
||||||
|
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
|
||||||
|
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0"
|
||||||
|
implementation 'androidx.viewpager:viewpager:1.0.0'
|
||||||
|
testImplementation "junit:junit:4.12"
|
||||||
|
androidTestImplementation "androidx.test.ext:junit:1.1.1"
|
||||||
|
androidTestImplementation "androidx.test.espresso:espresso-core:3.1.0"
|
||||||
|
androidTestImplementation "androidx.test:rules:1.1.1"
|
||||||
|
|
||||||
|
implementation "androidx.legacy:legacy-support-v4:1.0.0"
|
||||||
// Google play services
|
// Google play services
|
||||||
implementation 'com.google.android.gms:play-services-auth:15.0.1'
|
implementation "com.google.android.gms:play-services-auth:15.0.1"
|
||||||
// Google firebase
|
// Google firebase
|
||||||
implementation 'com.google.firebase:firebase-core:16.0.1'
|
def firebaseVer = "16.0.1"
|
||||||
implementation 'com.google.firebase:firebase-auth:16.0.1'
|
implementation "com.google.firebase:firebase-core:$firebaseVer"
|
||||||
implementation 'com.google.firebase:firebase-storage:16.0.1'
|
implementation "com.google.firebase:firebase-auth:$firebaseVer"
|
||||||
implementation 'com.google.firebase:firebase-database:16.0.1'
|
implementation "com.google.firebase:firebase-storage:$firebaseVer"
|
||||||
|
implementation "com.google.firebase:firebase-database:$firebaseVer"
|
||||||
// Photoviewer
|
// Photoviewer
|
||||||
implementation 'com.github.chrisbanes:PhotoView:2.1.0'
|
implementation "com.github.chrisbanes:PhotoView:2.1.0"
|
||||||
// Picasso photo loader
|
/* Picasso photo loader */
|
||||||
implementation 'com.squareup.picasso:picasso:2.71828'
|
implementation "com.squareup.picasso:picasso:2.71828"
|
||||||
// Gson
|
/* Gson */
|
||||||
implementation 'com.google.code.gson:gson:2.3.1'
|
implementation "com.google.code.gson:gson:2.3.1"
|
||||||
testImplementation 'junit:junit:4.12'
|
/* coroutines support for firebase operations */
|
||||||
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.1.1"
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
|
|
||||||
androidTestImplementation 'androidx.test:rules:1.1.1'
|
// Circle Image View
|
||||||
|
implementation "com.mikhaellopez:circularimageview:4.2.0"
|
||||||
|
|
||||||
|
//Kodein Dependency Injection
|
||||||
|
def kodein_version = "6.2.1"
|
||||||
|
implementation "org.kodein.di:kodein-di-generic-jvm:$kodein_version"
|
||||||
|
implementation "org.kodein.di:kodein-di-framework-android-x:$kodein_version"
|
||||||
|
|
||||||
|
/* Image Carousal */
|
||||||
|
implementation 'io.github.vejei.carouselview:carouselview:1.0.0-alpha'
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
app/release/app-release.apk
Normal file
BIN
app/release/app-release.apk
Normal file
Binary file not shown.
BIN
app/release/choice_cars.apk
Normal file
BIN
app/release/choice_cars.apk
Normal file
Binary file not shown.
BIN
app/release/choice_cars_1.3.apk
Normal file
BIN
app/release/choice_cars_1.3.apk
Normal file
Binary file not shown.
1
app/release/output.json
Normal file
1
app/release/output.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":6,"versionName":"1.6","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
|
||||||
BIN
app/release/release/app.aab
Normal file
BIN
app/release/release/app.aab
Normal file
Binary file not shown.
@@ -0,0 +1,53 @@
|
|||||||
|
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.HomeFragment;
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,198 @@
|
|||||||
|
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 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));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,146 @@
|
|||||||
|
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 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));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
<?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.driver">
|
||||||
|
|
||||||
<!-- 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.GET_ACCOUNTS" />
|
||||||
<uses-permission android:name="android.permission.READ_PROFILE" />
|
<uses-permission android:name="android.permission.READ_PROFILE" />
|
||||||
@@ -12,12 +11,14 @@
|
|||||||
<uses-permission android:name="android.permission.CAMERA" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
|
android:name=".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
|
<activity
|
||||||
android:name=".user.LoginActivity"
|
android:name=".user.LoginActivity"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
@@ -25,6 +26,7 @@
|
|||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
@@ -32,12 +34,7 @@
|
|||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:configChanges="orientation|screenSize"
|
android:configChanges="orientation|screenSize"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:theme="@style/AppTheme.NoActionBar">
|
android:theme="@style/AppTheme.NoActionBar" />
|
||||||
|
|
||||||
</activity>
|
|
||||||
<activity android:name=".user.RegisterActivity">
|
|
||||||
|
|
||||||
</activity>
|
|
||||||
|
|
||||||
<provider
|
<provider
|
||||||
android:name="androidx.core.content.FileProvider"
|
android:name="androidx.core.content.FileProvider"
|
||||||
@@ -48,8 +45,6 @@
|
|||||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||||
android:resource="@xml/file_paths" />
|
android:resource="@xml/file_paths" />
|
||||||
</provider>
|
</provider>
|
||||||
|
|
||||||
<activity android:name=".user.forgotPasswordActivity"></activity>
|
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
package h_mal.appttude.com.driver.Archive
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.ListView
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import com.google.firebase.database.DataSnapshot
|
||||||
|
import com.google.firebase.database.DatabaseError
|
||||||
|
import com.google.firebase.database.DatabaseReference
|
||||||
|
import com.google.firebase.database.ValueEventListener
|
||||||
|
import h_mal.appttude.com.driver.Global.FirebaseClass
|
||||||
|
import h_mal.appttude.com.driver.Objects.ArchiveObject
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
|
||||||
|
class ArchiveFragment : Fragment() {
|
||||||
|
var archive: ArchiveObject? = null
|
||||||
|
private var reference: DatabaseReference? = null
|
||||||
|
private var listView: ListView? = null
|
||||||
|
var archiveString: String? = null
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
// reference =
|
||||||
|
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
||||||
|
// requireArguments().getString("user_id")
|
||||||
|
// )
|
||||||
|
// .child(FirebaseClass.ARCHIVE_FIREBASE)
|
||||||
|
|
||||||
|
archiveString = requireArguments().getString("archive")
|
||||||
|
var s: String = ""
|
||||||
|
when (archiveString) {
|
||||||
|
FirebaseClass.PRIVATE_HIRE_FIREBASE -> s = "Private Hire"
|
||||||
|
FirebaseClass.DRIVERS_LICENSE_FIREBASE -> s = "License"
|
||||||
|
FirebaseClass.VEHICLE_DETAILS_FIREBASE -> s = "Vehicle"
|
||||||
|
FirebaseClass.MOT_FIREBASE -> s = "M.O.T"
|
||||||
|
FirebaseClass.INSURANCE_FIREBASE -> s = "Insurance"
|
||||||
|
FirebaseClass.LOG_BOOK_FIREBASE -> s = "Logbook"
|
||||||
|
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> s = "Private Hire Vehicle"
|
||||||
|
}
|
||||||
|
requireActivity().title = s + " Archive"
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreateView(
|
||||||
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
|
savedInstanceState: Bundle?
|
||||||
|
): View? {
|
||||||
|
// Inflate the layout for this fragment
|
||||||
|
val view: View = inflater.inflate(R.layout.fragment_archive, container, false)
|
||||||
|
listView = view.findViewById(R.id.archive_listview)
|
||||||
|
// reference!!.addListenerForSingleValueEvent(valueEventListener)
|
||||||
|
return view
|
||||||
|
}
|
||||||
|
|
||||||
|
var valueEventListener: ValueEventListener = object : ValueEventListener {
|
||||||
|
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
||||||
|
archive = dataSnapshot.getValue(ArchiveObject::class.java)
|
||||||
|
listView!!.adapter = ArchiveObjectListAdapter(archive, requireContext(), archiveString)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCancelled(databaseError: DatabaseError) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
package h_mal.appttude.com.driver.Archive
|
package h_mal.appttude.com.driver.Archive
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
@@ -13,8 +12,16 @@ import com.squareup.picasso.Picasso
|
|||||||
import h_mal.appttude.com.driver.Global.FirebaseClass
|
import h_mal.appttude.com.driver.Global.FirebaseClass
|
||||||
import h_mal.appttude.com.driver.Global.ImageSwiperClass
|
import h_mal.appttude.com.driver.Global.ImageSwiperClass
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
import h_mal.appttude.com.driver.MainActivity
|
||||||
import h_mal.appttude.com.driver.Objects.*
|
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.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
|
import java.text.ParseException
|
||||||
|
|
||||||
class ArchiveObjectListAdapter(
|
class ArchiveObjectListAdapter(
|
||||||
@@ -94,7 +101,6 @@ class ArchiveObjectListAdapter(
|
|||||||
fieldTwoText.text = driversLicenseObject.licenseNumber
|
fieldTwoText.text = driversLicenseObject.licenseNumber
|
||||||
}
|
}
|
||||||
FirebaseClass.MOT_FIREBASE -> {
|
FirebaseClass.MOT_FIREBASE -> {
|
||||||
Log.i(TAG, "getView: MOT OBJECT")
|
|
||||||
expiryHolder.visibility = View.VISIBLE
|
expiryHolder.visibility = View.VISIBLE
|
||||||
fieldTwo.visibility = View.GONE
|
fieldTwo.visibility = View.GONE
|
||||||
val motObject: MotObject = getItem(position) as MotObject
|
val motObject: MotObject = getItem(position) as MotObject
|
||||||
@@ -141,7 +147,7 @@ class ArchiveObjectListAdapter(
|
|||||||
val expiryText: TextView = listItemView.findViewById(R.id.exp_text)
|
val expiryText: TextView = listItemView.findViewById(R.id.exp_text)
|
||||||
val fieldTwoText: TextView = listItemView.findViewById(R.id.archive_insurer)
|
val fieldTwoText: TextView = listItemView.findViewById(R.id.archive_insurer)
|
||||||
val insuranceObject: InsuranceObject = getItem(position) as InsuranceObject
|
val insuranceObject: InsuranceObject = getItem(position) as InsuranceObject
|
||||||
swiperClass.reinstantiateList(insuranceObject.photoStrings)
|
// swiperClass.reinstantiateList(insuranceObject.photoStrings)
|
||||||
expiryText.text = insuranceObject.expiryDate
|
expiryText.text = insuranceObject.expiryDate
|
||||||
fieldTwoText.text = insuranceObject.insurerName
|
fieldTwoText.text = insuranceObject.insurerName
|
||||||
} else if ((archiveString == FirebaseClass.VEHICLE_DETAILS_FIREBASE)) {
|
} else if ((archiveString == FirebaseClass.VEHICLE_DETAILS_FIREBASE)) {
|
||||||
@@ -155,7 +161,7 @@ class ArchiveObjectListAdapter(
|
|||||||
val keeperAddress: TextView = listItemView.findViewById(R.id.keeper_address)
|
val keeperAddress: TextView = listItemView.findViewById(R.id.keeper_address)
|
||||||
val carText: TextView = listItemView.findViewById(R.id.car_text_arch)
|
val carText: TextView = listItemView.findViewById(R.id.car_text_arch)
|
||||||
val carColour: TextView = listItemView.findViewById(R.id.car_colour)
|
val carColour: TextView = listItemView.findViewById(R.id.car_colour)
|
||||||
val carSeized: TextView = listItemView.findViewById(R.id.seized)
|
val carSeized: TextView = listItemView.findViewById(R.id.seized_checkbox)
|
||||||
val startDate: TextView = listItemView.findViewById(R.id.first_date)
|
val startDate: TextView = listItemView.findViewById(R.id.first_date)
|
||||||
val vehicleProfileObject: VehicleProfileObject =
|
val vehicleProfileObject: VehicleProfileObject =
|
||||||
getItem(position) as VehicleProfileObject
|
getItem(position) as VehicleProfileObject
|
||||||
@@ -180,7 +186,7 @@ class ArchiveObjectListAdapter(
|
|||||||
private fun dateString(position: Int) {
|
private fun dateString(position: Int) {
|
||||||
var success: Boolean = true
|
var success: Boolean = true
|
||||||
try {
|
try {
|
||||||
dateArchivedText!!.text = MainActivity.setAsDateTime(mKeys.get(position))
|
dateArchivedText!!.text = mKeys[position].convertDateStringDatePattern("yyyyMMdd_HHmmss", "dd/MM/yyyy")
|
||||||
} catch (e: ParseException) {
|
} catch (e: ParseException) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
success = false
|
success = false
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package h_mal.appttude.com.driver
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import android.widget.EditText
|
||||||
|
import android.widget.ImageView
|
||||||
|
import androidx.core.widget.doAfterTextChanged
|
||||||
|
import h_mal.appttude.com.driver.data.DataFieldState
|
||||||
|
import h_mal.appttude.com.driver.utils.setPicassoImage
|
||||||
|
|
||||||
|
interface DataFieldsInterface {
|
||||||
|
|
||||||
|
fun EditText.setFieldFromDataFetch(data: String?) = apply {
|
||||||
|
setText(data)
|
||||||
|
tag = DataFieldState.NonUserSateUpdated
|
||||||
|
}
|
||||||
|
|
||||||
|
fun EditText.applyChangeListener() = doAfterTextChanged {
|
||||||
|
if (tag == DataFieldState.NonUserSateUpdated) {
|
||||||
|
tag = DataFieldState.DefaultState
|
||||||
|
return@doAfterTextChanged
|
||||||
|
}
|
||||||
|
tag = DataFieldState.UserUpdateState
|
||||||
|
}
|
||||||
|
|
||||||
|
fun ImageView.setFieldFromFetchData(data: String?)= apply {
|
||||||
|
setPicassoImage(data)
|
||||||
|
tag = DataFieldState.NonUserSateUpdated
|
||||||
|
}
|
||||||
|
|
||||||
|
fun EditText.getTextAfterFieldValidation(): String? =
|
||||||
|
takeIf { it.tag is DataFieldState.UserUpdateState }?.let { it.text?.toString() }
|
||||||
|
|
||||||
|
fun ImageView.getTextAfterFieldValidation(imageUri: Uri?): Uri? =
|
||||||
|
takeIf { it.tag is DataFieldState.UserUpdateState }?.let { imageUri }
|
||||||
|
}
|
||||||
@@ -1,241 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Driver
|
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.provider.MediaStore
|
|
||||||
import android.text.TextUtils
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.*
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.database.DataSnapshot
|
|
||||||
import com.google.firebase.database.DatabaseError
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import com.google.firebase.database.ValueEventListener
|
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import h_mal.appttude.com.driver.Global.*
|
|
||||||
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.DriversLicenseObject
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
import kotlinx.android.synthetic.main.fragment_driver_license.*
|
|
||||||
|
|
||||||
class DriverLicenseFragment : Fragment() {
|
|
||||||
private val TAG: String = this.javaClass.simpleName
|
|
||||||
private var imageView: ImageView? = null
|
|
||||||
var licenseNo: EditText? = null
|
|
||||||
var expiry: EditText? = null
|
|
||||||
var filePath: Uri? = null
|
|
||||||
var picUri: Uri? = null
|
|
||||||
var li_numberString: String? = null
|
|
||||||
var li_exprString: String? = null
|
|
||||||
var reference: DatabaseReference? = null
|
|
||||||
var driversLicenseObject: DriversLicenseObject? = null
|
|
||||||
var uploadNew: Boolean? = null
|
|
||||||
var UID: String? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
uploadNew = false
|
|
||||||
if (arguments != null) {
|
|
||||||
Log.i(TAG, "onCreate: args = args exist")
|
|
||||||
if (arguments!!.containsKey("user_id")) {
|
|
||||||
UID = arguments!!.getString("user_id")
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
|
|
||||||
uploadNew = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
reference =
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
|
||||||
(UID)!!
|
|
||||||
)
|
|
||||||
.child(FirebaseClass.DRIVER_FIREBASE)
|
|
||||||
.child(FirebaseClass.DRIVERS_LICENSE_FIREBASE)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_driver_license, container, false)
|
|
||||||
imageView = view.findViewById(R.id.driversli_img)
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
reference!!.addListenerForSingleValueEvent(valueEventListener)
|
|
||||||
val uploadLic: TextView = view.findViewById(R.id.upload_lic)
|
|
||||||
licenseNo = view.findViewById(R.id.lic_no)
|
|
||||||
lic_expiry.setOnClickListener {
|
|
||||||
val dateDialog = DateDialog((context)!!)
|
|
||||||
dateDialog.init(lic_expiry)
|
|
||||||
}
|
|
||||||
val submit: Button = view.findViewById(R.id.submit)
|
|
||||||
submit.setOnClickListener(submitOnClickListener)
|
|
||||||
uploadLic.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
|
|
||||||
imageSelectorDialog.setImageName("drivers_license")
|
|
||||||
imageSelectorDialog.show()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
var submitOnClickListener: View.OnClickListener = View.OnClickListener {
|
|
||||||
li_numberString = licenseNo!!.text.toString().trim { it <= ' ' }
|
|
||||||
li_exprString = lic_expiry!!.text.toString().trim { it <= ' ' }
|
|
||||||
if (!TextUtils.isEmpty(li_numberString) &&
|
|
||||||
!TextUtils.isEmpty(li_exprString)
|
|
||||||
) {
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
if (filePath == null && picUri == null) {
|
|
||||||
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
} else {
|
|
||||||
if (filePath != null) {
|
|
||||||
Log.i(TAG, "onClick: new Image uploaded")
|
|
||||||
FirebaseClass(context, filePath, object : FirebaseClass.Response {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
Log.i(TAG, "processFinish: ")
|
|
||||||
if (output != null) {
|
|
||||||
picUri = output
|
|
||||||
publishObject()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
getString(R.string.failed_upload),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).uploadImage(
|
|
||||||
FirebaseClass.DRIVERS_LICENSE_FIREBASE,
|
|
||||||
FirebaseClass.DRIVERS_LICENSE_FIREBASE + MainActivity.dateStamp
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
Log.i(TAG, "onClick: pushing with same image")
|
|
||||||
publishObject()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (TextUtils.isEmpty(li_numberString)) {
|
|
||||||
licenseNo!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(li_exprString)) {
|
|
||||||
lic_expiry!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (picUri == null && filePath == null) {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
getString(R.string.image_required),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var valueEventListener: ValueEventListener = object : ValueEventListener {
|
|
||||||
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
try {
|
|
||||||
driversLicenseObject = dataSnapshot.getValue(
|
|
||||||
DriversLicenseObject::class.java
|
|
||||||
)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e(TAG, "onDataChange: ", e)
|
|
||||||
} finally {
|
|
||||||
if (driversLicenseObject != null) {
|
|
||||||
picUri = Uri.parse(driversLicenseObject!!.licenseImageString)
|
|
||||||
li_numberString = driversLicenseObject!!.licenseNumber
|
|
||||||
li_exprString = driversLicenseObject!!.licenseExpiry
|
|
||||||
if (!uploadNew!!) {
|
|
||||||
licenseNo!!.setText(li_numberString)
|
|
||||||
lic_expiry!!.setText(li_exprString)
|
|
||||||
Picasso.get()
|
|
||||||
.load(picUri)
|
|
||||||
.into(MainActivity.loadImage(imageView))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
getString(R.string.failed_retrieve),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCancelled(databaseError: DatabaseError) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
Toast.makeText(context, databaseError.message, Toast.LENGTH_SHORT).show()
|
|
||||||
Log.e(TAG, "onCancelled: " + databaseError.message)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun publishObject() {
|
|
||||||
if ((uploadNew)!!) {
|
|
||||||
MainActivity.archiveClass!!.archiveRecord(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.DRIVERS_LICENSE_FIREBASE,
|
|
||||||
driversLicenseObject
|
|
||||||
)
|
|
||||||
}
|
|
||||||
val driversLicenseObjectNew: DriversLicenseObject =
|
|
||||||
DriversLicenseObject(picUri.toString(), li_numberString, li_exprString)
|
|
||||||
reference!!.setValue(driversLicenseObjectNew)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
Log.i(TAG, "onComplete: publish = " + task.isSuccessful)
|
|
||||||
MainActivity.approvalsClass!!.setStatusCode(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.DRIVERS_LICENSE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
|
|
||||||
FirebaseClass.APPROVAL_PENDING
|
|
||||||
)
|
|
||||||
MainActivity.fragmentManager!!.popBackStack()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(context, R.string.unsuccessful, Toast.LENGTH_SHORT)
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onRequestPermissionsResult(
|
|
||||||
requestCode: Int,
|
|
||||||
permissions: Array<String>,
|
|
||||||
grantResults: IntArray
|
|
||||||
) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
||||||
if (requestCode == ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE) {
|
|
||||||
if (grantResults.get(0) == PackageManager.PERMISSION_GRANTED) {
|
|
||||||
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
|
|
||||||
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
|
|
||||||
startActivityForResult(cameraIntent, ImageSelectorDialog.CAMERA_REQUEST)
|
|
||||||
} else {
|
|
||||||
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
|
||||||
ImageSelectorResults().Results(
|
|
||||||
activity, requestCode, resultCode, data,
|
|
||||||
filePath, imageView, object : FilepathResponse {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
filePath = output
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,110 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Driver
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import com.google.firebase.database.DataSnapshot
|
|
||||||
import com.google.firebase.database.DatabaseError
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import com.google.firebase.database.ValueEventListener
|
|
||||||
import h_mal.appttude.com.driver.Global.ExecuteFragment
|
|
||||||
import h_mal.appttude.com.driver.Global.FirebaseClass
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.ApprovalsObject
|
|
||||||
import h_mal.appttude.com.driver.Objects.WholeDriverObject
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
import kotlinx.android.synthetic.main.fragment_driver_overall.*
|
|
||||||
|
|
||||||
class DriverOverallFragment : Fragment() {
|
|
||||||
|
|
||||||
var reference: DatabaseReference? = null
|
|
||||||
var driver_profObject: WholeDriverObject? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
reference =
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
|
||||||
MainActivity.auth!!.currentUser!!.uid
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_driver_overall, container, false)
|
|
||||||
ph_button_exp.visibility = View.GONE
|
|
||||||
dl_button_exp.visibility = View.GONE
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
reference!!.addListenerForSingleValueEvent(valueEventListener)
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
var valueEventListener: ValueEventListener = object : ValueEventListener {
|
|
||||||
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
|
||||||
driver_profObject = dataSnapshot.getValue(WholeDriverObject::class.java)
|
|
||||||
if (driver_profObject!!.approvalsObject != null) {
|
|
||||||
val approvalsObject: ApprovalsObject? = driver_profObject!!.approvalsObject
|
|
||||||
approval_dp.setImageResource(
|
|
||||||
MainActivity.approvalsClass!!.setImageResource(
|
|
||||||
approvalsObject!!.driver_details_approval
|
|
||||||
)
|
|
||||||
)
|
|
||||||
approval_dp!!.setImageResource(
|
|
||||||
MainActivity.approvalsClass!!.setImageResource(
|
|
||||||
approvalsObject.private_hire_approval
|
|
||||||
)
|
|
||||||
)
|
|
||||||
approval_dl!!.setImageResource(
|
|
||||||
MainActivity.approvalsClass!!.setImageResource(
|
|
||||||
approvalsObject.driver_license_approval
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
if (driver_profObject!!.driver_profile != null) {
|
|
||||||
if (driver_profObject!!.driver_profile?.private_hire != null) {
|
|
||||||
ph_button_exp!!.visibility = View.VISIBLE
|
|
||||||
ph_button_exp!!.text = "Expiry: " + driver_profObject!!.driver_profile?.private_hire!!.phExpiry
|
|
||||||
}
|
|
||||||
if (driver_profObject!!.driver_profile!!.driver_license != null) {
|
|
||||||
dl_button_exp!!.visibility = View.VISIBLE
|
|
||||||
dl_button_exp!!.text = "Expiry: " + driver_profObject!!.driver_profile!!.driver_license!!.licenseExpiry
|
|
||||||
}
|
|
||||||
}
|
|
||||||
driver_prof.setOnClickListener {
|
|
||||||
ExecuteFragment.executeFragment(
|
|
||||||
DriverProfileFragment()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
private_hire.setOnClickListener {
|
|
||||||
if (driver_profObject!!.driver_profile == null) {
|
|
||||||
ExecuteFragment.executeFragment(PrivateHireLicenseFragment())
|
|
||||||
} else {
|
|
||||||
MainActivity.archiveClass!!.openDialogArchive(
|
|
||||||
context,
|
|
||||||
driver_profObject!!.driver_profile?.private_hire,
|
|
||||||
PrivateHireLicenseFragment()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
drivers_license!!.setOnClickListener {
|
|
||||||
if (driver_profObject!!.driver_profile == null) {
|
|
||||||
ExecuteFragment.executeFragment(DriverLicenseFragment())
|
|
||||||
} else {
|
|
||||||
MainActivity.archiveClass!!.openDialogArchive(
|
|
||||||
context,
|
|
||||||
driver_profObject!!.driver_profile?.driver_license,
|
|
||||||
DriverLicenseFragment()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCancelled(databaseError: DatabaseError) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,263 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Driver
|
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.text.TextUtils
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.*
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.OnFailureListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.auth.UserProfileChangeRequest
|
|
||||||
import com.google.firebase.database.DataSnapshot
|
|
||||||
import com.google.firebase.database.DatabaseError
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import com.google.firebase.database.ValueEventListener
|
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import h_mal.appttude.com.driver.Global.DateDialog
|
|
||||||
import h_mal.appttude.com.driver.Global.FirebaseClass
|
|
||||||
import h_mal.appttude.com.driver.Global.ImageSelectorDialog
|
|
||||||
import h_mal.appttude.com.driver.Global.ImageSelectorResults
|
|
||||||
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.DriverProfileObject
|
|
||||||
import h_mal.appttude.com.driver.Objects.UserObject
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
|
|
||||||
class DriverProfileFragment : Fragment() {
|
|
||||||
private val TAG: String = this.javaClass.simpleName
|
|
||||||
var driverPic: ImageView? = null
|
|
||||||
var addPic: TextView? = null
|
|
||||||
var forenames: EditText? = null
|
|
||||||
var address: EditText? = null
|
|
||||||
var postcode: EditText? = null
|
|
||||||
var dob: EditText? = null
|
|
||||||
var ni: EditText? = null
|
|
||||||
var dateFirst: EditText? = null
|
|
||||||
var submit_driver: Button? = null
|
|
||||||
var filePath: Uri? = null
|
|
||||||
var picUri: Uri? = null
|
|
||||||
var driverProfileReference: DatabaseReference? = null
|
|
||||||
var UID: String? = null
|
|
||||||
var driverProfileObject: DriverProfileObject? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
if (arguments != null) {
|
|
||||||
UID = arguments!!.getString("user_id")
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
driverProfileReference =
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
|
||||||
(UID)!!
|
|
||||||
)
|
|
||||||
.child(FirebaseClass.DRIVER_FIREBASE)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_driver_profile, container, false)
|
|
||||||
driverPic = view.findViewById(R.id.driver_pic)
|
|
||||||
addPic = view.findViewById(R.id.add_driver_pic)
|
|
||||||
forenames = view.findViewById(R.id.names)
|
|
||||||
address = view.findViewById(R.id.address)
|
|
||||||
postcode = view.findViewById(R.id.postcode)
|
|
||||||
dob = view.findViewById(R.id.dob)
|
|
||||||
ni = view.findViewById(R.id.ni_number)
|
|
||||||
dateFirst = view.findViewById(R.id.date_first)
|
|
||||||
submit_driver = view.findViewById(R.id.submit_driver)
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
driverProfileReference!!.addListenerForSingleValueEvent(valueEventListener)
|
|
||||||
addPic.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
|
|
||||||
imageSelectorDialog.setImageName("driver_pic" + MainActivity.Companion.dateStamp)
|
|
||||||
imageSelectorDialog.show()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
dob.setOnClickListener(View.OnClickListener {
|
|
||||||
val dateDialog: DateDialog = DateDialog((context)!!)
|
|
||||||
dateDialog.init(dob)
|
|
||||||
})
|
|
||||||
dateFirst.setOnClickListener(View.OnClickListener {
|
|
||||||
val dateDialog: DateDialog = DateDialog((context)!!)
|
|
||||||
dateDialog.init(dateFirst)
|
|
||||||
})
|
|
||||||
submit_driver.setOnClickListener(submitOnClickListener)
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
var valueEventListener: ValueEventListener = object : ValueEventListener {
|
|
||||||
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
try {
|
|
||||||
driverProfileObject =
|
|
||||||
dataSnapshot.child(FirebaseClass.DRIVER_DETAILS_FIREBASE).getValue(
|
|
||||||
DriverProfileObject::class.java
|
|
||||||
)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e(TAG, "onDataChange: ", e)
|
|
||||||
} finally {
|
|
||||||
if (driverProfileObject != null) {
|
|
||||||
driverProfileObject?.apply {
|
|
||||||
forenames.setText(forenames)
|
|
||||||
address.setText(address)
|
|
||||||
postcode.setText(postcode)
|
|
||||||
dob.setText(dob)
|
|
||||||
dateFirst.setText(dateFirst)
|
|
||||||
ni.setText(ni)
|
|
||||||
Picasso.get().load(driverPic)
|
|
||||||
.into(MainActivity.loadImage(driverPic))
|
|
||||||
picUri = Uri.parse(driverPic)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCancelled(databaseError: DatabaseError) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var submitOnClickListener: View.OnClickListener = View.OnClickListener {
|
|
||||||
val driverForename: String = forenames!!.text.toString().trim { it <= ' ' }
|
|
||||||
val AddressString: String = address!!.text.toString().trim { it <= ' ' }
|
|
||||||
val postCodeString: String = postcode!!.text.toString().trim { it <= ' ' }
|
|
||||||
val dobString: String = dob!!.text.toString().trim { it <= ' ' }
|
|
||||||
val niString: String = ni!!.text.toString().trim { it <= ' ' }
|
|
||||||
val dateFirstString: String = dateFirst!!.text.toString().trim { it <= ' ' }
|
|
||||||
if ((!TextUtils.isEmpty(driverForename) &&
|
|
||||||
!TextUtils.isEmpty(AddressString) &&
|
|
||||||
!TextUtils.isEmpty(postCodeString) &&
|
|
||||||
!TextUtils.isEmpty(dobString) &&
|
|
||||||
!TextUtils.isEmpty(niString) &&
|
|
||||||
!TextUtils.isEmpty(dateFirstString))
|
|
||||||
) {
|
|
||||||
if (filePath == null && picUri == null) {
|
|
||||||
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
} else {
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
if (filePath != null) {
|
|
||||||
FirebaseClass(context, filePath, object : FirebaseClass.Response {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
Log.i(TAG, "processFinish: ")
|
|
||||||
if (output != null) {
|
|
||||||
picUri = output
|
|
||||||
writeDriverToDb()
|
|
||||||
} else {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).uploadImage(
|
|
||||||
FirebaseClass.DRIVERS_LICENSE_FIREBASE,
|
|
||||||
FirebaseClass.DRIVERS_LICENSE_FIREBASE + MainActivity.Companion.dateStamp
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
Log.i(TAG, "onClick: pushing with same image")
|
|
||||||
writeDriverToDb()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (TextUtils.isEmpty(driverForename)) {
|
|
||||||
forenames!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(AddressString)) {
|
|
||||||
address!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(postCodeString)) {
|
|
||||||
postcode!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(dobString)) {
|
|
||||||
dob!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(niString)) {
|
|
||||||
ni!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(dateFirstString)) {
|
|
||||||
dateFirst!!.error = "Field required"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
|
||||||
ImageSelectorResults().Results(
|
|
||||||
activity, requestCode, resultCode, data,
|
|
||||||
filePath, driverPic, object : FilepathResponse {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
filePath = output
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun writeDriverToDb() {
|
|
||||||
val forenameText: String = forenames!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val addressText: String = address!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val postcodeText: String = postcode!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val dobText: String = dob!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val niText: String = ni!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val datefirstText: String = dateFirst!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val driverProfileObject: DriverProfileObject = DriverProfileObject(
|
|
||||||
picUri.toString(), forenameText,
|
|
||||||
addressText, postcodeText, dobText, niText, datefirstText
|
|
||||||
)
|
|
||||||
if ((UID == MainActivity.auth!!.currentUser!!.uid)) {
|
|
||||||
val profileUpdatesBuilder: UserProfileChangeRequest.Builder =
|
|
||||||
UserProfileChangeRequest.Builder()
|
|
||||||
profileUpdatesBuilder.setPhotoUri(picUri)
|
|
||||||
val profileUpdates: UserProfileChangeRequest = profileUpdatesBuilder.build()
|
|
||||||
MainActivity.auth!!.currentUser!!.updateProfile(profileUpdates)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
Log.d(TAG, "User profile updated.")
|
|
||||||
MainActivity.viewController!!.reloadDrawer()
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
|
||||||
.child(
|
|
||||||
MainActivity.auth!!.currentUser!!.uid
|
|
||||||
).child("user_details")
|
|
||||||
.setValue(
|
|
||||||
UserObject(
|
|
||||||
MainActivity.auth!!.currentUser!!
|
|
||||||
.displayName,
|
|
||||||
MainActivity.auth!!.currentUser!!
|
|
||||||
.email,
|
|
||||||
picUri.toString()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.addOnFailureListener(object : OnFailureListener {
|
|
||||||
override fun onFailure(e: Exception) {
|
|
||||||
Log.e(TAG, "onFailure: ", e)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
driverProfileReference!!.child(FirebaseClass.DRIVER_DETAILS_FIREBASE)
|
|
||||||
.setValue(driverProfileObject)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
MainActivity.approvalsClass!!.setStatusCode(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.DRIVER_DETAILS_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
|
|
||||||
FirebaseClass.APPROVAL_PENDING
|
|
||||||
)
|
|
||||||
}
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
MainActivity.fragmentManager!!.popBackStack()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,263 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Driver
|
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.provider.MediaStore
|
|
||||||
import android.text.TextUtils
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.Button
|
|
||||||
import android.widget.EditText
|
|
||||||
import android.widget.TextView
|
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.database.DataSnapshot
|
|
||||||
import com.google.firebase.database.DatabaseError
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import com.google.firebase.database.ValueEventListener
|
|
||||||
import h_mal.appttude.com.driver.Global.*
|
|
||||||
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.InsuranceObject
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
|
|
||||||
class InsuranceFragment : Fragment() {
|
|
||||||
private val TAG: String = this.javaClass.simpleName
|
|
||||||
var reference: DatabaseReference? = null
|
|
||||||
var uploadIns: TextView? = null
|
|
||||||
var insName: EditText? = null
|
|
||||||
var insExpiry: EditText? = null
|
|
||||||
var holder: View? = null
|
|
||||||
var filePath: Uri? = null
|
|
||||||
var picUri: Uri? = null
|
|
||||||
var photoStrings: MutableList<String?>? = null
|
|
||||||
var insNameString: String? = null
|
|
||||||
var insExpiryString: String? = null
|
|
||||||
var insuranceObject: InsuranceObject? = null
|
|
||||||
var swiperClass: ImageSwiperClass? = null
|
|
||||||
var uploadNew: Boolean? = null
|
|
||||||
var UID: String? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
uploadNew = false
|
|
||||||
photoStrings = ArrayList()
|
|
||||||
if (arguments != null) {
|
|
||||||
Log.i(TAG, "onCreate: args = args exist")
|
|
||||||
if (arguments!!.containsKey("user_id")) {
|
|
||||||
UID = arguments!!.getString("user_id")
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
|
|
||||||
uploadNew = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
reference =
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
|
||||||
(UID)!!
|
|
||||||
).child(FirebaseClass.VEHICLE_FIREBASE)
|
|
||||||
.child(FirebaseClass.INSURANCE_FIREBASE)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_insurance, container, false)
|
|
||||||
uploadIns = view.findViewById(R.id.uploadInsurance)
|
|
||||||
insName = view.findViewById(R.id.insurer)
|
|
||||||
insExpiry = view.findViewById(R.id.insurance_exp)
|
|
||||||
val submit: Button = view.findViewById(R.id.submit_ins)
|
|
||||||
holder = view.findViewById(R.id.image_pager)
|
|
||||||
swiperClass = ImageSwiperClass(context, holder)
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
reference!!.addListenerForSingleValueEvent(valueEventListener)
|
|
||||||
uploadIns.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
|
|
||||||
imageSelectorDialog.setImageName("insurance" + MainActivity.Companion.dateStamp)
|
|
||||||
imageSelectorDialog.show()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
insExpiry.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val dateDialog: DateDialog = DateDialog((context)!!)
|
|
||||||
dateDialog.init(insExpiry)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
submit.setOnClickListener(submitOnClickListener)
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
var valueEventListener: ValueEventListener = object : ValueEventListener {
|
|
||||||
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
try {
|
|
||||||
insuranceObject = dataSnapshot.getValue(InsuranceObject::class.java)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e(TAG, "onDataChange: ", e)
|
|
||||||
} finally {
|
|
||||||
if (insuranceObject != null) {
|
|
||||||
if (!uploadNew!!) {
|
|
||||||
photoStrings = insuranceObject.getPhotoStrings()
|
|
||||||
swiperClass!!.reinstantiateList(photoStrings)
|
|
||||||
if (insuranceObject!!.insurerName != null) {
|
|
||||||
insNameString = insuranceObject.getInsurerName()
|
|
||||||
insName!!.setText(insNameString)
|
|
||||||
}
|
|
||||||
if (insuranceObject!!.expiryDate != null) {
|
|
||||||
insExpiryString = insuranceObject.getExpiryDate()
|
|
||||||
insExpiry!!.setText(insExpiryString)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCancelled(databaseError: DatabaseError) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var submitOnClickListener: View.OnClickListener = object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
insNameString = insName!!.text.toString().trim({ it <= ' ' })
|
|
||||||
insExpiryString = insExpiry!!.text.toString().trim({ it <= ' ' })
|
|
||||||
if ((!TextUtils.isEmpty(insNameString)
|
|
||||||
&& !TextUtils.isEmpty(insExpiryString))
|
|
||||||
) {
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
if (filePath == null && picUri == null) {
|
|
||||||
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
} else {
|
|
||||||
if (filePath != null) {
|
|
||||||
Log.i(TAG, "onClick: new Image uploaded")
|
|
||||||
FirebaseClass(context, filePath, object : FirebaseClass.Response {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
Log.i(TAG, "processFinish: ")
|
|
||||||
if (output != null) {
|
|
||||||
picUri = output
|
|
||||||
publishObject()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
"Could not upload",
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).uploadImage(
|
|
||||||
FirebaseClass.INSURANCE_FIREBASE,
|
|
||||||
FirebaseClass.INSURANCE_FIREBASE + MainActivity.Companion.dateStamp
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
Log.i(TAG, "onClick: pushing with same image")
|
|
||||||
publishObject()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (TextUtils.isEmpty(insNameString)) {
|
|
||||||
insName!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(insExpiryString)) {
|
|
||||||
insExpiry!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (picUri == null) {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
getString(R.string.image_required),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun publishObject() {
|
|
||||||
if ((uploadNew)!!) {
|
|
||||||
MainActivity.archiveClass!!.archiveRecord(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.INSURANCE_FIREBASE,
|
|
||||||
insuranceObject
|
|
||||||
)
|
|
||||||
}
|
|
||||||
photoStrings = swiperClass.getImageStrings()
|
|
||||||
val insuranceObject: InsuranceObject =
|
|
||||||
InsuranceObject(photoStrings, insNameString, insExpiryString)
|
|
||||||
reference!!.setValue(insuranceObject)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
MainActivity.approvalsClass!!.setStatusCode(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.INSURANCE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
|
|
||||||
FirebaseClass.APPROVAL_PENDING
|
|
||||||
)
|
|
||||||
MainActivity.fragmentManager!!.popBackStack()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(context, "Upload Unsuccessful", Toast.LENGTH_SHORT)
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onRequestPermissionsResult(
|
|
||||||
requestCode: Int,
|
|
||||||
permissions: Array<String>,
|
|
||||||
grantResults: IntArray
|
|
||||||
) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
||||||
if (requestCode == ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE) {
|
|
||||||
if (grantResults.get(0) == PackageManager.PERMISSION_GRANTED) {
|
|
||||||
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
|
|
||||||
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
|
|
||||||
startActivityForResult(cameraIntent, ImageSelectorDialog.CAMERA_REQUEST)
|
|
||||||
} else {
|
|
||||||
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
|
||||||
ImageSelectorResults().Results(
|
|
||||||
activity, requestCode, resultCode, data,
|
|
||||||
filePath, object : FilepathResponse {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
filePath = output
|
|
||||||
FirebaseClass(context, output, object : FirebaseClass.Response {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
if (output != null) {
|
|
||||||
photoStrings!!.add(output.toString())
|
|
||||||
swiperClass!!.addPhotoString(output.toString())
|
|
||||||
//notify data change
|
|
||||||
reference!!.setValue(InsuranceObject(photoStrings, null, null))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).uploadImage(
|
|
||||||
FirebaseClass.INSURANCE_FIREBASE,
|
|
||||||
FirebaseClass.INSURANCE_FIREBASE + MainActivity.Companion.dateStamp
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onResume() {
|
|
||||||
super.onResume()
|
|
||||||
MainActivity.printObjectAsJson(TAG, photoStrings)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,222 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Driver
|
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.provider.MediaStore
|
|
||||||
import android.text.TextUtils
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.*
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.database.DataSnapshot
|
|
||||||
import com.google.firebase.database.DatabaseError
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import com.google.firebase.database.ValueEventListener
|
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import h_mal.appttude.com.driver.Global.*
|
|
||||||
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.MotObject
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
|
|
||||||
class MotFragment : Fragment() {
|
|
||||||
private val TAG: String = this.javaClass.simpleName
|
|
||||||
var reference: DatabaseReference? = null
|
|
||||||
var uploadMot: TextView? = null
|
|
||||||
var motImage: ImageView? = null
|
|
||||||
var motExpiryEditText: EditText? = null
|
|
||||||
var filePath: Uri? = null
|
|
||||||
var picUri: Uri? = null
|
|
||||||
var motObject: MotObject? = null
|
|
||||||
var motExpText: String? = null
|
|
||||||
var uploadNew: Boolean? = null
|
|
||||||
var UID: String? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
uploadNew = false
|
|
||||||
if (arguments != null) {
|
|
||||||
Log.i(TAG, "onCreate: args = args exist")
|
|
||||||
if (arguments!!.containsKey("user_id")) {
|
|
||||||
UID = arguments!!.getString("user_id")
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
|
|
||||||
uploadNew = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
reference =
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
|
||||||
(UID)!!
|
|
||||||
)
|
|
||||||
.child(FirebaseClass.VEHICLE_FIREBASE)
|
|
||||||
.child(FirebaseClass.MOT_FIREBASE)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_mot, container, false)
|
|
||||||
motImage = view.findViewById(R.id.mot_img)
|
|
||||||
uploadMot = view.findViewById(R.id.uploadmot)
|
|
||||||
motExpiryEditText = view.findViewById(R.id.mot_expiry)
|
|
||||||
val submit: Button = view.findViewById(R.id.submit_mot)
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
reference!!.addListenerForSingleValueEvent(valueEventListener)
|
|
||||||
uploadMot.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
|
|
||||||
imageSelectorDialog.setImageName("mot_certificate")
|
|
||||||
imageSelectorDialog.show()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
motExpiryEditText.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val dateDialog: DateDialog = DateDialog((context)!!)
|
|
||||||
dateDialog.init(motExpiryEditText)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
submit.setOnClickListener(submitOnClickListener)
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
var valueEventListener: ValueEventListener = object : ValueEventListener {
|
|
||||||
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
try {
|
|
||||||
motObject = dataSnapshot.getValue(MotObject::class.java)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e(TAG, "onDataChange: ", e)
|
|
||||||
} finally {
|
|
||||||
if (motObject != null) {
|
|
||||||
if (!uploadNew!!) {
|
|
||||||
picUri = Uri.parse(motObject.getMotImageString())
|
|
||||||
motExpText = motObject.getMotExpiry()
|
|
||||||
motExpiryEditText!!.setText(motExpText)
|
|
||||||
Picasso.get()
|
|
||||||
.load(picUri)
|
|
||||||
.into(MainActivity.loadImage(motImage))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCancelled(databaseError: DatabaseError) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var submitOnClickListener: View.OnClickListener = object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
motExpText = motExpiryEditText!!.text.toString().trim({ it <= ' ' })
|
|
||||||
if (!TextUtils.isEmpty(motExpText)) {
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
if (filePath == null && picUri == null) {
|
|
||||||
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
} else {
|
|
||||||
if (filePath != null) {
|
|
||||||
Log.i(TAG, "onClick: new Image uploaded")
|
|
||||||
FirebaseClass(context, filePath, object : FirebaseClass.Response {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
Log.i(TAG, "processFinish: ")
|
|
||||||
if (output != null) {
|
|
||||||
picUri = output
|
|
||||||
publishObject()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
R.string.unsuccessful,
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).uploadImage(
|
|
||||||
FirebaseClass.MOT_FIREBASE,
|
|
||||||
FirebaseClass.MOT_FIREBASE + MainActivity.Companion.dateStamp
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
Log.i(TAG, "onClick: pushing with same image")
|
|
||||||
publishObject()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (TextUtils.isEmpty(motExpText)) {
|
|
||||||
motExpiryEditText!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (picUri == null) {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
getString(R.string.image_required),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun publishObject() {
|
|
||||||
if ((uploadNew)!!) {
|
|
||||||
MainActivity.archiveClass!!.archiveRecord(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.MOT_FIREBASE,
|
|
||||||
motObject
|
|
||||||
)
|
|
||||||
}
|
|
||||||
val motObject: MotObject = MotObject(picUri.toString(), motExpText)
|
|
||||||
reference!!.setValue(motObject).addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
Log.i(TAG, "onComplete: publish = " + task.isSuccessful)
|
|
||||||
MainActivity.approvalsClass!!.setStatusCode(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.MOT_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
|
|
||||||
FirebaseClass.APPROVAL_PENDING
|
|
||||||
)
|
|
||||||
MainActivity.fragmentManager!!.popBackStack()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(context, "Unable to upload", Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onRequestPermissionsResult(
|
|
||||||
requestCode: Int,
|
|
||||||
permissions: Array<String>,
|
|
||||||
grantResults: IntArray
|
|
||||||
) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
||||||
if (requestCode == ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE) {
|
|
||||||
if (grantResults.get(0) == PackageManager.PERMISSION_GRANTED) {
|
|
||||||
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
|
|
||||||
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
|
|
||||||
startActivityForResult(cameraIntent, ImageSelectorDialog.CAMERA_REQUEST)
|
|
||||||
} else {
|
|
||||||
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
|
||||||
ImageSelectorResults().Results(
|
|
||||||
activity, requestCode, resultCode, data,
|
|
||||||
filePath, motImage, object : FilepathResponse {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
filePath = output
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,240 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Driver
|
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.provider.MediaStore
|
|
||||||
import android.text.TextUtils
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.*
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.database.DataSnapshot
|
|
||||||
import com.google.firebase.database.DatabaseError
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import com.google.firebase.database.ValueEventListener
|
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import h_mal.appttude.com.driver.Global.*
|
|
||||||
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.PrivateHireObject
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
|
|
||||||
class PrivateHireLicenseFragment : Fragment() {
|
|
||||||
private val TAG: String = this.javaClass.simpleName
|
|
||||||
private var imageView: ImageView? = null
|
|
||||||
var phNo: EditText? = null
|
|
||||||
var phExpiry: EditText? = null
|
|
||||||
var filePath: Uri? = null
|
|
||||||
var picUri: Uri? = null
|
|
||||||
var Ph_numberString: String? = null
|
|
||||||
var Ph_exprString: String? = null
|
|
||||||
var reference: DatabaseReference? = null
|
|
||||||
var privateHireObject: PrivateHireObject? = null
|
|
||||||
var uploadNew: Boolean? = null
|
|
||||||
var UID: String? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
uploadNew = false
|
|
||||||
if (arguments != null) {
|
|
||||||
Log.i(TAG, "onCreate: args = args exist")
|
|
||||||
if (arguments!!.containsKey("user_id")) {
|
|
||||||
UID = arguments!!.getString("user_id")
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
|
|
||||||
uploadNew = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
reference =
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
|
||||||
(UID)!!
|
|
||||||
)
|
|
||||||
.child(FirebaseClass.DRIVER_FIREBASE)
|
|
||||||
.child(FirebaseClass.PRIVATE_HIRE_FIREBASE)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_private_hire_license, container, false)
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
reference!!.addListenerForSingleValueEvent(object : ValueEventListener {
|
|
||||||
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
try {
|
|
||||||
privateHireObject = dataSnapshot.getValue(PrivateHireObject::class.java)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e(TAG, "onDataChange: ", e)
|
|
||||||
} finally {
|
|
||||||
if (privateHireObject != null) {
|
|
||||||
picUri = Uri.parse(privateHireObject.getPhImageString())
|
|
||||||
Ph_numberString = privateHireObject.getPhNumber()
|
|
||||||
Ph_exprString = privateHireObject.phExpiry
|
|
||||||
Log.i(TAG, "onDataChange: uploadNew = " + uploadNew)
|
|
||||||
if (!uploadNew!!) {
|
|
||||||
phNo!!.setText(Ph_numberString)
|
|
||||||
phExpiry!!.setText(Ph_exprString)
|
|
||||||
Picasso.get()
|
|
||||||
.load(picUri)
|
|
||||||
.into(MainActivity.loadImage(imageView))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCancelled(databaseError: DatabaseError) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
val uploadPH: TextView = view.findViewById(R.id.uploadphlic)
|
|
||||||
imageView = view.findViewById(R.id.imageView2)
|
|
||||||
phNo = view.findViewById(R.id.ph_no)
|
|
||||||
phExpiry = view.findViewById(R.id.ph_expiry)
|
|
||||||
phExpiry.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val dateDialog: DateDialog = DateDialog((context)!!)
|
|
||||||
dateDialog.init(phExpiry)
|
|
||||||
dateDialog.show()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
val submit: Button = view.findViewById(R.id.submit)
|
|
||||||
uploadPH.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
|
|
||||||
imageSelectorDialog.setImageName("private_hire")
|
|
||||||
imageSelectorDialog.show()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
submit.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
Ph_numberString = phNo.getText().toString().trim({ it <= ' ' })
|
|
||||||
Ph_exprString = phExpiry.getText().toString().trim({ it <= ' ' })
|
|
||||||
|
|
||||||
//validation for data then submit
|
|
||||||
if (!TextUtils.isEmpty(Ph_numberString) &&
|
|
||||||
!TextUtils.isEmpty(Ph_exprString)
|
|
||||||
) {
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
if (filePath == null && picUri == null) {
|
|
||||||
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
} else {
|
|
||||||
if (filePath != null) {
|
|
||||||
Log.i(TAG, "onClick: new Image uploaded")
|
|
||||||
FirebaseClass(context, filePath, object : FirebaseClass.Response {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
Log.i(TAG, "processFinish: ")
|
|
||||||
if (output != null) {
|
|
||||||
picUri = output
|
|
||||||
publishObject()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
R.string.unsuccessful,
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).uploadImage(
|
|
||||||
FirebaseClass.PRIVATE_HIRE_FIREBASE,
|
|
||||||
FirebaseClass.PRIVATE_HIRE_FIREBASE + MainActivity.Companion.dateStamp
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
Log.i(TAG, "onClick: pushing with same image")
|
|
||||||
publishObject()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (TextUtils.isEmpty(Ph_numberString)) {
|
|
||||||
phNo.setError("Field required")
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(Ph_exprString)) {
|
|
||||||
phExpiry.setError("Field required")
|
|
||||||
}
|
|
||||||
if (picUri == null) {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
getString(R.string.image_required),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun publishObject() {
|
|
||||||
if ((uploadNew)!!) {
|
|
||||||
MainActivity.archiveClass!!.archiveRecord(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.PRIVATE_HIRE_FIREBASE,
|
|
||||||
privateHireObject
|
|
||||||
)
|
|
||||||
}
|
|
||||||
val privateHireObjectNew: PrivateHireObject =
|
|
||||||
PrivateHireObject(picUri.toString(), Ph_numberString, Ph_exprString)
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
|
||||||
.child((UID)!!).child(FirebaseClass.DRIVER_FIREBASE)
|
|
||||||
.child(FirebaseClass.PRIVATE_HIRE_FIREBASE)
|
|
||||||
.setValue(privateHireObjectNew)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
Log.i(TAG, "onComplete: publish = " + task.isSuccessful)
|
|
||||||
MainActivity.approvalsClass!!.setStatusCode(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.PRIVATE_HIRE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
|
|
||||||
FirebaseClass.APPROVAL_PENDING
|
|
||||||
)
|
|
||||||
MainActivity.fragmentManager!!.popBackStack()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(context, R.string.unsuccessful, Toast.LENGTH_SHORT)
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onRequestPermissionsResult(
|
|
||||||
requestCode: Int,
|
|
||||||
permissions: Array<String>,
|
|
||||||
grantResults: IntArray
|
|
||||||
) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
||||||
if (requestCode == ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE) {
|
|
||||||
if (grantResults.get(0) == PackageManager.PERMISSION_GRANTED) {
|
|
||||||
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
|
|
||||||
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
|
|
||||||
startActivityForResult(cameraIntent, ImageSelectorDialog.CAMERA_REQUEST)
|
|
||||||
} else {
|
|
||||||
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
|
||||||
ImageSelectorResults().Results(
|
|
||||||
activity, requestCode, resultCode, data,
|
|
||||||
filePath, imageView, object : FilepathResponse {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
filePath = output
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,242 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Driver
|
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.provider.MediaStore
|
|
||||||
import android.text.TextUtils
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.*
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.database.DataSnapshot
|
|
||||||
import com.google.firebase.database.DatabaseError
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import com.google.firebase.database.ValueEventListener
|
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import h_mal.appttude.com.driver.Global.*
|
|
||||||
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
|
|
||||||
class PrivateHireVehicleFragment : Fragment() {
|
|
||||||
private val TAG: String = this.javaClass.simpleName
|
|
||||||
private var imageView: ImageView? = null
|
|
||||||
var phNo: EditText? = null
|
|
||||||
var phExpiry: EditText? = null
|
|
||||||
var filePath: Uri? = null
|
|
||||||
var picUri: Uri? = null
|
|
||||||
var Ph_numberString: String? = null
|
|
||||||
var Ph_exprString: String? = null
|
|
||||||
var reference: DatabaseReference? = null
|
|
||||||
var privateHireObject: PrivateHireVehicleObject? = null
|
|
||||||
var uploadNew: Boolean? = null
|
|
||||||
var UID: String? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
uploadNew = false
|
|
||||||
if (arguments != null) {
|
|
||||||
Log.i(TAG, "onCreate: args = args exist")
|
|
||||||
if (arguments!!.containsKey("user_id")) {
|
|
||||||
UID = arguments!!.getString("user_id")
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
|
|
||||||
uploadNew = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
reference =
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
|
||||||
(UID)!!
|
|
||||||
)
|
|
||||||
.child(FirebaseClass.VEHICLE_FIREBASE)
|
|
||||||
.child(FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_private_hire_vehicle, container, false)
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
reference!!.addListenerForSingleValueEvent(valueEventListener)
|
|
||||||
val uploadPH: TextView = view.findViewById(R.id.uploadphlic)
|
|
||||||
imageView = view.findViewById(R.id.imageView2)
|
|
||||||
phNo = view.findViewById(R.id.ph_no)
|
|
||||||
phExpiry = view.findViewById(R.id.ph_expiry)
|
|
||||||
phExpiry.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val dateDialog: DateDialog = DateDialog((context)!!)
|
|
||||||
dateDialog.init(phExpiry)
|
|
||||||
dateDialog.show()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
val submit: Button = view.findViewById(R.id.submit)
|
|
||||||
submit.setOnClickListener(submitClick)
|
|
||||||
uploadPH.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
|
|
||||||
imageSelectorDialog.setImageName("private_hire")
|
|
||||||
imageSelectorDialog.show()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
private val submitClick: View.OnClickListener = object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
Ph_numberString = phNo!!.text.toString().trim({ it <= ' ' })
|
|
||||||
Ph_exprString = phExpiry!!.text.toString().trim({ it <= ' ' })
|
|
||||||
|
|
||||||
//validation for data then submit
|
|
||||||
if (!TextUtils.isEmpty(Ph_numberString) &&
|
|
||||||
!TextUtils.isEmpty(Ph_exprString)
|
|
||||||
) {
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
if (filePath == null && picUri == null) {
|
|
||||||
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
} else {
|
|
||||||
if (filePath != null) {
|
|
||||||
Log.i(TAG, "onClick: new Image uploaded")
|
|
||||||
FirebaseClass(context, filePath, object : FirebaseClass.Response {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
Log.i(TAG, "processFinish: ")
|
|
||||||
if (output != null) {
|
|
||||||
picUri = output
|
|
||||||
publishObject()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
R.string.unsuccessful,
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).uploadImage(
|
|
||||||
FirebaseClass.PRIVATE_HIRE_FIREBASE,
|
|
||||||
FirebaseClass.PRIVATE_HIRE_FIREBASE + MainActivity.Companion.dateStamp
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
Log.i(TAG, "onClick: pushing with same image")
|
|
||||||
publishObject()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (TextUtils.isEmpty(Ph_numberString)) {
|
|
||||||
phNo!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(Ph_exprString)) {
|
|
||||||
phExpiry!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (picUri == null) {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
getString(R.string.image_required),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var valueEventListener: ValueEventListener = object : ValueEventListener {
|
|
||||||
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
try {
|
|
||||||
privateHireObject = dataSnapshot.getValue(
|
|
||||||
PrivateHireVehicleObject::class.java
|
|
||||||
)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e(TAG, "onDataChange: ", e)
|
|
||||||
} finally {
|
|
||||||
if (privateHireObject != null) {
|
|
||||||
picUri = Uri.parse(privateHireObject.getPhCarImageString())
|
|
||||||
Ph_numberString = privateHireObject.getPhCarNumber()
|
|
||||||
Ph_exprString = privateHireObject.getPhCarExpiry()
|
|
||||||
Log.i(TAG, "onDataChange: uploadNew = " + uploadNew)
|
|
||||||
if (!uploadNew!!) {
|
|
||||||
phNo!!.setText(Ph_numberString)
|
|
||||||
phExpiry!!.setText(Ph_exprString)
|
|
||||||
Picasso.get()
|
|
||||||
.load(picUri)
|
|
||||||
.into(MainActivity.loadImage(imageView))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCancelled(databaseError: DatabaseError) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun publishObject() {
|
|
||||||
if ((uploadNew)!!) {
|
|
||||||
MainActivity.archiveClass!!.archiveRecord(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE,
|
|
||||||
privateHireObject
|
|
||||||
)
|
|
||||||
}
|
|
||||||
val privateHireObjectNew: PrivateHireVehicleObject =
|
|
||||||
PrivateHireVehicleObject(picUri.toString(), Ph_numberString, Ph_exprString)
|
|
||||||
reference!!.setValue(privateHireObjectNew)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
Log.i(TAG, "onComplete: publish = " + task.isSuccessful)
|
|
||||||
MainActivity.approvalsClass!!.setStatusCode(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE + FirebaseClass.APPROVAL_CONSTANT,
|
|
||||||
FirebaseClass.APPROVAL_PENDING
|
|
||||||
)
|
|
||||||
MainActivity.fragmentManager!!.popBackStack()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(context, R.string.unsuccessful, Toast.LENGTH_SHORT)
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onRequestPermissionsResult(
|
|
||||||
requestCode: Int,
|
|
||||||
permissions: Array<String>,
|
|
||||||
grantResults: IntArray
|
|
||||||
) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
||||||
if (requestCode == ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE) {
|
|
||||||
if (grantResults.get(0) == PackageManager.PERMISSION_GRANTED) {
|
|
||||||
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
|
|
||||||
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
|
|
||||||
startActivityForResult(cameraIntent, ImageSelectorDialog.CAMERA_REQUEST)
|
|
||||||
} else {
|
|
||||||
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
|
||||||
ImageSelectorResults().Results(
|
|
||||||
activity, requestCode, resultCode, data,
|
|
||||||
filePath, imageView, object : FilepathResponse {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
filePath = output
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,194 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Driver
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.ImageView
|
|
||||||
import android.widget.TextView
|
|
||||||
import androidx.cardview.widget.CardView
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import com.google.firebase.database.DataSnapshot
|
|
||||||
import com.google.firebase.database.DatabaseError
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import com.google.firebase.database.ValueEventListener
|
|
||||||
import h_mal.appttude.com.driver.Global.ExecuteFragment
|
|
||||||
import h_mal.appttude.com.driver.Global.FirebaseClass
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.ApprovalsObject
|
|
||||||
import h_mal.appttude.com.driver.Objects.WholeDriverObject
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
|
|
||||||
class VehicleOverallFragment : Fragment() {
|
|
||||||
var vehicleApr: ImageView? = null
|
|
||||||
var insuranceApr: ImageView? = null
|
|
||||||
var motApr: ImageView? = null
|
|
||||||
var logbookApr: ImageView? = null
|
|
||||||
private var privateHireCarApr: ImageView? = null
|
|
||||||
var insuranceExp: TextView? = null
|
|
||||||
var motExp: TextView? = null
|
|
||||||
private var privateHireExp: TextView? = null
|
|
||||||
private var vehicleProfile: CardView? = null
|
|
||||||
private var insurance: CardView? = null
|
|
||||||
private var mot: CardView? = null
|
|
||||||
private var logbook: CardView? = null
|
|
||||||
private var privateHireCar: CardView? = null
|
|
||||||
private var reference: DatabaseReference? = null
|
|
||||||
private var wholeDriverObject: WholeDriverObject? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
reference =
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
|
||||||
MainActivity.auth!!.currentUser!!.uid
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_vehicle_overall, container, false)
|
|
||||||
vehicleProfile = view.findViewById(R.id.vehicle_prof)
|
|
||||||
insurance = view.findViewById(R.id.insurance)
|
|
||||||
mot = view.findViewById(R.id.mot)
|
|
||||||
logbook = view.findViewById(R.id.logbook)
|
|
||||||
privateHireCar = view.findViewById(R.id.private_hire_vehicle_license)
|
|
||||||
vehicleApr = view.findViewById(R.id.approval_vehicle)
|
|
||||||
insuranceApr = view.findViewById(R.id.approval_insurance)
|
|
||||||
motApr = view.findViewById(R.id.approval_mot)
|
|
||||||
logbookApr = view.findViewById(R.id.approval_lb)
|
|
||||||
privateHireCarApr = view.findViewById(R.id.approval_ph_car)
|
|
||||||
insuranceExp = view.findViewById(R.id.ins_exp)
|
|
||||||
motExp = view.findViewById(R.id.mot_exp)
|
|
||||||
privateHireExp = view.findViewById(R.id.ph_car_exp)
|
|
||||||
insuranceExp.setVisibility(View.GONE)
|
|
||||||
motExp.setVisibility(View.GONE)
|
|
||||||
privateHireExp.setVisibility(View.GONE)
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
reference!!.addListenerForSingleValueEvent(valueEventListener)
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
var valueEventListener: ValueEventListener = object : ValueEventListener {
|
|
||||||
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
|
||||||
wholeDriverObject = dataSnapshot.getValue(WholeDriverObject::class.java)
|
|
||||||
if (wholeDriverObject!!.approvalsObject != null) {
|
|
||||||
val approvalsObject: ApprovalsObject? = wholeDriverObject.approvalsObject
|
|
||||||
vehicleApr!!.setImageResource(
|
|
||||||
MainActivity.approvalsClass!!.setImageResource(
|
|
||||||
approvalsObject.vehicle_details_approval
|
|
||||||
)
|
|
||||||
)
|
|
||||||
insuranceApr!!.setImageResource(
|
|
||||||
MainActivity.approvalsClass!!.setImageResource(
|
|
||||||
approvalsObject.insurance_details_approval
|
|
||||||
)
|
|
||||||
)
|
|
||||||
motApr!!.setImageResource(
|
|
||||||
MainActivity.approvalsClass!!.setImageResource(
|
|
||||||
approvalsObject.getMot_details_approval()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
logbookApr!!.setImageResource(
|
|
||||||
MainActivity.approvalsClass!!.setImageResource(
|
|
||||||
approvalsObject.getLog_book_approval()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
privateHireCarApr!!.setImageResource(
|
|
||||||
MainActivity.approvalsClass!!.setImageResource(
|
|
||||||
approvalsObject.getPh_car_approval()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
if (wholeDriverObject!!.vehicle_profile != null) {
|
|
||||||
if (wholeDriverObject.getVehicle_profile().insurance_details != null) {
|
|
||||||
insuranceExp!!.visibility = View.VISIBLE
|
|
||||||
insuranceExp!!.text = "Expiry: " + wholeDriverObject.getVehicle_profile().getInsurance_details()
|
|
||||||
.getExpiryDate()
|
|
||||||
}
|
|
||||||
if (wholeDriverObject.getVehicle_profile().mot_details != null) {
|
|
||||||
motExp!!.visibility = View.VISIBLE
|
|
||||||
motExp!!.text = "Expiry: " + wholeDriverObject.getVehicle_profile().getMot_details()
|
|
||||||
.getMotExpiry()
|
|
||||||
}
|
|
||||||
if (wholeDriverObject.getVehicle_profile().private_hire_vehicle != null) {
|
|
||||||
privateHireExp!!.visibility = View.VISIBLE
|
|
||||||
privateHireExp!!.text = "Expiry: " + wholeDriverObject.getVehicle_profile()
|
|
||||||
.getPrivateHireVehicleObject().getPhCarExpiry()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
vehicleProfile!!.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
if (wholeDriverObject!!.vehicle_profile == null) {
|
|
||||||
ExecuteFragment.executeFragment(VehicleSetupFragment())
|
|
||||||
} else {
|
|
||||||
MainActivity.archiveClass!!.openDialogArchive(
|
|
||||||
context,
|
|
||||||
wholeDriverObject.getVehicle_profile().getVehicle_details(),
|
|
||||||
VehicleSetupFragment()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
insurance!!.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
if (wholeDriverObject!!.vehicle_profile == null) {
|
|
||||||
ExecuteFragment.executeFragment(InsuranceFragment())
|
|
||||||
} else {
|
|
||||||
MainActivity.archiveClass!!.openDialogArchive(
|
|
||||||
context,
|
|
||||||
wholeDriverObject.getVehicle_profile().getInsurance_details(),
|
|
||||||
InsuranceFragment()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
mot!!.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
if (wholeDriverObject!!.vehicle_profile == null) {
|
|
||||||
ExecuteFragment.executeFragment(MotFragment())
|
|
||||||
} else {
|
|
||||||
MainActivity.archiveClass!!.openDialogArchive(
|
|
||||||
context,
|
|
||||||
wholeDriverObject.getVehicle_profile().getMot_details(),
|
|
||||||
MotFragment()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
logbook!!.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
if (wholeDriverObject!!.vehicle_profile == null) {
|
|
||||||
ExecuteFragment.executeFragment(logbookFragment())
|
|
||||||
} else {
|
|
||||||
MainActivity.archiveClass!!.openDialogArchive(
|
|
||||||
context,
|
|
||||||
wholeDriverObject.getVehicle_profile().getLog_book(),
|
|
||||||
logbookFragment()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
privateHireCar!!.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
if (wholeDriverObject!!.vehicle_profile == null) {
|
|
||||||
ExecuteFragment.executeFragment(PrivateHireVehicleFragment())
|
|
||||||
} else {
|
|
||||||
MainActivity.archiveClass!!.openDialogArchive(
|
|
||||||
context,
|
|
||||||
wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject(),
|
|
||||||
PrivateHireVehicleFragment()
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCancelled(databaseError: DatabaseError) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,226 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Driver
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.text.TextUtils
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.Button
|
|
||||||
import android.widget.CheckBox
|
|
||||||
import android.widget.EditText
|
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.database.DataSnapshot
|
|
||||||
import com.google.firebase.database.DatabaseError
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import com.google.firebase.database.ValueEventListener
|
|
||||||
import h_mal.appttude.com.driver.Global.DateDialog
|
|
||||||
import h_mal.appttude.com.driver.Global.ExecuteFragment
|
|
||||||
import h_mal.appttude.com.driver.Global.FirebaseClass
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.VehicleProfileObject
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
|
|
||||||
class VehicleSetupFragment : Fragment() {
|
|
||||||
private val TAG: String = this.javaClass.simpleName
|
|
||||||
var reg: EditText? = null
|
|
||||||
var make: EditText? = null
|
|
||||||
var model: EditText? = null
|
|
||||||
var color: EditText? = null
|
|
||||||
var keeperName: EditText? = null
|
|
||||||
var address: EditText? = null
|
|
||||||
var postcode: EditText? = null
|
|
||||||
var startDate: EditText? = null
|
|
||||||
var seized: CheckBox? = null
|
|
||||||
var Submit: Button? = null
|
|
||||||
var ref: DatabaseReference? = null
|
|
||||||
var vehicleProfileObject: VehicleProfileObject? = null
|
|
||||||
var uploadNew: Boolean? = null
|
|
||||||
var UID: String? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
uploadNew = false
|
|
||||||
if (arguments != null) {
|
|
||||||
Log.i(TAG, "onCreate: args = args exist")
|
|
||||||
if (arguments!!.containsKey("user_id")) {
|
|
||||||
UID = arguments!!.getString("user_id")
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
|
|
||||||
uploadNew = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
ref = MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
|
||||||
(UID)!!
|
|
||||||
).child(FirebaseClass.VEHICLE_FIREBASE)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_vehicle_setup, container, false)
|
|
||||||
reg = view.findViewById(R.id.reg)
|
|
||||||
make = view.findViewById(R.id.make)
|
|
||||||
model = view.findViewById(R.id.model)
|
|
||||||
color = view.findViewById(R.id.colour)
|
|
||||||
keeperName = view.findViewById(R.id.keeper_name)
|
|
||||||
address = view.findViewById(R.id.address)
|
|
||||||
postcode = view.findViewById(R.id.postcode)
|
|
||||||
startDate = view.findViewById(R.id.start_date)
|
|
||||||
seized = view.findViewById(R.id.seized)
|
|
||||||
Submit = view.findViewById(R.id.submit_vehicle)
|
|
||||||
startDate.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val dateDialog: DateDialog = DateDialog((context)!!)
|
|
||||||
dateDialog.init(startDate)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
ref!!.addListenerForSingleValueEvent(valueEventListener)
|
|
||||||
Submit.setOnClickListener(submitOnClickListener)
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
var valueEventListener: ValueEventListener = object : ValueEventListener {
|
|
||||||
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
try {
|
|
||||||
vehicleProfileObject =
|
|
||||||
dataSnapshot.child(FirebaseClass.VEHICLE_DETAILS_FIREBASE).getValue(
|
|
||||||
VehicleProfileObject::class.java
|
|
||||||
)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e(TAG, "onDataChange: ", e)
|
|
||||||
} finally {
|
|
||||||
if (vehicleProfileObject != null) {
|
|
||||||
if (!uploadNew!!) {
|
|
||||||
reg.setText(vehicleProfileObject.getReg())
|
|
||||||
make.setText(vehicleProfileObject.getMake())
|
|
||||||
model.setText(vehicleProfileObject.getModel())
|
|
||||||
color.setText(vehicleProfileObject.getColour())
|
|
||||||
keeperName.setText(vehicleProfileObject.getKeeperName())
|
|
||||||
address.setText(vehicleProfileObject.getKeeperAddress())
|
|
||||||
postcode.setText(vehicleProfileObject.getKeeperPostCode())
|
|
||||||
startDate.setText(vehicleProfileObject.getStartDate())
|
|
||||||
seized!!.isChecked = vehicleProfileObject!!.isSeized()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCancelled(databaseError: DatabaseError) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var submitOnClickListener: View.OnClickListener = object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val regString: String = reg!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val makeString: String = make!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val modelString: String = model!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val colourString: String = color!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val keeperNameStrin: String = keeperName!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val addressString: String = address!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val postcodeString: String = postcode!!.text.toString().trim({ it <= ' ' })
|
|
||||||
val driverForename: String = startDate!!.text.toString().trim({ it <= ' ' })
|
|
||||||
if ((!TextUtils.isEmpty(regString)
|
|
||||||
&& !TextUtils.isEmpty(makeString)
|
|
||||||
&& !TextUtils.isEmpty(modelString)
|
|
||||||
&& !TextUtils.isEmpty(colourString)
|
|
||||||
&& !TextUtils.isEmpty(keeperNameStrin)
|
|
||||||
&& !TextUtils.isEmpty(addressString)
|
|
||||||
&& !TextUtils.isEmpty(postcodeString)
|
|
||||||
&& !TextUtils.isEmpty(driverForename))
|
|
||||||
) {
|
|
||||||
if ((uploadNew)!!) {
|
|
||||||
MainActivity.archiveClass!!.archiveRecord(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.VEHICLE_DETAILS_FIREBASE,
|
|
||||||
vehicleProfileObject
|
|
||||||
)
|
|
||||||
}
|
|
||||||
val vehicleProfileObject: VehicleProfileObject = VehicleProfileObject(
|
|
||||||
regString,
|
|
||||||
makeString,
|
|
||||||
modelString,
|
|
||||||
colourString,
|
|
||||||
keeperNameStrin,
|
|
||||||
addressString,
|
|
||||||
postcodeString,
|
|
||||||
driverForename,
|
|
||||||
seized!!.isChecked
|
|
||||||
)
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
ref!!.child(FirebaseClass.VEHICLE_DETAILS_FIREBASE)
|
|
||||||
.setValue(vehicleProfileObject)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
MainActivity.approvalsClass!!.setStatusCode(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.VEHICLE_DETAILS_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
|
|
||||||
FirebaseClass.APPROVAL_PENDING
|
|
||||||
)
|
|
||||||
MainActivity.approvalsClass!!.setStatusCode(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.MOT_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
|
|
||||||
FirebaseClass.APPROVAL_PENDING
|
|
||||||
)
|
|
||||||
MainActivity.approvalsClass!!.setStatusCode(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.INSURANCE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
|
|
||||||
FirebaseClass.APPROVAL_PENDING
|
|
||||||
)
|
|
||||||
MainActivity.approvalsClass!!.setStatusCode(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.LOG_BOOK_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
|
|
||||||
FirebaseClass.APPROVAL_PENDING
|
|
||||||
)
|
|
||||||
MainActivity.fragmentManager!!.popBackStack()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
"Upload Unsuccessful",
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
if (TextUtils.isEmpty(regString)) {
|
|
||||||
reg!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(makeString)) {
|
|
||||||
make!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(modelString)) {
|
|
||||||
model!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(colourString)) {
|
|
||||||
color!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(keeperNameStrin)) {
|
|
||||||
keeperName!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(addressString)) {
|
|
||||||
address!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(postcodeString)) {
|
|
||||||
postcode!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(driverForename)) {
|
|
||||||
startDate!!.error = "Field required"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Driver
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.Button
|
|
||||||
import androidx.cardview.widget.CardView
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import h_mal.appttude.com.driver.Global.ExecuteFragment
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
|
|
||||||
class homeDriverFragment : Fragment() {
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_home, container, false)
|
|
||||||
val button: Button = view.findViewById(R.id.driver)
|
|
||||||
button.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
ExecuteFragment.executeFragment(DriverOverallFragment())
|
|
||||||
}
|
|
||||||
})
|
|
||||||
val second: CardView = view.findViewById(R.id.car)
|
|
||||||
second.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
ExecuteFragment.executeFragment(VehicleOverallFragment())
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,220 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Driver
|
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.provider.MediaStore
|
|
||||||
import android.text.TextUtils
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.*
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.database.DataSnapshot
|
|
||||||
import com.google.firebase.database.DatabaseError
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import com.google.firebase.database.ValueEventListener
|
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import h_mal.appttude.com.driver.Global.ExecuteFragment
|
|
||||||
import h_mal.appttude.com.driver.Global.FirebaseClass
|
|
||||||
import h_mal.appttude.com.driver.Global.ImageSelectorDialog
|
|
||||||
import h_mal.appttude.com.driver.Global.ImageSelectorResults
|
|
||||||
import h_mal.appttude.com.driver.Global.ImageSelectorResults.FilepathResponse
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.LogbookObject
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
|
|
||||||
class logbookFragment : Fragment() {
|
|
||||||
private val TAG: String = this.javaClass.simpleName
|
|
||||||
var reference: DatabaseReference? = null
|
|
||||||
var uploadlb: TextView? = null
|
|
||||||
var lbImage: ImageView? = null
|
|
||||||
var v5cNumber: EditText? = null
|
|
||||||
var filePath: Uri? = null
|
|
||||||
var picUri: Uri? = null
|
|
||||||
var v5cString: String? = null
|
|
||||||
var logbookObject: LogbookObject? = null
|
|
||||||
var uploadNew: Boolean? = null
|
|
||||||
var UID: String? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
uploadNew = false
|
|
||||||
if (arguments != null) {
|
|
||||||
Log.i(TAG, "onCreate: args = args exist")
|
|
||||||
if (arguments!!.containsKey("user_id")) {
|
|
||||||
UID = arguments!!.getString("user_id")
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
if (arguments!!.containsKey(ExecuteFragment.UPLOAD_NEW)) {
|
|
||||||
uploadNew = true
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
UID = MainActivity.auth!!.currentUser!!.uid
|
|
||||||
}
|
|
||||||
reference =
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
|
||||||
(UID)!!
|
|
||||||
).child(FirebaseClass.VEHICLE_FIREBASE)
|
|
||||||
.child(FirebaseClass.LOG_BOOK_FIREBASE)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
val view: View = inflater.inflate(R.layout.fragment_logbook, container, false)
|
|
||||||
uploadlb = view.findViewById(R.id.upload_lb)
|
|
||||||
lbImage = view.findViewById(R.id.log_book_img)
|
|
||||||
v5cNumber = view.findViewById(R.id.v5c_no)
|
|
||||||
val submit: Button = view.findViewById(R.id.submit_lb)
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
reference!!.addListenerForSingleValueEvent(valueEventListener)
|
|
||||||
uploadlb.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val imageSelectorDialog: ImageSelectorDialog = ImageSelectorDialog((context)!!)
|
|
||||||
imageSelectorDialog.setImageName("logbook_pic" + MainActivity.Companion.dateStamp)
|
|
||||||
imageSelectorDialog.show()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
submit.setOnClickListener(submitOnClickListener)
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
var valueEventListener: ValueEventListener = object : ValueEventListener {
|
|
||||||
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
try {
|
|
||||||
logbookObject = dataSnapshot.getValue(LogbookObject::class.java)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
Log.e(TAG, "onDataChange: ", e)
|
|
||||||
} finally {
|
|
||||||
if (logbookObject != null) {
|
|
||||||
picUri = Uri.parse(logbookObject.getPhotoString())
|
|
||||||
v5cString = logbookObject.getV5cnumber()
|
|
||||||
if (!uploadNew!!) {
|
|
||||||
v5cNumber!!.setText(v5cString)
|
|
||||||
Picasso.get()
|
|
||||||
.load(picUri)
|
|
||||||
.into(MainActivity.loadImage(lbImage))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCancelled(databaseError: DatabaseError) {
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var submitOnClickListener: View.OnClickListener = object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
v5cString = v5cNumber!!.text.toString().trim({ it <= ' ' })
|
|
||||||
if (!TextUtils.isEmpty(v5cString)) {
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
if (filePath == null && picUri == null) {
|
|
||||||
Toast.makeText(context, "No Driver image", Toast.LENGTH_SHORT).show()
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
} else {
|
|
||||||
if (filePath != null) {
|
|
||||||
Log.i(TAG, "onClick: new Image uploaded")
|
|
||||||
FirebaseClass(context, filePath, object : FirebaseClass.Response {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
Log.i(TAG, "processFinish: ")
|
|
||||||
if (output != null) {
|
|
||||||
picUri = output
|
|
||||||
publishObject()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
R.string.unsuccessful,
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).uploadImage(
|
|
||||||
FirebaseClass.LOG_BOOK_FIREBASE,
|
|
||||||
FirebaseClass.LOG_BOOK_FIREBASE + MainActivity.Companion.dateStamp
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
Log.i(TAG, "onClick: pushing with same image")
|
|
||||||
publishObject()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (TextUtils.isEmpty(v5cString)) {
|
|
||||||
v5cNumber!!.error = "Field required"
|
|
||||||
}
|
|
||||||
if (picUri == null) {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
getString(R.string.image_required),
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun publishObject() {
|
|
||||||
if ((uploadNew)!!) {
|
|
||||||
MainActivity.archiveClass!!.archiveRecord(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.LOG_BOOK_FIREBASE,
|
|
||||||
logbookObject
|
|
||||||
)
|
|
||||||
}
|
|
||||||
val logbookObjectNew: LogbookObject = LogbookObject(picUri.toString(), v5cString)
|
|
||||||
reference!!.setValue(logbookObjectNew)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
MainActivity.approvalsClass!!.setStatusCode(
|
|
||||||
UID,
|
|
||||||
FirebaseClass.LOG_BOOK_FIREBASE + FirebaseClass.APPROVAL_CONSTANT,
|
|
||||||
FirebaseClass.APPROVAL_PENDING
|
|
||||||
)
|
|
||||||
MainActivity.fragmentManager!!.popBackStack()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(context, "Upload Unsuccessful", Toast.LENGTH_SHORT)
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onRequestPermissionsResult(
|
|
||||||
requestCode: Int,
|
|
||||||
permissions: Array<String>,
|
|
||||||
grantResults: IntArray
|
|
||||||
) {
|
|
||||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
|
||||||
if (requestCode == ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE) {
|
|
||||||
if (grantResults.get(0) == PackageManager.PERMISSION_GRANTED) {
|
|
||||||
Toast.makeText(context, "camera permission granted", Toast.LENGTH_LONG).show()
|
|
||||||
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
|
|
||||||
startActivityForResult(cameraIntent, ImageSelectorDialog.CAMERA_REQUEST)
|
|
||||||
} else {
|
|
||||||
Toast.makeText(context, "camera permission denied", Toast.LENGTH_LONG).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
|
||||||
ImageSelectorResults().Results(
|
|
||||||
activity, requestCode, resultCode, data,
|
|
||||||
filePath, lbImage, object : FilepathResponse {
|
|
||||||
override fun processFinish(output: Uri?) {
|
|
||||||
filePath = output
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,5 @@
|
|||||||
package h_mal.appttude.com.driver.Global
|
package h_mal.appttude.com.driver.Global
|
||||||
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.ApprovalsObject
|
import h_mal.appttude.com.driver.Objects.ApprovalsObject
|
||||||
import h_mal.appttude.com.driver.Objects.WholeDriverObject
|
import h_mal.appttude.com.driver.Objects.WholeDriverObject
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.driver.R
|
||||||
@@ -11,16 +8,16 @@ import h_mal.appttude.com.driver.R
|
|||||||
class ApprovalsClass {
|
class ApprovalsClass {
|
||||||
fun getOverApprovalStatusCode(wholeDriverObject: WholeDriverObject?): Int {
|
fun getOverApprovalStatusCode(wholeDriverObject: WholeDriverObject?): Int {
|
||||||
if (wholeDriverObject!!.approvalsObject != null) {
|
if (wholeDriverObject!!.approvalsObject != null) {
|
||||||
val approvalsObject: ApprovalsObject? = wholeDriverObject.approvalsObject
|
val approvalsObject: ApprovalsObject = wholeDriverObject!!.approvalsObject!!
|
||||||
val ints: IntArray = intArrayOf(
|
val ints: IntArray = intArrayOf(
|
||||||
approvalsObject.getDriver_details_approval(),
|
approvalsObject.driver_details_approval,
|
||||||
approvalsObject.driver_license_approval,
|
approvalsObject.driver_license_approval,
|
||||||
approvalsObject.private_hire_approval,
|
approvalsObject.private_hire_approval,
|
||||||
approvalsObject.vehicle_details_approval,
|
approvalsObject.vehicle_details_approval,
|
||||||
approvalsObject.insurance_details_approval,
|
approvalsObject.insurance_details_approval,
|
||||||
approvalsObject.getMot_details_approval(),
|
approvalsObject.mot_details_approval,
|
||||||
approvalsObject.getLog_book_approval(),
|
approvalsObject.log_book_approval,
|
||||||
approvalsObject.getPh_car_approval()
|
approvalsObject.ph_car_approval
|
||||||
)
|
)
|
||||||
return setImageResource(mode(ints))
|
return setImageResource(mode(ints))
|
||||||
}
|
}
|
||||||
@@ -28,18 +25,16 @@ class ApprovalsClass {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun setStatusCode(userId: String?, approvalNameString: String, status: Int) {
|
fun setStatusCode(userId: String?, approvalNameString: String, status: Int) {
|
||||||
if (!(approvalNameString == "")) {
|
// if (!(approvalNameString == "")) {
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
||||||
.child((userId)!!).child(FirebaseClass.USER_APPROVALS)
|
// .child((userId)!!).child(FirebaseClass.USER_APPROVALS)
|
||||||
.child(approvalNameString)
|
// .child(approvalNameString)
|
||||||
.setValue(status).addOnCompleteListener(object : OnCompleteListener<Void?> {
|
// .setValue(status).addOnCompleteListener { task ->
|
||||||
override fun onComplete(task: Task<Void?>) {
|
// if (task.isSuccessful) {
|
||||||
if (task.isSuccessful) {
|
// } else {
|
||||||
} else {
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setImageResource(statusCode: Int): Int {
|
fun setImageResource(statusCode: Int): Int {
|
||||||
@@ -55,7 +50,6 @@ class ApprovalsClass {
|
|||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun mode(array: IntArray): Int {
|
fun mode(array: IntArray): Int {
|
||||||
MainActivity.printObjectAsJson("modeArrays", array)
|
|
||||||
var mode: Int = array.get(0)
|
var mode: Int = array.get(0)
|
||||||
var maxCount: Int = 0
|
var maxCount: Int = 0
|
||||||
if (matchedArray(array, 3)) {
|
if (matchedArray(array, 3)) {
|
||||||
|
|||||||
@@ -2,54 +2,45 @@ package h_mal.appttude.com.driver.Global
|
|||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.DialogInterface
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
import h_mal.appttude.com.driver.utils.UPLOAD_NEW
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
|
|
||||||
|
|
||||||
class ArchiveClass {
|
class ArchiveClass {
|
||||||
fun archiveRecord(UID: String?, item: String?, `object`: Any?) {
|
fun archiveRecord(UID: String?, item: String?, `object`: Any?) {
|
||||||
val toPath: DatabaseReference =
|
// val toPath: DatabaseReference =
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
||||||
(UID)!!
|
// (UID)!!
|
||||||
)
|
// )
|
||||||
.child(FirebaseClass.ARCHIVE_FIREBASE).child((item)!!)
|
// .child(FirebaseClass.ARCHIVE_FIREBASE).child((item)!!)
|
||||||
toPath.child(MainActivity.Companion.getDateTimeStamp()).setValue(`object`)
|
// toPath.child(MainActivity.dateTimeStamp).setValue(`object`)
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
// .addOnCompleteListener { task ->
|
||||||
override fun onComplete(task: Task<Void?>) {
|
// if (task.isSuccessful) {
|
||||||
if (task.isSuccessful) {
|
// Log.i(TAG, "onComplete: archive successful")
|
||||||
Log.i(TAG, "onComplete: archive successful")
|
// } else {
|
||||||
} else {
|
// Log.i(TAG, "onComplete: archive unsuccessful")
|
||||||
Log.i(TAG, "onComplete: archive unsuccessful")
|
// }
|
||||||
}
|
// }
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun openDialogArchive(context: Context?, `object`: Any?, fragment: Fragment) {
|
fun openDialogArchive(context: Context?, `object`: Any?, fragment: Fragment) {
|
||||||
if (`object` == null) {
|
if (`object` == null) {
|
||||||
ExecuteFragment.executeFragment(fragment)
|
// executeFragment(fragment)
|
||||||
} else {
|
} else {
|
||||||
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
||||||
builder.setMessage("Do you want to View/Edit or Upload new?")
|
builder.setMessage("Do you want to View/Edit or Upload new?")
|
||||||
.setPositiveButton("View/Edit", object : DialogInterface.OnClickListener {
|
.setPositiveButton("View/Edit"
|
||||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
) { _, _ ->
|
||||||
ExecuteFragment.executeFragment(fragment)
|
// executeFragment(fragment)
|
||||||
}
|
}
|
||||||
})
|
.setNegativeButton("Upload New"
|
||||||
.setNegativeButton("Upload New", object : DialogInterface.OnClickListener {
|
) { _, _ ->
|
||||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
val bundle = Bundle()
|
||||||
val bundle: Bundle = Bundle()
|
bundle.putString(UPLOAD_NEW, "Yes")
|
||||||
bundle.putString(ExecuteFragment.UPLOAD_NEW, "Yes")
|
|
||||||
fragment.arguments = bundle
|
fragment.arguments = bundle
|
||||||
ExecuteFragment.executeFragment(fragment)
|
// executeFragment(fragment)
|
||||||
}
|
}
|
||||||
})
|
|
||||||
.create().show()
|
.create().show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -59,26 +50,21 @@ class ArchiveClass {
|
|||||||
bundle.putString("user_id", user)
|
bundle.putString("user_id", user)
|
||||||
fragment!!.arguments = bundle
|
fragment!!.arguments = bundle
|
||||||
if (`object` == null) {
|
if (`object` == null) {
|
||||||
ExecuteFragment.executeFragment(fragment)
|
// executeFragment(fragment)
|
||||||
} else {
|
} else {
|
||||||
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
||||||
builder.setMessage("Do you want to View/Edit or Upload new?")
|
builder.setMessage("Do you want to View/Edit or Upload new?")
|
||||||
.setPositiveButton("View/Edit", object : DialogInterface.OnClickListener {
|
.setPositiveButton("View/Edit"
|
||||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
) { _, _ ->
|
||||||
ExecuteFragment.executeFragment(fragment)
|
// executeFragment(fragment)
|
||||||
}
|
}
|
||||||
})
|
.setNegativeButton("Upload New"
|
||||||
.setNegativeButton("Upload New", object : DialogInterface.OnClickListener {
|
) { _, _ ->
|
||||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
bundle.putString(UPLOAD_NEW, "Yes")
|
||||||
bundle.putString(ExecuteFragment.UPLOAD_NEW, "Yes")
|
// executeFragment(fragment)
|
||||||
ExecuteFragment.executeFragment(fragment)
|
|
||||||
}
|
}
|
||||||
})
|
|
||||||
.create().show()
|
.create().show()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
|
||||||
private val TAG: String = "ArchiveClass"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -1,103 +1,54 @@
|
|||||||
package h_mal.appttude.com.driver.Global
|
package h_mal.appttude.com.driver.Global
|
||||||
|
|
||||||
|
|
||||||
import android.app.DatePickerDialog
|
import android.app.DatePickerDialog
|
||||||
|
import android.app.DatePickerDialog.OnDateSetListener
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.icu.util.Calendar
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.text.TextUtils
|
|
||||||
import android.util.Log
|
|
||||||
import android.widget.DatePicker
|
|
||||||
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.driver.R
|
||||||
import java.text.ParseException
|
import h_mal.appttude.com.driver.utils.DateUtils
|
||||||
import java.text.SimpleDateFormat
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
|
private const val DATE_FORMAT = "dd/MM/yyyy"
|
||||||
class DateDialog : DatePickerDialog {
|
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||||
var mYear: Int = 0
|
class DateDialog(
|
||||||
var mMonth: Int = 0
|
|
||||||
var mDay: Int = 0
|
|
||||||
var editText: EditText? = null
|
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
|
||||||
constructor(context: Context) : super(context)
|
|
||||||
|
|
||||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
|
||||||
constructor(context: Context, themeResId: Int) : super(context, themeResId)
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
context: Context,
|
context: Context,
|
||||||
listener: OnDateSetListener?,
|
private val editText: EditText
|
||||||
year: Int, month: Int, dayOfMonth: Int
|
) : DatePickerDialog(context) {
|
||||||
) : super(context, listener, year, month, dayOfMonth)
|
|
||||||
|
|
||||||
constructor(
|
var dateSetListener: OnDateSetListener =
|
||||||
context: Context,
|
OnDateSetListener { _, year, month, dayOfMonth ->
|
||||||
themeResId: Int,
|
val cal = Calendar.getInstance()
|
||||||
listener: OnDateSetListener?,
|
cal.set(year, month + 1, dayOfMonth)
|
||||||
year: Int,
|
|
||||||
monthOfYear: Int,
|
|
||||||
dayOfMonth: Int
|
|
||||||
) : super(context, themeResId, listener, year, monthOfYear, dayOfMonth)
|
|
||||||
|
|
||||||
override fun setTitle(title: CharSequence) {
|
editText.setText(DateUtils.parseCalenderIntoDateString(cal, DATE_FORMAT))
|
||||||
super.setTitle(title)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setOnDateSetListener(listener: OnDateSetListener?) {
|
init {
|
||||||
super.setOnDateSetListener(dateSetListener)
|
val dateString = editText.text?.toString()
|
||||||
|
val date = if (dateString.isNullOrBlank()){
|
||||||
|
// Set time to now
|
||||||
|
Calendar.getInstance()
|
||||||
|
}else{
|
||||||
|
// Parse current edit text string and set value
|
||||||
|
DateUtils.parseDateStringIntoCalender(dateString, DATE_FORMAT)
|
||||||
|
?: Calendar.getInstance()
|
||||||
}
|
}
|
||||||
|
setDateFromCalender(date)
|
||||||
fun init(editText: EditText?) {
|
setOnDateSetListener(dateSetListener)
|
||||||
this.editText = editText
|
setTitle(context.getString(R.string.set_date))
|
||||||
val dateString: String = editText!!.text.toString()
|
|
||||||
var javaDate: Date? = null
|
|
||||||
if (TextUtils.isEmpty(dateString)) {
|
|
||||||
val calendar: Calendar = Calendar.getInstance()
|
|
||||||
mYear = calendar.get(Calendar.YEAR)
|
|
||||||
mMonth = calendar.get(Calendar.MONTH)
|
|
||||||
mDay = calendar.get(Calendar.DAY_OF_MONTH)
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
val sdfrmt: SimpleDateFormat = SimpleDateFormat("dd/MM/yyyy")
|
|
||||||
sdfrmt.isLenient = false
|
|
||||||
javaDate = sdfrmt.parse(dateString)
|
|
||||||
} catch (e: ParseException) {
|
|
||||||
e.printStackTrace()
|
|
||||||
} finally {
|
|
||||||
if (javaDate != null) {
|
|
||||||
mYear = dateString.substring(6, dateString.length).toInt()
|
|
||||||
mMonth = dateString.substring(3, 5).toInt() - 1
|
|
||||||
mDay = dateString.substring(0, 2).toInt()
|
|
||||||
} else {
|
|
||||||
val calendar: Calendar = Calendar.getInstance()
|
|
||||||
mYear = calendar.get(Calendar.YEAR)
|
|
||||||
mMonth = calendar.get(Calendar.MONTH)
|
|
||||||
mDay = calendar.get(Calendar.DAY_OF_MONTH)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Log.i(
|
|
||||||
this.javaClass.simpleName, ("init: year =" + mYear +
|
|
||||||
"month = " + mMonth +
|
|
||||||
"day = " + mDay)
|
|
||||||
)
|
|
||||||
updateDate(mYear, mMonth, mDay)
|
|
||||||
setOnDateSetListener(null)
|
|
||||||
this.setTitle(context.getString(R.string.set_date))
|
|
||||||
show()
|
show()
|
||||||
}
|
}
|
||||||
|
|
||||||
var dateSetListener: OnDateSetListener = object : OnDateSetListener {
|
private fun setDateFromCalender(calendar: Calendar){
|
||||||
override fun onDateSet(view: DatePicker, year: Int, month: Int, dayOfMonth: Int) {
|
val mYear = calendar.get(Calendar.YEAR)
|
||||||
mYear = year
|
val mMonth = calendar.get(Calendar.MONTH)
|
||||||
mMonth = month + 1
|
val mDay = calendar.get(Calendar.DAY_OF_MONTH)
|
||||||
mDay = dayOfMonth
|
|
||||||
editText!!.setText(
|
updateDate(mYear, mMonth, mDay)
|
||||||
(String.format("%02d", mDay) + "/" + String.format("%02d", (mMonth)) + "/" +
|
|
||||||
mYear)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Global
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import androidx.fragment.app.FragmentTransaction
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
object ExecuteFragment {
|
|
||||||
val UPLOAD_NEW: String = "upload_new"
|
|
||||||
fun executeFragment(fragment: Fragment, bundle: Bundle?) {
|
|
||||||
executeFragmentMethod(fragment, bundle)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun executeFragment(fragment: Fragment?) {
|
|
||||||
executeFragmentMethod(fragment)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun executeFragment(fragment: Fragment?, userId: String?) {
|
|
||||||
executeFragmentMethod(fragment, userId)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun executeFragment(fragment: Fragment, userId: String?, archive: String?) {
|
|
||||||
executeFragmentMethod(fragment, userId, archive)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun executeFragmentMethod(f: Fragment?) {
|
|
||||||
val fragmentTransaction: FragmentTransaction =
|
|
||||||
MainActivity.fragmentManager!!.beginTransaction()
|
|
||||||
fragmentTransaction.replace(R.id.container, (f)!!)
|
|
||||||
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
|
|
||||||
.addToBackStack(f.javaClass.simpleName).commit()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun executeFragmentMethod(f: Fragment?, user_id: String?) {
|
|
||||||
val bundle: Bundle = Bundle()
|
|
||||||
bundle.putString("user_id", user_id)
|
|
||||||
f!!.arguments = bundle
|
|
||||||
val fragmentTransaction: FragmentTransaction =
|
|
||||||
MainActivity.fragmentManager!!.beginTransaction()
|
|
||||||
fragmentTransaction.replace(R.id.container, (f))
|
|
||||||
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
|
|
||||||
.addToBackStack(f.javaClass.simpleName).commit()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun executeFragmentMethod(f: Fragment, user_id: String?, archive: String?) {
|
|
||||||
val bundle: Bundle = Bundle()
|
|
||||||
bundle.putString("user_id", user_id)
|
|
||||||
bundle.putString("archive", archive)
|
|
||||||
f.arguments = bundle
|
|
||||||
val fragmentTransaction: FragmentTransaction =
|
|
||||||
MainActivity.fragmentManager!!.beginTransaction()
|
|
||||||
fragmentTransaction.replace(R.id.container, f)
|
|
||||||
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
|
|
||||||
.addToBackStack(f.javaClass.simpleName).commit()
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun executeFragmentMethod(f: Fragment, b: Bundle?) {
|
|
||||||
if (b != null) {
|
|
||||||
f.arguments = b
|
|
||||||
}
|
|
||||||
val fragmentTransaction: FragmentTransaction =
|
|
||||||
MainActivity.fragmentManager!!.beginTransaction()
|
|
||||||
fragmentTransaction.replace(R.id.container, f)
|
|
||||||
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
|
|
||||||
.addToBackStack(f.javaClass.simpleName).commit()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,15 +1,7 @@
|
|||||||
package h_mal.appttude.com.driver.Global
|
package h_mal.appttude.com.driver.Global
|
||||||
|
|
||||||
import android.app.ProgressDialog
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import com.google.android.gms.tasks.Continuation
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.storage.OnProgressListener
|
|
||||||
import com.google.firebase.storage.StorageReference
|
|
||||||
import com.google.firebase.storage.UploadTask
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.utils.displayToast
|
|
||||||
|
|
||||||
class FirebaseClass constructor(var context: Context?, var filePath: Uri?, var delegate: Response) {
|
class FirebaseClass constructor(var context: Context?, var filePath: Uri?, var delegate: Response) {
|
||||||
open interface Response {
|
open interface Response {
|
||||||
@@ -17,46 +9,41 @@ class FirebaseClass constructor(var context: Context?, var filePath: Uri?, var d
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun uploadImage(path: String, name: String) {
|
fun uploadImage(path: String, name: String) {
|
||||||
if (filePath != null) {
|
// if (filePath != null) {
|
||||||
val progressDialog: ProgressDialog = ProgressDialog(context)
|
// val progressDialog: ProgressDialog = ProgressDialog(context)
|
||||||
progressDialog.setTitle("Uploading...")
|
// progressDialog.setTitle("Uploading...")
|
||||||
progressDialog.show()
|
// progressDialog.show()
|
||||||
val ref: StorageReference = MainActivity.storageReference!!.child(
|
// val ref: StorageReference = MainActivity.storageReference!!.child(
|
||||||
("images/" + MainActivity.auth!!.currentUser!!
|
// ("images/" + MainActivity.auth!!.currentUser!!
|
||||||
.uid + "/" + path
|
// .uid + "/" + path
|
||||||
+ "/" + name)
|
// + "/" + name)
|
||||||
)
|
// )
|
||||||
val uploadTask: UploadTask = ref.putFile(filePath!!)
|
// val uploadTask: UploadTask = ref.putFile(filePath!!)
|
||||||
uploadTask.addOnProgressListener(object : OnProgressListener<UploadTask.TaskSnapshot> {
|
// uploadTask.addOnProgressListener { taskSnapshot ->
|
||||||
override fun onProgress(taskSnapshot: UploadTask.TaskSnapshot) {
|
// val progress: Double =
|
||||||
val progress: Double =
|
// (100.0 * taskSnapshot.bytesTransferred / taskSnapshot
|
||||||
(100.0 * taskSnapshot.bytesTransferred / taskSnapshot
|
// .totalByteCount)
|
||||||
.totalByteCount)
|
// progressDialog.setMessage("Uploaded " + progress.toInt() + "%")
|
||||||
progressDialog.setMessage("Uploaded " + progress.toInt() + "%")
|
// }.continueWithTask { task ->
|
||||||
}
|
// if (!task.isSuccessful) {
|
||||||
}).continueWithTask(object : Continuation<UploadTask.TaskSnapshot?, Task<Uri>> {
|
// throw (task.exception)!!
|
||||||
@Throws(Exception::class)
|
// }
|
||||||
override fun then(task: Task<UploadTask.TaskSnapshot?>): Task<Uri> {
|
//
|
||||||
if (!task.isSuccessful) {
|
// // Continue with the task to get the download URL
|
||||||
throw (task.exception)!!
|
// ref.downloadUrl
|
||||||
}
|
// }.addOnCompleteListener { task ->
|
||||||
|
// if (task.isSuccessful) {
|
||||||
// Continue with the task to get the download URL
|
// delegate.processFinish(task.result)
|
||||||
return ref.downloadUrl
|
// progressDialog.dismiss()
|
||||||
}
|
// context?.displayToast("Uploaded Successfully")
|
||||||
}).addOnCompleteListener { task ->
|
// println("onComplete: uploaded Successful uri: " + task.result)
|
||||||
if (task.isSuccessful) {
|
// } else {
|
||||||
delegate.processFinish(task.result)
|
// delegate.processFinish(null)
|
||||||
progressDialog.dismiss()
|
// progressDialog.dismiss()
|
||||||
context?.displayToast("Uploaded Successfully")
|
// context?.displayToast("Uploaded Successfully")
|
||||||
println("onComplete: uploaded Successful uri: " + task.result)
|
// }
|
||||||
} else {
|
// }
|
||||||
delegate.processFinish(null)
|
// }
|
||||||
progressDialog.dismiss()
|
|
||||||
context?.displayToast("Uploaded Successfully")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
@@ -11,13 +11,11 @@ import android.net.Uri
|
|||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.view.View
|
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.app.ActivityCompat
|
import androidx.core.app.ActivityCompat
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.driver.R
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@@ -55,27 +53,24 @@ class ImageSelectorDialog : Dialog {
|
|||||||
)
|
)
|
||||||
val permissionCam: Int =
|
val permissionCam: Int =
|
||||||
ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
|
ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
|
||||||
fragment = MainActivity.fragmentManager!!.fragments.get(0)
|
// fragment = MainActivity.mainFragmentManager.fragments[0]
|
||||||
val upload: Button = findViewById(R.id.upload)
|
val upload: Button = findViewById(R.id.upload)
|
||||||
val takePic: Button = findViewById(R.id.take_pic)
|
val takePic: Button = findViewById(R.id.take_pic)
|
||||||
upload.setOnClickListener(object : View.OnClickListener {
|
upload.setOnClickListener {
|
||||||
override fun onClick(v: View) {
|
|
||||||
if (permissionPic == PackageManager.PERMISSION_GRANTED) {
|
if (permissionPic == PackageManager.PERMISSION_GRANTED) {
|
||||||
chooseImage()
|
chooseImage()
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(context, "Storage permissions required", Toast.LENGTH_SHORT)
|
Toast.makeText(context, "Storage permissions required", Toast.LENGTH_SHORT)
|
||||||
.show()
|
.show()
|
||||||
ActivityCompat.requestPermissions(
|
ActivityCompat.requestPermissions(
|
||||||
(fragment.getActivity())!!,
|
(fragment!!.requireActivity()),
|
||||||
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
|
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
|
||||||
STORAGE_PERMISSION_CODE
|
STORAGE_PERMISSION_CODE
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
})
|
takePic.setOnClickListener {
|
||||||
takePic.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
if (permissionCam == PackageManager.PERMISSION_GRANTED) {
|
if (permissionCam == PackageManager.PERMISSION_GRANTED) {
|
||||||
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
|
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
|
||||||
val file: File = createFile()
|
val file: File = createFile()
|
||||||
@@ -86,18 +81,17 @@ class ImageSelectorDialog : Dialog {
|
|||||||
file
|
file
|
||||||
)
|
)
|
||||||
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
|
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
|
||||||
fragment.startActivityForResult(cameraIntent, CAMERA_REQUEST)
|
fragment!!.startActivityForResult(cameraIntent, CAMERA_REQUEST)
|
||||||
} else {
|
} else {
|
||||||
Toast.makeText(context, "Camera Permissions required", Toast.LENGTH_SHORT)
|
Toast.makeText(context, "Camera Permissions required", Toast.LENGTH_SHORT)
|
||||||
.show()
|
.show()
|
||||||
ActivityCompat.requestPermissions(
|
ActivityCompat.requestPermissions(
|
||||||
(fragment.getActivity())!!, arrayOf(Manifest.permission.CAMERA),
|
(fragment!!.requireActivity()), arrayOf(Manifest.permission.CAMERA),
|
||||||
MY_CAMERA_PERMISSION_CODE
|
MY_CAMERA_PERMISSION_CODE
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
dismiss()
|
dismiss()
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setImageName(saveFileName: String) {
|
fun setImageName(saveFileName: String) {
|
||||||
|
|||||||
@@ -8,26 +8,26 @@ import android.graphics.Bitmap
|
|||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.util.Log
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.core.app.ActivityCompat
|
import androidx.core.app.ActivityCompat
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
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.File
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
class ImageSelectorResults // public FilepathResponse delegate;
|
class ImageSelectorResults // public FilepathResponse delegate;
|
||||||
{
|
{
|
||||||
var activity: Activity? = null
|
lateinit var activity: Activity
|
||||||
|
|
||||||
open interface FilepathResponse {
|
interface FilepathResponse {
|
||||||
fun processFinish(output: Uri?)
|
fun processFinish(output: Uri?)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Results(
|
fun Results(
|
||||||
activity: Activity?, requestCode: Int, resultCode: Int, data: Intent?, filePath: Uri?,
|
activity: Activity, requestCode: Int, resultCode: Int, data: Intent?, filePath: Uri?,
|
||||||
imageView: ImageView?, delegate: FilepathResponse
|
imageView: ImageView?, delegate: FilepathResponse
|
||||||
) {
|
) {
|
||||||
var filePath: Uri? = filePath
|
var filePath: Uri? = filePath
|
||||||
@@ -35,11 +35,11 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
|||||||
if ((requestCode == ImageSelectorDialog.PICK_IMAGE_REQUEST) && (resultCode == Activity.RESULT_OK
|
if ((requestCode == ImageSelectorDialog.PICK_IMAGE_REQUEST) && (resultCode == Activity.RESULT_OK
|
||||||
) && (data != null) && (data.data != null)
|
) && (data != null) && (data.data != null)
|
||||||
) {
|
) {
|
||||||
filePath = data.data
|
val uri = data.data
|
||||||
var bitmap: Bitmap? = null
|
var bitmap: Bitmap? = null
|
||||||
try {
|
try {
|
||||||
bitmap =
|
bitmap =
|
||||||
MediaStore.Images.Media.getBitmap(activity!!.contentResolver, filePath)
|
MediaStore.Images.Media.getBitmap(activity.contentResolver, uri)
|
||||||
if (imageView!!.visibility != View.VISIBLE) {
|
if (imageView!!.visibility != View.VISIBLE) {
|
||||||
imageView.visibility = View.VISIBLE
|
imageView.visibility = View.VISIBLE
|
||||||
}
|
}
|
||||||
@@ -48,8 +48,7 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
|||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
} finally {
|
} finally {
|
||||||
if (bitmap != null) {
|
if (bitmap != null) {
|
||||||
delegate.processFinish(filePath)
|
delegate.processFinish(uri)
|
||||||
Log.i(javaClass.simpleName, "Results: " + filePath)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -67,9 +66,9 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
|||||||
try {
|
try {
|
||||||
val f: File =
|
val f: File =
|
||||||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
|
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
|
||||||
val fname: String = "driver" + MainActivity.dateStamp + ".jpg"
|
val fname: String = "driver" + getDateStamp() + ".jpg"
|
||||||
val image: File = File(f, fname)
|
val image = File(f, fname)
|
||||||
val fileOutputStream: FileOutputStream = FileOutputStream(image)
|
val fileOutputStream = FileOutputStream(image)
|
||||||
filePath = ImageSelectorDialog.photoURI
|
filePath = ImageSelectorDialog.photoURI
|
||||||
val bitmap: Bitmap = MediaStore.Images.Media
|
val bitmap: Bitmap = MediaStore.Images.Media
|
||||||
.getBitmap(
|
.getBitmap(
|
||||||
@@ -86,12 +85,11 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
delegate.processFinish(filePath)
|
delegate.processFinish(filePath)
|
||||||
Log.i(javaClass.simpleName, "Results: " + filePath)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Results(
|
fun Results(
|
||||||
activity: Activity?,
|
activity: Activity,
|
||||||
requestCode: Int,
|
requestCode: Int,
|
||||||
resultCode: Int,
|
resultCode: Int,
|
||||||
data: Intent?,
|
data: Intent?,
|
||||||
@@ -107,20 +105,19 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
|||||||
var bitmap: Bitmap? = null
|
var bitmap: Bitmap? = null
|
||||||
try {
|
try {
|
||||||
bitmap =
|
bitmap =
|
||||||
MediaStore.Images.Media.getBitmap(activity!!.contentResolver, filePath)
|
MediaStore.Images.Media.getBitmap(activity.contentResolver, filePath)
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
} finally {
|
} finally {
|
||||||
if (bitmap != null) {
|
if (bitmap != null) {
|
||||||
delegate.processFinish(filePath)
|
delegate.processFinish(filePath)
|
||||||
Log.i(javaClass.simpleName, "Results: " + filePath)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (requestCode == ImageSelectorDialog.CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
|
if (requestCode == ImageSelectorDialog.CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
|
||||||
//check if we have we have storage rights
|
//check if we have we have storage rights
|
||||||
val permission: Int = ActivityCompat.checkSelfPermission(
|
val permission: Int = ActivityCompat.checkSelfPermission(
|
||||||
(activity)!!,
|
(activity),
|
||||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||||
)
|
)
|
||||||
if (permission != PackageManager.PERMISSION_GRANTED) {
|
if (permission != PackageManager.PERMISSION_GRANTED) {
|
||||||
@@ -131,7 +128,7 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
|||||||
try {
|
try {
|
||||||
val f: File =
|
val f: File =
|
||||||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
|
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
|
||||||
val fname: String = "driver" + MainActivity.dateStamp + ".jpg"
|
val fname: String = "driver" + getDateTimeStamp() + ".jpg"
|
||||||
val image: File = File(f, fname)
|
val image: File = File(f, fname)
|
||||||
val fileOutputStream: FileOutputStream = FileOutputStream(image)
|
val fileOutputStream: FileOutputStream = FileOutputStream(image)
|
||||||
filePath = ImageSelectorDialog.photoURI
|
filePath = ImageSelectorDialog.photoURI
|
||||||
@@ -149,7 +146,6 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
delegate.processFinish(filePath)
|
delegate.processFinish(filePath)
|
||||||
Log.i(javaClass.simpleName, "Results: " + filePath)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,6 +154,6 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
|||||||
val f: File = File(ImageSelectorDialog.photoURI!!.path)
|
val f: File = File(ImageSelectorDialog.photoURI!!.path)
|
||||||
val contentUri: Uri = Uri.fromFile(f)
|
val contentUri: Uri = Uri.fromFile(f)
|
||||||
mediaScanIntent.data = contentUri
|
mediaScanIntent.data = contentUri
|
||||||
activity!!.sendBroadcast(mediaScanIntent)
|
activity.sendBroadcast(mediaScanIntent)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,195 +1,159 @@
|
|||||||
package h_mal.appttude.com.driver.Global
|
package h_mal.appttude.com.driver.Global
|
||||||
|
|
||||||
import android.app.AlertDialog
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.DialogInterface
|
import android.content.ContextWrapper
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.view.animation.AlphaAnimation
|
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import androidx.viewpager.widget.PagerAdapter
|
|
||||||
import androidx.viewpager.widget.ViewPager
|
|
||||||
import androidx.viewpager.widget.ViewPager.OnPageChangeListener
|
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.driver.R
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
|
|
||||||
class ImageSwiperClass constructor(private val context: Context?, wholeView: View?) {
|
class ImageSwiperClass(
|
||||||
private val left: ImageView
|
private val context: Context?,
|
||||||
private var mainImage: ImageView? = null
|
wholeView: View
|
||||||
private val right: ImageView
|
) : ContextWrapper(context) {
|
||||||
var imageStrings: MutableList<String?>? = null
|
private var left: ImageView = wholeView.findViewById(R.id.left)
|
||||||
private set
|
private var right: ImageView = wholeView.findViewById(R.id.right)
|
||||||
private var adapter: SlidingImageViewAdapter? = null
|
|
||||||
var viewPager: ViewPager
|
|
||||||
var delete: ImageView
|
|
||||||
fun addPhotoString(s: String?) {
|
|
||||||
if (imageStrings == null) {
|
|
||||||
imageStrings = ArrayList()
|
|
||||||
}
|
|
||||||
imageStrings!!.add(s)
|
|
||||||
adapter = SlidingImageViewAdapter()
|
|
||||||
viewPager.adapter = adapter
|
|
||||||
}
|
|
||||||
|
|
||||||
fun reinstantiateList(imageStrings: MutableList<String?>?) {
|
var list: List<Any>? = null
|
||||||
this.imageStrings = imageStrings
|
|
||||||
adapter = SlidingImageViewAdapter()
|
|
||||||
viewPager.adapter = adapter
|
|
||||||
setArrows()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun hideDelete() {
|
// fun addLocalString(uris: List<Uri>) {
|
||||||
delete.visibility = View.INVISIBLE
|
// list = uris
|
||||||
Log.i(TAG, "hideDelete: hides deleete?")
|
// }
|
||||||
}
|
//
|
||||||
|
// fun addFirebaseStrings(uris: List<String>) {
|
||||||
private val leftClick: View.OnClickListener = object : View.OnClickListener {
|
// list = uris
|
||||||
override fun onClick(v: View) {
|
// }
|
||||||
viewPager.currentItem = viewPager.currentItem - 1
|
//
|
||||||
setArrows()
|
// private var adapter: SlidingImageViewAdapter? = null
|
||||||
}
|
// lateinit var viewPager: ViewPager
|
||||||
}
|
//
|
||||||
private val rightClick: View.OnClickListener = object : View.OnClickListener {
|
//
|
||||||
override fun onClick(v: View) {
|
// fun reinstantiateList(imageStrings: MutableList<String?>?) {
|
||||||
viewPager.currentItem = viewPager.currentItem + 1
|
// this.imageStrings = imageStrings
|
||||||
setArrows()
|
// adapter = SlidingImageViewAdapter()
|
||||||
}
|
// viewPager.adapter = adapter
|
||||||
}
|
// setArrows()
|
||||||
|
// }
|
||||||
private fun deleteDialog(position: Int) {
|
//
|
||||||
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
// fun hideDelete() {
|
||||||
builder.setMessage("Are you sure you want to delete?")
|
// delete.hide()
|
||||||
.setPositiveButton(android.R.string.ok, object : DialogInterface.OnClickListener {
|
// }
|
||||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
//
|
||||||
imageStrings!!.removeAt(position)
|
// private val leftClick: View.OnClickListener = View.OnClickListener {
|
||||||
viewPager.adapter = adapter
|
// viewPager.currentItem = viewPager.currentItem - 1
|
||||||
// adapter.notifyDataSetChanged();
|
// setArrows()
|
||||||
}
|
// }
|
||||||
})
|
// private val rightClick: View.OnClickListener = View.OnClickListener {
|
||||||
.setNegativeButton(android.R.string.cancel, null)
|
// viewPager.currentItem = viewPager.currentItem + 1
|
||||||
.create()
|
// setArrows()
|
||||||
.show()
|
// }
|
||||||
}
|
//
|
||||||
|
// private fun deleteDialog(position: Int) {
|
||||||
private fun setArrows() {
|
// val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
||||||
if (imageStrings != null && imageStrings!!.size > 0) {
|
// builder.setMessage("Are you sure you want to delete?")
|
||||||
//left arrow
|
// .setPositiveButton(
|
||||||
if (viewPager.currentItem > 0) {
|
// android.R.string.ok
|
||||||
setAnimation(left, true)
|
// ) { _, _ ->
|
||||||
} else {
|
// imageStrings!!.removeAt(position)
|
||||||
setAnimation(left, false)
|
// viewPager.adapter = adapter
|
||||||
}
|
// // adapter.notifyDataSetChanged();
|
||||||
|
// }
|
||||||
//right
|
// .setNegativeButton(android.R.string.cancel, null)
|
||||||
if (viewPager.currentItem == imageStrings!!.size - 1) {
|
// .create()
|
||||||
setAnimation(right, false)
|
// .show()
|
||||||
} else {
|
// }
|
||||||
setAnimation(right, true)
|
//
|
||||||
}
|
// private fun setArrows() {
|
||||||
}
|
// with(list) {
|
||||||
if (imageStrings == null) {
|
// when (list) {
|
||||||
setAnimation(left, false)
|
// isNullOrEmpty() -> { }
|
||||||
setAnimation(right, false)
|
// isNotEmpty() -> { }
|
||||||
}
|
//
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
private fun setAnimation(view: ImageView, up: Boolean) {
|
//
|
||||||
val start: Float
|
// if (list?.isNotEmpty()) {
|
||||||
val finish: Float
|
// //left arrow
|
||||||
if (up) {
|
// if (viewPager.currentItem > 0) {
|
||||||
start = 0.2f
|
// setAnimation(left, true)
|
||||||
finish = 1.0f
|
// } else {
|
||||||
} else {
|
// setAnimation(left, false)
|
||||||
start = 1.0f
|
// }
|
||||||
finish = 0.2f
|
//
|
||||||
}
|
// //right
|
||||||
// if (view.getAlpha() != start){
|
// if (viewPager.currentItem == imageStrings!!.size - 1) {
|
||||||
val animation1: AlphaAnimation = AlphaAnimation(start, finish)
|
// setAnimation(right, false)
|
||||||
animation1.duration = 500
|
// } else {
|
||||||
animation1.fillAfter = true
|
// setAnimation(right, true)
|
||||||
// view.startAnimation(animation1);
|
// }
|
||||||
view.alpha = finish
|
// }
|
||||||
// }
|
// if (imageStrings == null) {
|
||||||
}
|
// setAnimation(left, false)
|
||||||
|
// setAnimation(right, false)
|
||||||
internal inner class SlidingImageViewAdapter : PagerAdapter() {
|
// }
|
||||||
override fun getCount(): Int {
|
// }
|
||||||
if (imageStrings == null || imageStrings!!.size < 1) {
|
//
|
||||||
delete.visibility = View.GONE
|
// private fun setAnimation(view: ImageView, up: Boolean) {
|
||||||
return 0
|
// val start: Float
|
||||||
} else {
|
// val finish: Float
|
||||||
delete.visibility = View.VISIBLE
|
// if (up) {
|
||||||
return imageStrings!!.size
|
// start = 0.2f
|
||||||
}
|
// finish = 1.0f
|
||||||
}
|
// } else {
|
||||||
|
// start = 1.0f
|
||||||
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
|
// finish = 0.2f
|
||||||
if (`object` != null) {
|
// }
|
||||||
container.removeView(`object` as View?)
|
// val animation1 = AlphaAnimation(start, finish)
|
||||||
} else {
|
// animation1.duration = 500
|
||||||
container.removeViewAt(position)
|
// animation1.fillAfter = true
|
||||||
}
|
// view.alpha = finish
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
override fun isViewFromObject(view: View, o: Any): Boolean {
|
// internal inner class SlidingImageViewAdapter : PagerAdapter() {
|
||||||
return (view == o)
|
//
|
||||||
}
|
// override fun getCount(): Int = list?.size ?: 0
|
||||||
|
//
|
||||||
override fun instantiateItem(container: ViewGroup, position: Int): Any {
|
// override fun destroyItem(container: ViewGroup, position: Int, item: Any) {
|
||||||
val pagerPic: View =
|
// container.removeView(item as View?)
|
||||||
LayoutInflater.from(context).inflate(R.layout.insurance_item, container, false)
|
// }
|
||||||
setArrows()
|
//
|
||||||
if (imageStrings != null && imageStrings!!.size > 0) {
|
// override fun isViewFromObject(view: View, o: Any): Boolean = view == o
|
||||||
mainImage = pagerPic.rootView.findViewById(R.id.main_image)
|
//
|
||||||
Picasso.get().load(imageStrings!!.get(position))
|
// override fun instantiateItem(container: ViewGroup, position: Int): Any {
|
||||||
.placeholder(R.drawable.choice_img)
|
// val pagerPic: View =
|
||||||
.into(MainActivity.loadImage(mainImage))
|
// LayoutInflater.from(context).inflate(R.layout.insurance_item, container, false)
|
||||||
}
|
// setArrows()
|
||||||
container.addView(pagerPic, 0)
|
// if (imageStrings != null && imageStrings!!.size > 0) {
|
||||||
return pagerPic
|
// mainImage = pagerPic.rootView.findViewById(R.id.main_image)
|
||||||
}
|
// Picasso.get().load(imageStrings!!.get(position))
|
||||||
|
// .placeholder(R.drawable.choice_img)
|
||||||
override fun notifyDataSetChanged() {
|
// .into(MainActivity.loadImage(mainImage))
|
||||||
super.notifyDataSetChanged()
|
// }
|
||||||
}
|
// container.addView(pagerPic, 0)
|
||||||
}
|
// return pagerPic
|
||||||
|
// }
|
||||||
companion object {
|
// }
|
||||||
private val TAG: String = "ImageSwiperClass"
|
//
|
||||||
}
|
//
|
||||||
|
// init {
|
||||||
init {
|
// left.setOnClickListener(leftClick)
|
||||||
left = wholeView!!.findViewById(R.id.left)
|
// right.setOnClickListener(rightClick)
|
||||||
right = wholeView.findViewById(R.id.right)
|
// viewPager = wholeView.findViewById(R.id.view_pager)
|
||||||
left.setOnClickListener(leftClick)
|
// delete = wholeView.findViewById(R.id.delete)
|
||||||
right.setOnClickListener(rightClick)
|
// viewPager.addOnPageChangeListener(object : OnPageChangeListener {
|
||||||
viewPager = wholeView.findViewById(R.id.view_pager)
|
// override fun onPageScrolled(i: Int, v: Float, i1: Int) {
|
||||||
delete = wholeView.findViewById(R.id.delete)
|
// val animation1: AlphaAnimation = AlphaAnimation(0.2f, 1.0f)
|
||||||
viewPager.addOnPageChangeListener(object : OnPageChangeListener {
|
// animation1.duration = 200
|
||||||
override fun onPageScrolled(i: Int, v: Float, i1: Int) {
|
// animation1.fillAfter = true
|
||||||
val animation1: AlphaAnimation = AlphaAnimation(0.2f, 1.0f)
|
// delete.startAnimation(animation1)
|
||||||
animation1.duration = 200
|
// }
|
||||||
animation1.fillAfter = true
|
//
|
||||||
delete.startAnimation(animation1)
|
// override fun onPageSelected(i: Int) {
|
||||||
}
|
// setArrows()
|
||||||
|
// delete.setOnClickListener { deleteDialog(i) }
|
||||||
override fun onPageSelected(i: Int) {
|
// }
|
||||||
Log.i(TAG, "onPageSelected: position = " + i)
|
//
|
||||||
setArrows()
|
// override fun onPageScrollStateChanged(i: Int) {}
|
||||||
delete.setOnClickListener(object : View.OnClickListener {
|
// })
|
||||||
override fun onClick(v: View) {
|
// }
|
||||||
deleteDialog(i)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPageScrollStateChanged(i: Int) {}
|
|
||||||
})
|
|
||||||
Log.i(TAG, "ImageSwiperClass: viewpager = " + viewPager.id)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -13,8 +13,8 @@ import androidx.appcompat.app.AppCompatActivity
|
|||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import com.github.chrisbanes.photoview.PhotoView
|
import com.github.chrisbanes.photoview.PhotoView
|
||||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.utils.DateUtils
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileNotFoundException
|
import java.io.FileNotFoundException
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
@@ -24,11 +24,12 @@ import java.io.IOException
|
|||||||
class ImageViewClass {
|
class ImageViewClass {
|
||||||
fun open(bitmap: Bitmap?) {
|
fun open(bitmap: Bitmap?) {
|
||||||
Companion.bitmap = bitmap
|
Companion.bitmap = bitmap
|
||||||
ExecuteFragment.executeFragment(ImageViewerFragment())
|
// executeFragment(ImageViewerFragment())
|
||||||
}
|
}
|
||||||
|
|
||||||
class ImageViewerFragment : Fragment() {
|
class ImageViewerFragment : Fragment() {
|
||||||
private var view: View? = null
|
private lateinit var viewer: View
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
}
|
}
|
||||||
@@ -38,10 +39,10 @@ class ImageViewClass {
|
|||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View? {
|
): View? {
|
||||||
// Inflate the layout for this fragment
|
// Inflate the layout for this fragment
|
||||||
view = inflater.inflate(R.layout.fragment_image_viewer, container, false)
|
viewer = inflater.inflate(R.layout.fragment_image_viewer, container, false)
|
||||||
val fab: FloatingActionButton = view.findViewById(R.id.download_pic)
|
val fab: FloatingActionButton = viewer.findViewById(R.id.download_pic)
|
||||||
if (bitmap != null) {
|
if (bitmap != null) {
|
||||||
val photoView: PhotoView = view.findViewById(R.id.photo_view)
|
val photoView: PhotoView = viewer.findViewById(R.id.photo_view)
|
||||||
photoView.setImageBitmap(bitmap)
|
photoView.setImageBitmap(bitmap)
|
||||||
fab.setOnClickListener(object : View.OnClickListener {
|
fab.setOnClickListener(object : View.OnClickListener {
|
||||||
override fun onClick(v: View) {
|
override fun onClick(v: View) {
|
||||||
@@ -53,26 +54,26 @@ class ImageViewClass {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return view
|
return viewer
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
(activity as AppCompatActivity?)!!.supportActionBar!!.hide()
|
(activity as AppCompatActivity?)!!.supportActionBar!!.hide()
|
||||||
activity!!.window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onStop() {
|
override fun onStop() {
|
||||||
super.onStop()
|
super.onStop()
|
||||||
(activity as AppCompatActivity?)!!.supportActionBar!!.show()
|
(activity as AppCompatActivity?)!!.supportActionBar!!.show()
|
||||||
activity!!.window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Throws(FileNotFoundException::class)
|
@Throws(FileNotFoundException::class)
|
||||||
private fun downloadPic() {
|
private fun downloadPic() {
|
||||||
val f: File =
|
val f: File =
|
||||||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
|
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
|
||||||
val fname: String = "driver" + MainActivity.Companion.dateStamp + ".jpg"
|
val fname: String = "driver" + DateUtils.getDateTimeStamp() + ".jpg"
|
||||||
val image: File = File(f, fname)
|
val image: File = File(f, fname)
|
||||||
val fileOutputStream: FileOutputStream = FileOutputStream(image)
|
val fileOutputStream: FileOutputStream = FileOutputStream(image)
|
||||||
bitmap!!.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream)
|
bitmap!!.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream)
|
||||||
@@ -82,7 +83,7 @@ class ImageViewClass {
|
|||||||
val mediaScanIntent: Intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
|
val mediaScanIntent: Intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
|
||||||
val contentUri: Uri = Uri.fromFile(image)
|
val contentUri: Uri = Uri.fromFile(image)
|
||||||
mediaScanIntent.data = contentUri
|
mediaScanIntent.data = contentUri
|
||||||
activity!!.sendBroadcast(mediaScanIntent)
|
requireActivity().sendBroadcast(mediaScanIntent)
|
||||||
} catch (e: IOException) {
|
} catch (e: IOException) {
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,7 @@ package h_mal.appttude.com.driver.Global
|
|||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.DialogInterface
|
import android.content.DialogInterface
|
||||||
import android.view.View
|
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.Toast
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
|
|
||||||
|
|
||||||
class SetApprovalDialog constructor(
|
class SetApprovalDialog constructor(
|
||||||
@@ -61,35 +56,33 @@ class SetApprovalDialog constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun publishStatuscode(status: Int, dialog: DialogInterface) {
|
private fun publishStatuscode(status: Int, dialog: DialogInterface) {
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
if (!(approvalNameString == "")) {
|
// if (!(approvalNameString == "")) {
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
||||||
(userId)!!
|
// (userId)!!
|
||||||
).child(FirebaseClass.USER_APPROVALS).child(approvalNameString)
|
// ).child(FirebaseClass.USER_APPROVALS).child(approvalNameString)
|
||||||
.setValue(status).addOnCompleteListener(object : OnCompleteListener<Void?> {
|
// .setValue(status).addOnCompleteListener { task ->
|
||||||
override fun onComplete(task: Task<Void?>) {
|
// if (task.isSuccessful) {
|
||||||
if (task.isSuccessful) {
|
// Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT)
|
||||||
Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT)
|
// .show()
|
||||||
.show()
|
// imageView.setImageResource(
|
||||||
imageView.setImageResource(
|
// MainActivity.approvalsClass!!.setImageResource(
|
||||||
MainActivity.approvalsClass!!.setImageResource(
|
// status
|
||||||
status
|
// )
|
||||||
)
|
// )
|
||||||
)
|
// dialog.dismiss()
|
||||||
dialog.dismiss()
|
// } else {
|
||||||
} else {
|
// Toast.makeText(
|
||||||
Toast.makeText(
|
// activity,
|
||||||
activity,
|
// "Status change unsuccessful",
|
||||||
"Status change unsuccessful",
|
// Toast.LENGTH_SHORT
|
||||||
Toast.LENGTH_SHORT
|
// ).show()
|
||||||
).show()
|
// }
|
||||||
}
|
//
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
// }
|
||||||
}
|
// } else {
|
||||||
})
|
// Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show()
|
||||||
} else {
|
// }
|
||||||
Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getElement(i: Int): String {
|
private fun getElement(i: Int): String {
|
||||||
|
|||||||
@@ -1,206 +1,106 @@
|
|||||||
package h_mal.appttude.com.driver
|
package h_mal.appttude.com.driver
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.app.Activity
|
|
||||||
import android.app.AlertDialog
|
|
||||||
import android.content.DialogInterface
|
|
||||||
import android.content.Intent
|
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
|
||||||
import android.view.Menu
|
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.ProgressBar
|
|
||||||
import android.widget.TextView
|
|
||||||
import androidx.appcompat.app.ActionBarDrawerToggle
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
import androidx.appcompat.widget.Toolbar
|
|
||||||
import androidx.core.app.ActivityCompat
|
|
||||||
import androidx.core.view.GravityCompat
|
import androidx.core.view.GravityCompat
|
||||||
import androidx.drawerlayout.widget.DrawerLayout
|
import androidx.navigation.NavController
|
||||||
import androidx.fragment.app.FragmentManager
|
import androidx.navigation.findNavController
|
||||||
|
import androidx.navigation.ui.AppBarConfiguration
|
||||||
|
import androidx.navigation.ui.navigateUp
|
||||||
|
import androidx.navigation.ui.setupActionBarWithNavController
|
||||||
|
import androidx.navigation.ui.setupWithNavController
|
||||||
import com.google.android.material.navigation.NavigationView
|
import com.google.android.material.navigation.NavigationView
|
||||||
import com.google.firebase.auth.FirebaseAuth
|
|
||||||
import com.google.firebase.auth.FirebaseUser
|
import com.google.firebase.auth.FirebaseUser
|
||||||
import com.google.firebase.database.*
|
|
||||||
import com.google.firebase.storage.FirebaseStorage
|
|
||||||
import com.google.firebase.storage.StorageReference
|
|
||||||
import com.google.gson.Gson
|
|
||||||
import com.google.gson.GsonBuilder
|
|
||||||
import com.google.gson.JsonElement
|
|
||||||
import com.google.gson.JsonParser
|
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import com.squareup.picasso.Picasso.LoadedFrom
|
import com.squareup.picasso.Picasso.LoadedFrom
|
||||||
import com.squareup.picasso.Target
|
import com.squareup.picasso.Target
|
||||||
import h_mal.appttude.com.driver.Driver.DriverOverallFragment
|
import h_mal.appttude.com.driver.Global.ApprovalsClass
|
||||||
import h_mal.appttude.com.driver.Driver.VehicleOverallFragment
|
import h_mal.appttude.com.driver.Global.ArchiveClass
|
||||||
import h_mal.appttude.com.driver.Driver.homeDriverFragment
|
import h_mal.appttude.com.driver.Global.ImageViewClass
|
||||||
import h_mal.appttude.com.driver.Global.*
|
import h_mal.appttude.com.driver.base.BaseActivity
|
||||||
import h_mal.appttude.com.driver.Global.ViewController.ViewControllerInterface
|
import h_mal.appttude.com.driver.dialogs.ExitDialog.displayExitDialog
|
||||||
import h_mal.appttude.com.driver.SuperUser.homeSuperUserFragment
|
|
||||||
import h_mal.appttude.com.driver.user.LoginActivity
|
import h_mal.appttude.com.driver.user.LoginActivity
|
||||||
import h_mal.appttude.com.driver.user.profileFragment
|
import h_mal.appttude.com.driver.utils.ActivityIntentBuilder.createIntent
|
||||||
import java.text.ParseException
|
import h_mal.appttude.com.driver.utils.setPicassoImage
|
||||||
import java.text.SimpleDateFormat
|
import h_mal.appttude.com.driver.viewmodels.MainViewModel
|
||||||
import java.util.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
|
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||||
|
import kotlinx.android.synthetic.main.nav_header_main.view.*
|
||||||
|
|
||||||
|
|
||||||
class MainActivity : AppCompatActivity(),
|
class MainActivity : BaseActivity<MainViewModel>(),
|
||||||
NavigationView.OnNavigationItemSelectedListener, ViewControllerInterface {
|
NavigationView.OnNavigationItemSelectedListener {
|
||||||
var navigationView: NavigationView? = null
|
|
||||||
var progressBar: ProgressBar? = null
|
private val vm by createLazyViewModel<MainViewModel>()
|
||||||
var toolbar: Toolbar? = null
|
override fun getViewModel(): MainViewModel = vm
|
||||||
|
override val layoutId: Int = R.layout.activity_main
|
||||||
|
|
||||||
|
lateinit var navController: NavController
|
||||||
|
lateinit var appBarConfiguration: AppBarConfiguration
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.activity_main)
|
|
||||||
viewController = ViewController(this)
|
|
||||||
imageViewClass = ImageViewClass()
|
imageViewClass = ImageViewClass()
|
||||||
approvalsClass = ApprovalsClass()
|
approvalsClass = ApprovalsClass()
|
||||||
archiveClass = ArchiveClass()
|
archiveClass = ArchiveClass()
|
||||||
auth = FirebaseAuth.getInstance()
|
|
||||||
storage = FirebaseStorage.getInstance()
|
|
||||||
storageReference = storage!!.reference
|
|
||||||
mDatabase = FirebaseDatabase.getInstance().reference
|
|
||||||
val ref: DatabaseReference = mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
|
||||||
.child(auth.getCurrentUser()!!.uid)
|
|
||||||
.child("role")
|
|
||||||
toolbar = findViewById<View>(R.id.toolbar) as Toolbar?
|
|
||||||
setSupportActionBar(toolbar)
|
setSupportActionBar(toolbar)
|
||||||
val drawer: DrawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout
|
navController = findNavController(R.id.container)
|
||||||
val toggle: ActionBarDrawerToggle = ActionBarDrawerToggle(
|
|
||||||
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close
|
appBarConfiguration = AppBarConfiguration(navController.graph, drawer_layout)
|
||||||
)
|
nav_view.setupWithNavController(navController)
|
||||||
drawer.addDrawerListener(toggle)
|
setupActionBarWithNavController(navController, appBarConfiguration)
|
||||||
toggle.syncState()
|
|
||||||
navigationView = findViewById<View>(R.id.nav_view) as NavigationView?
|
getViewModel().getUserDetails()
|
||||||
navigationView!!.setNavigationItemSelectedListener(this)
|
setupLogoutInDrawer()
|
||||||
setupDrawer()
|
|
||||||
fragmentManager = supportFragmentManager
|
|
||||||
fragmentManager.addOnBackStackChangedListener(backStackChangedListener)
|
|
||||||
progressBar = findViewById(R.id.progress_bar)
|
|
||||||
progressBar.setVisibility(View.VISIBLE)
|
|
||||||
ref.addListenerForSingleValueEvent(object : ValueEventListener {
|
|
||||||
override fun onDataChange(dataSnapshot: DataSnapshot) {
|
|
||||||
val role: String? = dataSnapshot.value as String?
|
|
||||||
Log.i(TAG, "onDataChange: " + role)
|
|
||||||
if ((role == "driver")) {
|
|
||||||
ExecuteFragment.executeFragment(homeDriverFragment())
|
|
||||||
} else if ((role == "super_user")) {
|
|
||||||
ExecuteFragment.executeFragment(homeSuperUserFragment())
|
|
||||||
}
|
|
||||||
drawerMenuItems(role)
|
|
||||||
progressBar.setVisibility(View.GONE)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCancelled(databaseError: DatabaseError) {
|
override fun onSupportNavigateUp(): Boolean {
|
||||||
progressBar.setVisibility(View.GONE)
|
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
var backStackChangedListener: FragmentManager.OnBackStackChangedListener =
|
|
||||||
object : FragmentManager.OnBackStackChangedListener {
|
|
||||||
override fun onBackStackChanged() {
|
|
||||||
val fragmentString: String =
|
|
||||||
fragmentManager!!.fragments.get(0).javaClass.simpleName
|
|
||||||
val title: String
|
|
||||||
when (fragmentString) {
|
|
||||||
"DriverProfileFragment" -> title = "Driver Profile"
|
|
||||||
"DriverLicenseFragment" -> title = "Drivers License"
|
|
||||||
"InsuranceFragment" -> title = "Insurance"
|
|
||||||
"logbookFragment" -> title = "Logbook"
|
|
||||||
"MotFragment" -> title = "M.O.T"
|
|
||||||
"PrivateHireLicenseFragment" -> title = "Private Hire License"
|
|
||||||
"VehicleSetupFragment" -> title = "Vehicle Profile"
|
|
||||||
"UserMainFragment" -> return
|
|
||||||
"ArchiveFragment" -> return
|
|
||||||
else -> title = resources.getString(R.string.app_name)
|
|
||||||
}
|
|
||||||
setTitle(title)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setTitle(title: CharSequence) {
|
override fun setTitle(title: CharSequence) {
|
||||||
toolbar!!.title = title
|
toolbar.title = title
|
||||||
}
|
|
||||||
|
|
||||||
fun drawerMenuItems(s: String?) {
|
|
||||||
if ((s == "super_user")) {
|
|
||||||
val menu: Menu = navigationView!!.menu
|
|
||||||
menu.removeGroup(R.id.menu_group)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun setupDrawer() {
|
|
||||||
val header: View = navigationView!!.getHeaderView(0)
|
|
||||||
val driverEmail: TextView = header.findViewById(R.id.driver_email)
|
|
||||||
val driverName: TextView = header.findViewById(R.id.driver_name)
|
|
||||||
val driverImage: ImageView = header.findViewById(R.id.profileImage)
|
|
||||||
if (auth != null) {
|
|
||||||
val user: FirebaseUser? = auth!!.currentUser
|
|
||||||
if (user!!.email != null) {
|
|
||||||
driverEmail.text = user.email
|
|
||||||
}
|
|
||||||
if (user.displayName != null) {
|
|
||||||
driverName.text = user.displayName
|
|
||||||
}
|
|
||||||
Picasso.get()
|
|
||||||
.load(user.photoUrl)
|
|
||||||
.placeholder(R.drawable.choice_img_round)
|
|
||||||
.into(driverImage)
|
|
||||||
}
|
|
||||||
val textView: TextView = findViewById(R.id.logout)
|
|
||||||
textView.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
auth!!.signOut()
|
|
||||||
val intent: Intent = Intent(applicationContext, LoginActivity::class.java)
|
|
||||||
startActivity(intent)
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onBackPressed() {
|
||||||
val drawer: DrawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout
|
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
|
||||||
if (drawer.isDrawerOpen(GravityCompat.START)) {
|
drawer_layout.closeDrawer(GravityCompat.START)
|
||||||
drawer.closeDrawer(GravityCompat.START)
|
|
||||||
} else {
|
} else {
|
||||||
if (fragmentManager!!.backStackEntryCount > 1) {
|
val navHostFragment = supportFragmentManager.findFragmentById(R.id.container)
|
||||||
if ((fragmentManager!!.fragments.get(0).javaClass
|
navHostFragment?.childFragmentManager?.backStackEntryCount?.takeIf { it > 1 }?.let {
|
||||||
.simpleName == "InsuranceFragment")
|
return super.onBackPressed()
|
||||||
) {
|
|
||||||
AlertDialog.Builder(this)
|
|
||||||
.setTitle("Return to previous?")
|
|
||||||
.setMessage("Progress unsaved. Are you sure?")
|
|
||||||
.setNegativeButton(android.R.string.no, null)
|
|
||||||
.setPositiveButton(
|
|
||||||
android.R.string.yes,
|
|
||||||
object : DialogInterface.OnClickListener {
|
|
||||||
override fun onClick(arg0: DialogInterface, arg1: Int) {
|
|
||||||
fragmentManager!!.popBackStack()
|
|
||||||
}
|
}
|
||||||
}).create().show()
|
displayExitDialog()
|
||||||
} else {
|
|
||||||
fragmentManager!!.popBackStack()
|
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
AlertDialog.Builder(this)
|
|
||||||
.setTitle("Leave?")
|
override fun onSuccess(data: Any?) {
|
||||||
.setMessage("Are you sure you want to exit?")
|
super.onSuccess(data)
|
||||||
.setNegativeButton(android.R.string.no, null)
|
when(data){
|
||||||
.setPositiveButton(
|
is FirebaseUser -> {
|
||||||
android.R.string.yes,
|
setupDrawer(data)
|
||||||
object : DialogInterface.OnClickListener {
|
}
|
||||||
override fun onClick(arg0: DialogInterface, arg1: Int) {
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupDrawer(user: FirebaseUser) {
|
||||||
|
val header: View = nav_view.getHeaderView(0)
|
||||||
|
header.driver_email.text = user.email
|
||||||
|
header.driver_name.text = user.displayName
|
||||||
|
header.profileImage.setPicassoImage(user.photoUrl)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupLogoutInDrawer(){
|
||||||
|
logout.setOnClickListener {
|
||||||
|
getViewModel().logOut()
|
||||||
|
startActivity(createIntent<LoginActivity>())
|
||||||
finish()
|
finish()
|
||||||
System.exit(0)
|
|
||||||
}
|
|
||||||
}).create().show()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,8 +108,7 @@ class MainActivity : AppCompatActivity(),
|
|||||||
// Handle action bar item clicks here. The action bar will
|
// Handle action bar item clicks here. The action bar will
|
||||||
// automatically handle clicks on the Home/Up button, so long
|
// automatically handle clicks on the Home/Up button, so long
|
||||||
// as you specify a parent activity in AndroidManifest.xml.
|
// as you specify a parent activity in AndroidManifest.xml.
|
||||||
val id: Int = item.itemId
|
if (item.itemId == R.id.action_settings) {
|
||||||
if (id == R.id.action_settings) {
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item)
|
return super.onOptionsItemSelected(item)
|
||||||
@@ -217,66 +116,29 @@ class MainActivity : AppCompatActivity(),
|
|||||||
|
|
||||||
override fun onNavigationItemSelected(item: MenuItem): Boolean {
|
override fun onNavigationItemSelected(item: MenuItem): Boolean {
|
||||||
// Handle navigation view item clicks here.
|
// Handle navigation view item clicks here.
|
||||||
val id: Int = item.itemId
|
when (item.itemId) {
|
||||||
if (id == R.id.nav_camera) {
|
R.id.nav_user_settings -> { }
|
||||||
// Handle the camera action
|
|
||||||
ExecuteFragment.executeFragment(profileFragment())
|
|
||||||
} else if (id == R.id.nav_gallery) {
|
|
||||||
ExecuteFragment.executeFragment(DriverOverallFragment())
|
|
||||||
} else if (id == R.id.nav_slideshow) {
|
|
||||||
ExecuteFragment.executeFragment(VehicleOverallFragment())
|
|
||||||
}
|
}
|
||||||
val drawer: DrawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout
|
drawer_layout.closeDrawer(GravityCompat.START)
|
||||||
drawer.closeDrawer(GravityCompat.START)
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun progressVisibility(vis: Int) {
|
|
||||||
progressBar!!.visibility = vis
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun updateDrawer() {
|
|
||||||
setupDrawer()
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val TAG: String = MainActivity::class.java.simpleName
|
|
||||||
var fragmentManager: FragmentManager? = null
|
lateinit var imageViewClass: ImageViewClass
|
||||||
var auth: FirebaseAuth? = null
|
lateinit var approvalsClass: ApprovalsClass
|
||||||
var storage: FirebaseStorage? = null
|
lateinit var archiveClass: ArchiveClass
|
||||||
var storageReference: StorageReference? = null
|
private const val REQUEST_EXTERNAL_STORAGE: Int = 1
|
||||||
var mDatabase: DatabaseReference? = null
|
|
||||||
var viewController: ViewController? = null
|
|
||||||
var imageViewClass: ImageViewClass? = null
|
|
||||||
var approvalsClass: ApprovalsClass? = null
|
|
||||||
var archiveClass: ArchiveClass? = null
|
|
||||||
private val REQUEST_EXTERNAL_STORAGE: Int = 1
|
|
||||||
private val PERMISSIONS_STORAGE: Array<String> = arrayOf(
|
private val PERMISSIONS_STORAGE: Array<String> = arrayOf(
|
||||||
Manifest.permission.READ_EXTERNAL_STORAGE,
|
Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||||
)
|
)
|
||||||
|
|
||||||
fun verifyStoragePermissions(activity: Activity?) {
|
|
||||||
// Check if we have write permission
|
|
||||||
val permission: Int = ActivityCompat.checkSelfPermission(
|
|
||||||
(activity)!!,
|
|
||||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
|
||||||
)
|
|
||||||
if (permission != PackageManager.PERMISSION_GRANTED) {
|
|
||||||
// We don't have permission so prompt the user
|
|
||||||
ActivityCompat.requestPermissions(
|
|
||||||
(activity),
|
|
||||||
PERMISSIONS_STORAGE,
|
|
||||||
REQUEST_EXTERNAL_STORAGE
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun loadImage(mainImage: ImageView?): Target {
|
fun loadImage(mainImage: ImageView?): Target {
|
||||||
val target: Target = object : Target {
|
val target: Target = object : Target {
|
||||||
override fun onBitmapLoaded(bitmap: Bitmap, from: LoadedFrom) {
|
override fun onBitmapLoaded(bitmap: Bitmap, from: LoadedFrom) {
|
||||||
mainImage!!.setImageBitmap(bitmap)
|
mainImage!!.setImageBitmap(bitmap)
|
||||||
mainImage.setOnClickListener(View.OnClickListener { imageViewClass!!.open(bitmap) })
|
mainImage.setOnClickListener{ imageViewClass.open(bitmap) }
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBitmapFailed(e: Exception, errorDrawable: Drawable) {}
|
override fun onBitmapFailed(e: Exception, errorDrawable: Drawable) {}
|
||||||
@@ -288,31 +150,5 @@ class MainActivity : AppCompatActivity(),
|
|||||||
return target
|
return target
|
||||||
}
|
}
|
||||||
|
|
||||||
val dateStamp: String
|
|
||||||
get() {
|
|
||||||
val sdf: SimpleDateFormat = SimpleDateFormat("yyyyMMdd_HHmm")
|
|
||||||
return sdf.format(Date())
|
|
||||||
}
|
|
||||||
val dateTimeStamp: String
|
|
||||||
get() {
|
|
||||||
val sdf: SimpleDateFormat = SimpleDateFormat("yyyyMMdd_HHmmss")
|
|
||||||
return sdf.format(Date())
|
|
||||||
}
|
|
||||||
|
|
||||||
@Throws(ParseException::class)
|
|
||||||
fun setAsDateTime(strCurrentDate: String?): String {
|
|
||||||
var format: SimpleDateFormat = SimpleDateFormat("yyyyMMdd_HHmmss")
|
|
||||||
val newDate: Date = format.parse(strCurrentDate)
|
|
||||||
format = SimpleDateFormat("dd/MM/yyyy")
|
|
||||||
return format.format(newDate)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun printObjectAsJson(TAG: String?, o: Any?) {
|
|
||||||
val gson: Gson = GsonBuilder().setPrettyPrinting().create()
|
|
||||||
val jp: JsonParser = JsonParser()
|
|
||||||
val je: JsonElement = jp.parse(Gson().toJson(o))
|
|
||||||
val prettyJsonString: String = gson.toJson(je)
|
|
||||||
Log.i(TAG, "onBindViewHolder: object" + prettyJsonString)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,9 @@
|
|||||||
package h_mal.appttude.com.driver.Objects
|
package h_mal.appttude.com.driver.Objects
|
||||||
|
|
||||||
|
import h_mal.appttude.com.driver.model.DriversLicenseObject
|
||||||
|
import h_mal.appttude.com.driver.model.MotObject
|
||||||
|
import h_mal.appttude.com.driver.model.PrivateHireObject
|
||||||
|
import h_mal.appttude.com.driver.model.VehicleProfileObject
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class ArchiveObject {
|
class ArchiveObject {
|
||||||
@@ -27,6 +31,6 @@ class ArchiveObject {
|
|||||||
this.insurance_details = insurance_details
|
this.insurance_details = insurance_details
|
||||||
this.mot_details = mot_details
|
this.mot_details = mot_details
|
||||||
this.log_book = log_book
|
this.log_book = log_book
|
||||||
ph_car = private_hire_vehicle
|
this.ph_car = private_hire_vehicle
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Objects
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DriverProfileObject {
|
|
||||||
var driverPic: String? = null
|
|
||||||
var forenames: String? = null
|
|
||||||
var address: String? = null
|
|
||||||
var postcode: String? = null
|
|
||||||
var dob: String? = null
|
|
||||||
var ni: String? = null
|
|
||||||
var dateFirst: String? = null
|
|
||||||
|
|
||||||
constructor()
|
|
||||||
constructor(
|
|
||||||
driverPic: String?, forenames: String?, address: String?,
|
|
||||||
postcode: String?, dob: String?, ni: String?, dateFirst: String?
|
|
||||||
) {
|
|
||||||
this.driverPic = driverPic
|
|
||||||
this.forenames = forenames
|
|
||||||
this.address = address
|
|
||||||
this.postcode = postcode
|
|
||||||
this.dob = dob
|
|
||||||
this.ni = ni
|
|
||||||
this.dateFirst = dateFirst
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Objects
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class DriversLicenseObject {
|
|
||||||
var licenseImageString: String? = null
|
|
||||||
var licenseNumber: String? = null
|
|
||||||
var licenseExpiry: String? = null
|
|
||||||
|
|
||||||
constructor()
|
|
||||||
constructor(licenseImageString: String?, licenseNumber: String?, licenseExpiry: String?) {
|
|
||||||
this.licenseImageString = licenseImageString
|
|
||||||
this.licenseNumber = licenseNumber
|
|
||||||
this.licenseExpiry = licenseExpiry
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,15 +2,8 @@ package h_mal.appttude.com.driver.Objects
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class InsuranceObject {
|
data class InsuranceObject (
|
||||||
var photoStrings: MutableList<String?>? = null
|
var photoStrings: MutableList<String?>? = null,
|
||||||
var insurerName: String? = null
|
var insurerName: String? = null,
|
||||||
var expiryDate: String? = null
|
var expiryDate: String? = null
|
||||||
|
)
|
||||||
constructor()
|
|
||||||
constructor(photoStrings: MutableList<String?>?, insurerName: String?, expiryDate: String?) {
|
|
||||||
this.photoStrings = photoStrings
|
|
||||||
this.insurerName = insurerName
|
|
||||||
this.expiryDate = expiryDate
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Objects
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MotObject {
|
|
||||||
var motImageString: String? = null
|
|
||||||
var motExpiry: String? = null
|
|
||||||
|
|
||||||
constructor()
|
|
||||||
constructor(motImageString: String?, motExpiry: String?) {
|
|
||||||
this.motImageString = motImageString
|
|
||||||
this.motExpiry = motExpiry
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Objects
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PrivateHireObject {
|
|
||||||
var phImageString: String? = null
|
|
||||||
var phNumber: String? = null
|
|
||||||
var phExpiry: String? = null
|
|
||||||
|
|
||||||
constructor()
|
|
||||||
constructor(phImageString: String?, phNumber: String?, phExpiry: String?) {
|
|
||||||
this.phImageString = phImageString
|
|
||||||
this.phNumber = phNumber
|
|
||||||
this.phExpiry = phExpiry
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,16 +2,8 @@ package h_mal.appttude.com.driver.Objects
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
class PrivateHireVehicleObject {
|
class PrivateHireVehicleObject(
|
||||||
var phCarImageString: String? = null
|
var phCarImageString: String? = null,
|
||||||
var phCarNumber: String? = null
|
var phCarNumber: String? = null,
|
||||||
var phCarExpiry: String? = null
|
var phCarExpiry: String? = null
|
||||||
|
)
|
||||||
constructor(phCarImageString: String?, phCarNumber: String?, phCarExpiry: String?) {
|
|
||||||
this.phCarImageString = phCarImageString
|
|
||||||
this.phCarNumber = phCarNumber
|
|
||||||
this.phCarExpiry = phCarExpiry
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor()
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.Objects
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class VehicleProfileObject {
|
|
||||||
var reg: String? = null
|
|
||||||
var make: String? = null
|
|
||||||
var model: String? = null
|
|
||||||
var colour: String? = null
|
|
||||||
var keeperName: String? = null
|
|
||||||
var keeperAddress: String? = null
|
|
||||||
var keeperPostCode: String? = null
|
|
||||||
var startDate: String? = null
|
|
||||||
var isSeized: Boolean = false
|
|
||||||
|
|
||||||
constructor()
|
|
||||||
constructor(
|
|
||||||
reg: String?, make: String?, model: String?, colour: String?, keeperName: String?,
|
|
||||||
keeperAddress: String?, keeperPostCode: String?, startDate: String?, seized: Boolean
|
|
||||||
) {
|
|
||||||
this.reg = reg
|
|
||||||
this.make = make
|
|
||||||
this.model = model
|
|
||||||
this.colour = colour
|
|
||||||
this.keeperName = keeperName
|
|
||||||
this.keeperAddress = keeperAddress
|
|
||||||
this.keeperPostCode = keeperPostCode
|
|
||||||
this.startDate = startDate
|
|
||||||
isSeized = seized
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
package h_mal.appttude.com.driver.Objects.WholeObject
|
package h_mal.appttude.com.driver.Objects.WholeObject
|
||||||
|
|
||||||
import h_mal.appttude.com.driver.Objects.DriverProfileObject
|
import h_mal.appttude.com.driver.model.DriverProfileObject
|
||||||
import h_mal.appttude.com.driver.Objects.DriversLicenseObject
|
import h_mal.appttude.com.driver.model.DriversLicenseObject
|
||||||
import h_mal.appttude.com.driver.Objects.PrivateHireObject
|
import h_mal.appttude.com.driver.model.PrivateHireObject
|
||||||
|
|
||||||
|
|
||||||
class DriverProfile {
|
class DriverProfile {
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ class MappedObject : Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val CREATOR: Parcelable.Creator<MappedObject> = object : Parcelable.Creator<MappedObject?> {
|
val CREATOR: Parcelable.Creator<MappedObject?> = object : Parcelable.Creator<MappedObject?> {
|
||||||
override fun createFromParcel(`in`: Parcel): MappedObject? {
|
override fun createFromParcel(`in`: Parcel): MappedObject? {
|
||||||
return MappedObject(`in`)
|
return MappedObject(`in`)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
package h_mal.appttude.com.driver.Objects.WholeObject
|
package h_mal.appttude.com.driver.Objects.WholeObject
|
||||||
|
|
||||||
import h_mal.appttude.com.driver.Objects.*
|
import h_mal.appttude.com.driver.Objects.InsuranceObject
|
||||||
|
import h_mal.appttude.com.driver.Objects.LogbookObject
|
||||||
|
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
|
||||||
|
import h_mal.appttude.com.driver.model.MotObject
|
||||||
|
import h_mal.appttude.com.driver.model.VehicleProfileObject
|
||||||
|
|
||||||
|
|
||||||
class VehicleProfile {
|
class VehicleProfile {
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package h_mal.appttude.com.driver.SuperUser
|
|||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.DisplayMetrics
|
import android.util.DisplayMetrics
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
@@ -11,22 +10,29 @@ import android.widget.ArrayAdapter
|
|||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import h_mal.appttude.com.driver.Archive.ArchiveFragment
|
|
||||||
import h_mal.appttude.com.driver.Driver.*
|
|
||||||
import h_mal.appttude.com.driver.Global.ExecuteFragment
|
|
||||||
import h_mal.appttude.com.driver.Global.FirebaseClass
|
import h_mal.appttude.com.driver.Global.FirebaseClass
|
||||||
import h_mal.appttude.com.driver.Global.SetApprovalDialog
|
import h_mal.appttude.com.driver.Global.SetApprovalDialog
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
import h_mal.appttude.com.driver.MainActivity
|
||||||
import h_mal.appttude.com.driver.Objects.ApprovalsObject
|
|
||||||
import h_mal.appttude.com.driver.Objects.ArchiveObject
|
import h_mal.appttude.com.driver.Objects.ArchiveObject
|
||||||
import h_mal.appttude.com.driver.Objects.WholeDriverObject
|
|
||||||
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
|
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.driver.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 constructor(activity: Activity, objects: Array<MappedObject>) :
|
class ApprovalListAdapter(
|
||||||
ArrayAdapter<MappedObject?>(activity, 0, objects) {
|
val activity: Activity,
|
||||||
private val TAG: String = "ApprovalListAdapter"
|
objects: Array<MappedObject>
|
||||||
|
): ArrayAdapter<MappedObject?>(activity, 0, objects) {
|
||||||
|
|
||||||
|
var mappedObject: MappedObject = objects[0]
|
||||||
|
|
||||||
var names: Array<String> = arrayOf(
|
var names: Array<String> = arrayOf(
|
||||||
"Driver Profile",
|
"Driver Profile",
|
||||||
"Driver License",
|
"Driver License",
|
||||||
@@ -37,8 +43,8 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
|
|||||||
"Logbook",
|
"Logbook",
|
||||||
"P/H Vehicle"
|
"P/H Vehicle"
|
||||||
)
|
)
|
||||||
var mappedObject: MappedObject
|
|
||||||
var activity: Activity
|
|
||||||
var approvalCode: Int = 0
|
var approvalCode: Int = 0
|
||||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||||
var listItemView: View? = convertView
|
var listItemView: View? = convertView
|
||||||
@@ -56,32 +62,24 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
|
|||||||
approvalCode
|
approvalCode
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
imageView.setOnClickListener(object : View.OnClickListener {
|
imageView.setOnClickListener {
|
||||||
override fun onClick(v: View) {
|
|
||||||
SetApprovalDialog(
|
SetApprovalDialog(
|
||||||
approvalCode,
|
approvalCode,
|
||||||
activity,
|
activity,
|
||||||
mappedObject.getUserId(),
|
mappedObject.userId,
|
||||||
position,
|
position,
|
||||||
imageView
|
imageView
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
})
|
|
||||||
val archiveImage: ImageView = listItemView.findViewById(R.id.archive_icon)
|
val archiveImage: ImageView = listItemView.findViewById(R.id.archive_icon)
|
||||||
if (mappedObject.getWholeDriverObject().archive != null) {
|
mappedObject.wholeDriverObject?.archive?.let {
|
||||||
Log.i(
|
|
||||||
TAG,
|
|
||||||
"getView: archive = " + getArchive(
|
|
||||||
position,
|
|
||||||
mappedObject.getWholeDriverObject().getArchive()
|
|
||||||
)
|
|
||||||
)
|
|
||||||
archiveImage.visibility = getArchive(
|
archiveImage.visibility = getArchive(
|
||||||
position,
|
position,
|
||||||
mappedObject.getWholeDriverObject().getArchive()
|
it
|
||||||
)
|
)
|
||||||
archiveImage.setOnClickListener(object : View.OnClickListener {
|
archiveImage.setOnClickListener {
|
||||||
override fun onClick(v: View) {
|
|
||||||
var s: String? = null
|
var s: String? = null
|
||||||
when (position) {
|
when (position) {
|
||||||
1 -> s = FirebaseClass.DRIVERS_LICENSE_FIREBASE
|
1 -> s = FirebaseClass.DRIVERS_LICENSE_FIREBASE
|
||||||
@@ -92,15 +90,10 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
|
|||||||
6 -> s = FirebaseClass.LOG_BOOK_FIREBASE
|
6 -> s = FirebaseClass.LOG_BOOK_FIREBASE
|
||||||
7 -> s = FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE
|
7 -> s = FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE
|
||||||
}
|
}
|
||||||
ExecuteFragment.executeFragment(ArchiveFragment(), mappedObject.getUserId(), s)
|
// executeFragment(ArchiveFragment(), mappedObject.userId, s)
|
||||||
}
|
}
|
||||||
})
|
|
||||||
}
|
}
|
||||||
listItemView.setOnClickListener(object : View.OnClickListener {
|
listItemView.setOnClickListener(View.OnClickListener { getFragment(position) })
|
||||||
override fun onClick(v: View) {
|
|
||||||
getFragment(position)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
listItemView.minimumHeight = parent.height / 4
|
listItemView.minimumHeight = parent.height / 4
|
||||||
listItemView.setPadding(
|
listItemView.setPadding(
|
||||||
convertDpToPixel(9f, context).toInt(),
|
convertDpToPixel(9f, context).toInt(),
|
||||||
@@ -119,15 +112,14 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
|
|||||||
var o: Any? = null
|
var o: Any? = null
|
||||||
val visible: Int
|
val visible: Int
|
||||||
when (i) {
|
when (i) {
|
||||||
0 -> {
|
0 -> { }
|
||||||
}
|
|
||||||
1 -> o = archiveObject!!.driver_license
|
1 -> o = archiveObject!!.driver_license
|
||||||
2 -> o = archiveObject!!.private_hire
|
2 -> o = archiveObject!!.private_hire
|
||||||
3 -> o = archiveObject!!.vehicle_details
|
3 -> o = archiveObject!!.vehicle_details
|
||||||
4 -> o = archiveObject!!.insurance_details
|
4 -> o = archiveObject!!.insurance_details
|
||||||
5 -> o = archiveObject!!.mot_details
|
5 -> o = archiveObject!!.mot_details
|
||||||
6 -> o = archiveObject!!.log_book
|
6 -> o = archiveObject!!.log_book
|
||||||
7 -> o = archiveObject.private_hire_vehicle
|
7 -> o = archiveObject!!.ph_car
|
||||||
}
|
}
|
||||||
if (o != null) {
|
if (o != null) {
|
||||||
visible = View.VISIBLE
|
visible = View.VISIBLE
|
||||||
@@ -138,101 +130,68 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getFragment(i: Int) {
|
private fun getFragment(i: Int) {
|
||||||
var f: Fragment? = null
|
lateinit var f: Fragment
|
||||||
val wholeDriverObject: WholeDriverObject? = mappedObject.getWholeDriverObject()
|
val driverProfile by lazy { mappedObject.wholeDriverObject?.driver_profile }
|
||||||
var o: Any? = null
|
val vehicleProfile by lazy { mappedObject.wholeDriverObject?.vehicle_profile }
|
||||||
when (i) {
|
val o: Any? = when (i) {
|
||||||
0 -> {
|
0 -> {
|
||||||
f = DriverProfileFragment()
|
f = DriverProfileFragment()
|
||||||
if (wholeDriverObject!!.driver_profile != null && wholeDriverObject.getDriver_profile().driver_profile != null) {
|
driverProfile?.driver_profile
|
||||||
o = wholeDriverObject.getDriver_profile().getDriver_profile()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
1 -> {
|
1 -> {
|
||||||
f = DriverLicenseFragment()
|
f = DriverLicenseFragment()
|
||||||
if (wholeDriverObject!!.driver_profile != null && wholeDriverObject.getDriver_profile().driver_license != null) {
|
driverProfile?.driver_license
|
||||||
o = wholeDriverObject.getDriver_profile().driver_license
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
2 -> {
|
2 -> {
|
||||||
f = PrivateHireLicenseFragment()
|
f = PrivateHireLicenseFragment()
|
||||||
if (wholeDriverObject!!.driver_profile != null && wholeDriverObject.getDriver_profile().private_hire != null) {
|
driverProfile?.private_hire
|
||||||
o = wholeDriverObject.getDriver_profile().private_hire
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
3 -> {
|
3 -> {
|
||||||
f = VehicleSetupFragment()
|
f = VehicleProfileFragment()
|
||||||
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().vehicle_details != null) {
|
vehicleProfile?.vehicle_details
|
||||||
o = wholeDriverObject.getVehicle_profile().getVehicle_details()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
4 -> {
|
4 -> {
|
||||||
f = InsuranceFragment()
|
f = InsuranceFragment()
|
||||||
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().insurance_details != null) {
|
vehicleProfile?.insurance_details
|
||||||
o = wholeDriverObject.getVehicle_profile().getInsurance_details()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
5 -> {
|
5 -> {
|
||||||
f = MotFragment()
|
f = MotFragment()
|
||||||
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().mot_details != null) {
|
vehicleProfile?.insurance_details
|
||||||
o = wholeDriverObject.getVehicle_profile().getMot_details()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
6 -> {
|
6 -> {
|
||||||
f = logbookFragment()
|
f = LogbookFragment()
|
||||||
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().log_book != null) {
|
vehicleProfile?.log_book
|
||||||
o = wholeDriverObject.getVehicle_profile().getLog_book()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
7 -> {
|
7 -> {
|
||||||
f = PrivateHireVehicleFragment()
|
f = PrivateHireVehicleFragment()
|
||||||
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().private_hire_vehicle != null) {
|
vehicleProfile?.privateHireVehicleObject
|
||||||
o = wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else -> null
|
||||||
}
|
}
|
||||||
if (o == null) {
|
if (o == null) {
|
||||||
ExecuteFragment.executeFragment(f, mappedObject.getUserId())
|
// executeFragment(f, mappedObject.userId)
|
||||||
} else {
|
} else {
|
||||||
MainActivity.archiveClass!!.openDialogArchive(
|
MainActivity.archiveClass.openDialogArchive(
|
||||||
context, o, mappedObject.getUserId(), f
|
context, o, mappedObject.userId, f
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getApprovalStatusCode(i: Int): Int {
|
private fun getApprovalStatusCode(i: Int): Int {
|
||||||
var statusCode: Int = FirebaseClass.NO_DATE_PRESENT
|
val statusCode = mappedObject.wholeDriverObject?.approvalsObject?.let{
|
||||||
if (mappedObject.getWholeDriverObject().approvalsObject != null) {
|
|
||||||
val approvalsObject: ApprovalsObject? =
|
|
||||||
mappedObject.getWholeDriverObject().approvalsObject
|
|
||||||
when (i) {
|
when (i) {
|
||||||
0 -> if (approvalsObject!!.driver_details_approval != 0) {
|
0 -> it.driver_details_approval
|
||||||
statusCode = approvalsObject.getDriver_details_approval()
|
1 -> it.driver_license_approval
|
||||||
}
|
2 -> it.private_hire_approval
|
||||||
1 -> if (approvalsObject!!.driver_license_approval != 0) {
|
3 -> it.vehicle_details_approval
|
||||||
statusCode = approvalsObject.driver_license_approval
|
4 -> it.insurance_details_approval
|
||||||
}
|
5 -> it.mot_details_approval
|
||||||
2 -> if (approvalsObject!!.private_hire_approval != 0) {
|
6 -> it.log_book_approval
|
||||||
statusCode = approvalsObject.private_hire_approval
|
7 -> it.ph_car_approval
|
||||||
}
|
else -> FirebaseClass.NO_DATE_PRESENT
|
||||||
3 -> if (approvalsObject!!.vehicle_details_approval != 0) {
|
|
||||||
statusCode = approvalsObject.vehicle_details_approval
|
|
||||||
}
|
|
||||||
4 -> if (approvalsObject!!.insurance_details_approval != 0) {
|
|
||||||
statusCode = approvalsObject.insurance_details_approval
|
|
||||||
}
|
|
||||||
5 -> if (approvalsObject!!.mot_details_approval != 0) {
|
|
||||||
statusCode = approvalsObject.getMot_details_approval()
|
|
||||||
}
|
|
||||||
6 -> if (approvalsObject!!.log_book_approval != 0) {
|
|
||||||
statusCode = approvalsObject.getLog_book_approval()
|
|
||||||
}
|
|
||||||
7 -> if (approvalsObject.private_hire_vehicle_approval != 0) {
|
|
||||||
statusCode = approvalsObject.getPh_car_approval()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return statusCode ?: FirebaseClass.NO_DATE_PRESENT
|
||||||
return statusCode
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -242,8 +201,5 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init {
|
|
||||||
mappedObject = objects.get(0)
|
|
||||||
this.activity = activity
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -2,13 +2,8 @@ package h_mal.appttude.com.driver.SuperUser
|
|||||||
|
|
||||||
import android.app.AlertDialog
|
import android.app.AlertDialog
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.DialogInterface
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import androidx.cardview.widget.CardView
|
import androidx.cardview.widget.CardView
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import h_mal.appttude.com.driver.Global.FirebaseClass
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
|
|
||||||
|
|
||||||
class DriverStatusClass : View.OnClickListener {
|
class DriverStatusClass : View.OnClickListener {
|
||||||
@@ -27,24 +22,20 @@ class DriverStatusClass : View.OnClickListener {
|
|||||||
}
|
}
|
||||||
alertDialog.setSingleChoiceItems(
|
alertDialog.setSingleChoiceItems(
|
||||||
choices,
|
choices,
|
||||||
selection,
|
selection
|
||||||
object : DialogInterface.OnClickListener {
|
) { dialog, which -> }
|
||||||
override fun onClick(dialog: DialogInterface, which: Int) {}
|
|
||||||
})
|
|
||||||
alertDialog.create().show()
|
alertDialog.create().show()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun SetStatus(status: Boolean) {
|
private fun SetStatus(status: Boolean) {
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
||||||
.child((userId)!!).child(FirebaseClass.DRIVER_STATUS).setValue(status)
|
// .child((userId)!!).child(FirebaseClass.DRIVER_STATUS).setValue(status)
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
// .addOnCompleteListener { task ->
|
||||||
override fun onComplete(task: Task<Void?>) {
|
// if (task.isSuccessful) {
|
||||||
if (task.isSuccessful) {
|
// cardView!!.setBackgroundColor(setStatusColour(status))
|
||||||
cardView!!.setBackgroundColor(setStatusColour(status))
|
// } else {
|
||||||
} else {
|
// }
|
||||||
}
|
// }
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setStatusColour(b: Boolean): Int {
|
private fun setStatusColour(b: Boolean): Int {
|
||||||
@@ -63,9 +54,9 @@ class DriverStatusClass : View.OnClickListener {
|
|||||||
// approvalsObject.private_hire_approval,
|
// approvalsObject.private_hire_approval,
|
||||||
// approvalsObject.vehicle_details_approval,
|
// approvalsObject.vehicle_details_approval,
|
||||||
// approvalsObject.insurance_details_approval,
|
// approvalsObject.insurance_details_approval,
|
||||||
// approvalsObject.getMot_details_approval(),
|
// approvalsObject.mot_details_approval,
|
||||||
// approvalsObject.getLog_book_approval(),
|
// approvalsObject.log_book_approval,
|
||||||
// approvalsObject.getPh_car_approval()};
|
// approvalsObject.ph_car_approval};
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
// return setImageResource(mode(ints));
|
// return setImageResource(mode(ints));
|
||||||
|
|||||||
@@ -1,149 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.SuperUser
|
|
||||||
|
|
||||||
import android.app.AlertDialog
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.DialogInterface
|
|
||||||
import android.graphics.Bitmap
|
|
||||||
import android.graphics.drawable.BitmapDrawable
|
|
||||||
import android.graphics.drawable.Drawable
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.*
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import com.squareup.picasso.Picasso
|
|
||||||
import com.squareup.picasso.Picasso.LoadedFrom
|
|
||||||
import com.squareup.picasso.Target
|
|
||||||
import h_mal.appttude.com.driver.Global.ExecuteFragment
|
|
||||||
import h_mal.appttude.com.driver.Global.FirebaseClass
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.UserObject
|
|
||||||
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
|
|
||||||
class ListViewSuperAdapter constructor(context: Context, objects: List<MappedObject?>) :
|
|
||||||
ArrayAdapter<MappedObject?>(context, 0, objects) {
|
|
||||||
override fun getView(i: Int, convertView: View?, parent: ViewGroup): View {
|
|
||||||
var listItemView: View? = convertView
|
|
||||||
if (listItemView == null) {
|
|
||||||
listItemView = LayoutInflater.from(context).inflate(
|
|
||||||
R.layout.list_item_layout, parent, false
|
|
||||||
)
|
|
||||||
}
|
|
||||||
Log.i("getviewposition", "getView: pos = " + i)
|
|
||||||
val profilePicImage: ImageView = listItemView!!.findViewById(R.id.driverPic)
|
|
||||||
// final ProgressBar progressBar = listItemView.findViewById(R.id.pb_su_list);
|
|
||||||
val userNameTextView: TextView = listItemView.findViewById(R.id.username_text)
|
|
||||||
val userEmailTextView: TextView = listItemView.findViewById(R.id.emailaddress_text)
|
|
||||||
val profileApprovalImage: ImageView = listItemView.findViewById(R.id.approval_iv)
|
|
||||||
val driverNo: TextView = listItemView.findViewById(R.id.driver_no)
|
|
||||||
val mappedObject: MappedObject? = getItem(i)
|
|
||||||
val `object`: UserObject? = mappedObject.getWholeDriverObject().getUser_details()
|
|
||||||
if (profilePicImage.drawable == null) {
|
|
||||||
if (`object`!!.profilePicString != null) {
|
|
||||||
Picasso.get()
|
|
||||||
.load(`object`.getProfilePicString())
|
|
||||||
.resize(128, 128)
|
|
||||||
.placeholder(R.drawable.choice_img_round)
|
|
||||||
.into(object : Target {
|
|
||||||
override fun onBitmapLoaded(bitmap: Bitmap, from: LoadedFrom) {
|
|
||||||
// progressBar.setVisibility(View.GONE);
|
|
||||||
profilePicImage.setImageBitmap(bitmap)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBitmapFailed(e: Exception, errorDrawable: Drawable) {
|
|
||||||
// progressBar.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onPrepareLoad(placeHolderDrawable: Drawable) {
|
|
||||||
// progressBar.setVisibility(View.VISIBLE);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
profilePicImage.setImageResource(R.drawable.choice_img_round)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
userNameTextView.setText(`object`.getProfileName())
|
|
||||||
userEmailTextView.setText(`object`.getProfileEmail())
|
|
||||||
if (mappedObject.getWholeDriverObject().driver_number == null) {
|
|
||||||
driverNo.text = "0"
|
|
||||||
} else {
|
|
||||||
val s: String = mappedObject.getWholeDriverObject().getDriver_number().toString()
|
|
||||||
driverNo.text = s
|
|
||||||
}
|
|
||||||
driverNo.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
|
||||||
val input: EditText = EditText(context)
|
|
||||||
val layout: LinearLayout = LinearLayout(context)
|
|
||||||
layout.orientation = LinearLayout.VERTICAL
|
|
||||||
layout.setPadding(28, 0, 56, 0)
|
|
||||||
input.setText(driverNo.text.toString())
|
|
||||||
input.setSelectAllOnFocus(true)
|
|
||||||
layout.addView(input)
|
|
||||||
builder.setTitle("Change Driver Number")
|
|
||||||
.setView(layout)
|
|
||||||
.setPositiveButton("Submit", object : DialogInterface.OnClickListener {
|
|
||||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
|
||||||
val reference: DatabaseReference =
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
|
||||||
.child(mappedObject.getUserId())
|
|
||||||
.child(FirebaseClass.DRIVER_NUMBER)
|
|
||||||
Log.i("Dialog Driver no", "onClick: " + reference.toString())
|
|
||||||
reference.setValue(input.text.toString())
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void> {
|
|
||||||
override fun onComplete(task: Task<Void>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
"Driver Number Changed",
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
dialog.dismiss()
|
|
||||||
notifyDataSetChanged()
|
|
||||||
Log.i(
|
|
||||||
"Dialog Driver no",
|
|
||||||
"onComplete: " + task.result
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
Log.e(
|
|
||||||
"Dialog Driver no",
|
|
||||||
"onComplete: ",
|
|
||||||
task.exception
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
).create()
|
|
||||||
.show()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
profileApprovalImage.setImageResource(
|
|
||||||
MainActivity.approvalsClass!!.getOverApprovalStatusCode(mappedObject.getWholeDriverObject())
|
|
||||||
)
|
|
||||||
listItemView.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val bundle: Bundle = Bundle()
|
|
||||||
bundle.putParcelable("mapped", mappedObject)
|
|
||||||
ExecuteFragment.executeFragment(UserMainFragment(), bundle)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return (listItemView)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun hasImage(view: ImageView): Boolean {
|
|
||||||
val drawable: Drawable? = view.drawable
|
|
||||||
var hasImage: Boolean = (drawable != null)
|
|
||||||
if (hasImage && (drawable is BitmapDrawable)) {
|
|
||||||
hasImage = drawable.bitmap != null
|
|
||||||
}
|
|
||||||
return hasImage
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,103 @@
|
|||||||
|
package h_mal.appttude.com.driver.SuperUser
|
||||||
|
|
||||||
|
import android.app.AlertDialog
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.EditText
|
||||||
|
import android.widget.ImageView
|
||||||
|
import android.widget.LinearLayout
|
||||||
|
import android.widget.TextView
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import com.squareup.picasso.Picasso
|
||||||
|
import h_mal.appttude.com.driver.MainActivity
|
||||||
|
import h_mal.appttude.com.driver.Objects.UserObject
|
||||||
|
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
|
||||||
|
|
||||||
|
class RecyclerViewAdapter constructor(var context: Context?, var objects: List<MappedObject>?) :
|
||||||
|
RecyclerView.Adapter<RecyclerView.ViewHolder>() {
|
||||||
|
override fun onCreateViewHolder(viewGroup: ViewGroup, i: Int): RecyclerView.ViewHolder {
|
||||||
|
val viewCurrent: View =
|
||||||
|
LayoutInflater.from(context).inflate(R.layout.list_item_layout, viewGroup, false)
|
||||||
|
return ViewHolderMain(viewCurrent)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, i: Int) {
|
||||||
|
val viewHolderCurrent: ViewHolderMain = viewHolder as ViewHolderMain
|
||||||
|
val mappedObject: MappedObject = objects!!.get(i)
|
||||||
|
val `object`: UserObject? = mappedObject.wholeDriverObject?.user_details
|
||||||
|
if (`object`!!.profilePicString != null) {
|
||||||
|
Picasso.get()
|
||||||
|
.load(`object`.profilePicString)
|
||||||
|
.resize(128, 128)
|
||||||
|
.placeholder(R.drawable.choice_img_round)
|
||||||
|
.into(viewHolderCurrent.profilePicImage)
|
||||||
|
} else {
|
||||||
|
viewHolderCurrent.profilePicImage.setImageResource(R.drawable.choice_img_round)
|
||||||
|
}
|
||||||
|
viewHolderCurrent.userNameTextView.setText(`object`.profileName)
|
||||||
|
viewHolderCurrent.userEmailTextView.setText(`object`.profileEmail)
|
||||||
|
if (mappedObject.wholeDriverObject?.driver_number == null) {
|
||||||
|
viewHolderCurrent.driverNo.text = "0"
|
||||||
|
} else {
|
||||||
|
val s: String = mappedObject.wholeDriverObject?.driver_number.toString()
|
||||||
|
viewHolderCurrent.driverNo.text = s
|
||||||
|
}
|
||||||
|
viewHolderCurrent.driverNo.setOnClickListener {
|
||||||
|
val builder: AlertDialog.Builder = AlertDialog.Builder(
|
||||||
|
context
|
||||||
|
)
|
||||||
|
val input: EditText = EditText(context)
|
||||||
|
val layout: LinearLayout = LinearLayout(context)
|
||||||
|
layout.orientation = LinearLayout.VERTICAL
|
||||||
|
layout.setPadding(28, 0, 56, 0)
|
||||||
|
input.setText(viewHolderCurrent.driverNo.text.toString())
|
||||||
|
input.setSelectAllOnFocus(true)
|
||||||
|
layout.addView(input)
|
||||||
|
builder.setTitle("Change Driver Number")
|
||||||
|
.setView(layout)
|
||||||
|
.setPositiveButton(
|
||||||
|
"Submit"
|
||||||
|
) { dialog, which ->
|
||||||
|
|
||||||
|
}.create()
|
||||||
|
.show()
|
||||||
|
}
|
||||||
|
viewHolderCurrent.profileApprovalImage.setImageResource(
|
||||||
|
MainActivity.approvalsClass!!.getOverApprovalStatusCode(mappedObject.wholeDriverObject)
|
||||||
|
)
|
||||||
|
viewHolderCurrent.itemView.setOnClickListener {
|
||||||
|
val bundle: Bundle = Bundle()
|
||||||
|
bundle.putParcelable("mapped", mappedObject)
|
||||||
|
// executeFragment(UserMainFragment(), bundle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getItemCount(): Int {
|
||||||
|
return objects!!.size
|
||||||
|
}
|
||||||
|
|
||||||
|
internal inner class ViewHolderMain constructor(listItemView: View) :
|
||||||
|
RecyclerView.ViewHolder(listItemView) {
|
||||||
|
var profilePicImage: ImageView
|
||||||
|
var userNameTextView: TextView
|
||||||
|
var userEmailTextView: TextView
|
||||||
|
|
||||||
|
// CardView statusCard;
|
||||||
|
var profileApprovalImage: ImageView
|
||||||
|
var driverNo: TextView
|
||||||
|
|
||||||
|
init {
|
||||||
|
profilePicImage = listItemView.findViewById(R.id.driverPic)
|
||||||
|
userNameTextView = listItemView.findViewById(R.id.username_text)
|
||||||
|
// statusCard = listItemView.findViewById(R.id.status_icon);
|
||||||
|
userEmailTextView = listItemView.findViewById(R.id.emailaddress_text)
|
||||||
|
profileApprovalImage = listItemView.findViewById(R.id.approval_iv)
|
||||||
|
driverNo = listItemView.findViewById(R.id.driver_no)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -12,9 +12,6 @@ import h_mal.appttude.com.driver.R
|
|||||||
|
|
||||||
|
|
||||||
class UserMainFragment : Fragment() {
|
class UserMainFragment : Fragment() {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
inflater: LayoutInflater, container: ViewGroup?,
|
||||||
@@ -23,14 +20,11 @@ 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 = arguments!!.getParcelable("mapped")
|
val mappedObject: MappedObject = requireArguments().getParcelable<MappedObject>("mapped")
|
||||||
activity.setTitle(
|
activity?.title = mappedObject.wholeDriverObject?.user_details?.profileName
|
||||||
mappedObject.getWholeDriverObject().getUser_details().getProfileName()
|
|
||||||
)
|
|
||||||
|
|
||||||
// ListView listView = view.findViewById(R.id.approvals_list);
|
|
||||||
val listView: GridView = view.findViewById(R.id.approvals_list)
|
val listView: GridView = view.findViewById(R.id.approvals_list)
|
||||||
listView.adapter = ApprovalListAdapter((activity)!!, arrayOf(mappedObject))
|
listView.adapter = ApprovalListAdapter(requireActivity(), arrayOf(mappedObject))
|
||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -8,36 +8,31 @@ import android.util.Log
|
|||||||
import android.view.*
|
import android.view.*
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
import com.google.firebase.database.DataSnapshot
|
import com.google.firebase.database.DataSnapshot
|
||||||
import com.google.firebase.database.DatabaseError
|
import com.google.firebase.database.DatabaseError
|
||||||
import com.google.firebase.database.DatabaseReference
|
import com.google.firebase.database.DatabaseReference
|
||||||
import com.google.firebase.database.ValueEventListener
|
import com.google.firebase.database.ValueEventListener
|
||||||
import h_mal.appttude.com.driver.Global.FirebaseClass
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
import h_mal.appttude.com.driver.MainActivity
|
||||||
import h_mal.appttude.com.driver.Objects.WholeDriverObject
|
import h_mal.appttude.com.driver.Objects.WholeDriverObject
|
||||||
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
|
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
|
||||||
import h_mal.appttude.com.driver.R
|
import h_mal.appttude.com.driver.R
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_super_user.*
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
|
||||||
class homeSuperUserFragment : Fragment() {
|
class homeSuperUserFragment : Fragment() {
|
||||||
var users: DatabaseReference? = null
|
var users: DatabaseReference? = null
|
||||||
var listViewSuperAdapter: ListViewSuperAdapter? = null
|
|
||||||
var mappedObjectList: MutableList<MappedObject>? = null
|
var mappedObjectList: MutableList<MappedObject>? = null
|
||||||
private var sharedPreferences: SharedPreferences? = null
|
private var sharedPreferences: SharedPreferences? = null
|
||||||
private var sortOrder: Int = 0
|
private var sortOrder: Int = 0
|
||||||
private val sortDesc: Boolean = false
|
private val sortDesc: Boolean = false
|
||||||
private var recyclerView: RecyclerView? = null
|
|
||||||
private var recyclerViewAdapter: RecyclerViewAdapter? = null
|
private var recyclerViewAdapter: RecyclerViewAdapter? = null
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setHasOptionsMenu(true)
|
setHasOptionsMenu(true)
|
||||||
users = MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
|
||||||
mappedObjectList = ArrayList()
|
mappedObjectList = ArrayList()
|
||||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
|
||||||
users!!.addValueEventListener(valueEventListener)
|
users!!.addValueEventListener(valueEventListener)
|
||||||
sharedPreferences = activity!!.getSharedPreferences("PREFS", 0)
|
sharedPreferences = requireActivity().getSharedPreferences("PREFS", 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
@@ -47,14 +42,12 @@ class homeSuperUserFragment : Fragment() {
|
|||||||
// Inflate the layout for this fragment
|
// Inflate the layout for this fragment
|
||||||
val view: View = inflater.inflate(R.layout.fragment_home_super_user, container, false)
|
val view: View = inflater.inflate(R.layout.fragment_home_super_user, container, false)
|
||||||
|
|
||||||
// final ListView list = view.findViewById(R.id.list_view_super);
|
recycler_view.apply {
|
||||||
|
layoutManager = LinearLayoutManager(context)
|
||||||
// listViewSuperAdapter = new ListViewSuperAdapter(getContext(),mappedObjectList);
|
|
||||||
// list.setAdapter(listViewSuperAdapter);
|
|
||||||
recyclerView = view.findViewById(R.id.recycler_view)
|
|
||||||
recyclerView.setLayoutManager(LinearLayoutManager(context))
|
|
||||||
recyclerViewAdapter = RecyclerViewAdapter(context, mappedObjectList)
|
recyclerViewAdapter = RecyclerViewAdapter(context, mappedObjectList)
|
||||||
recyclerView.setAdapter(recyclerViewAdapter)
|
adapter = recyclerViewAdapter
|
||||||
|
}
|
||||||
|
|
||||||
return view
|
return view
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,7 +57,6 @@ class homeSuperUserFragment : Fragment() {
|
|||||||
Log.i("Count ", "" + snapshot.childrenCount)
|
Log.i("Count ", "" + snapshot.childrenCount)
|
||||||
for (postSnapshot: DataSnapshot in snapshot.children) {
|
for (postSnapshot: DataSnapshot in snapshot.children) {
|
||||||
if ((postSnapshot.child("role").value.toString() == "driver")) {
|
if ((postSnapshot.child("role").value.toString() == "driver")) {
|
||||||
MainActivity.printObjectAsJson("object", postSnapshot.toString())
|
|
||||||
mappedObjectList!!.add(
|
mappedObjectList!!.add(
|
||||||
MappedObject(
|
MappedObject(
|
||||||
postSnapshot.key, postSnapshot.getValue(
|
postSnapshot.key, postSnapshot.getValue(
|
||||||
@@ -75,11 +67,11 @@ class homeSuperUserFragment : Fragment() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
sortDate(sortOrder, sortDesc)
|
sortDate(sortOrder, sortDesc)
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCancelled(databaseError: DatabaseError) {
|
override fun onCancelled(databaseError: DatabaseError) {
|
||||||
MainActivity.viewController!!.progress(View.GONE)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,72 +85,51 @@ class homeSuperUserFragment : Fragment() {
|
|||||||
val grpname: Array<String> = arrayOf("Driver Name", "Driver Number", "Approval")
|
val grpname: Array<String> = arrayOf("Driver Name", "Driver Number", "Approval")
|
||||||
sortOrder = sharedPreferences!!.getInt(SORT, 0)
|
sortOrder = sharedPreferences!!.getInt(SORT, 0)
|
||||||
val checkedItem: Int = sortOrder
|
val checkedItem: Int = sortOrder
|
||||||
val compareInt: IntArray = intArrayOf(0)
|
var compareInt = 0
|
||||||
|
val click = DialogInterface.OnClickListener { dialog, _ ->
|
||||||
|
sortDate(compareInt, false)
|
||||||
|
dialog.dismiss()
|
||||||
|
}
|
||||||
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
||||||
builder.setTitle("Sort by:")
|
builder.setTitle("Sort by:")
|
||||||
.setSingleChoiceItems(
|
.setSingleChoiceItems(
|
||||||
grpname,
|
grpname,
|
||||||
checkedItem,
|
checkedItem
|
||||||
object : DialogInterface.OnClickListener {
|
) { _, pos -> compareInt = pos }
|
||||||
override fun onClick(dialog: DialogInterface, item: Int) {
|
.setPositiveButton("Ascending", click)
|
||||||
when (item) {
|
.setNegativeButton("Descending", click)
|
||||||
0 -> {
|
|
||||||
compareInt.get(0) = 0
|
|
||||||
return
|
|
||||||
}
|
|
||||||
1 -> {
|
|
||||||
compareInt.get(0) = 1
|
|
||||||
return
|
|
||||||
}
|
|
||||||
2 -> compareInt.get(0) = 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).setPositiveButton("Ascending", object : DialogInterface.OnClickListener {
|
|
||||||
override fun onClick(dialog: DialogInterface, id: Int) {
|
|
||||||
sortDate(compareInt.get(0), false)
|
|
||||||
dialog.dismiss()
|
|
||||||
}
|
|
||||||
}).setNegativeButton("Descending", object : DialogInterface.OnClickListener {
|
|
||||||
override fun onClick(dialog: DialogInterface, id: Int) {
|
|
||||||
sortDate(compareInt.get(0), true)
|
|
||||||
dialog.dismiss()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.create().show()
|
.create().show()
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item)
|
return super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun sortDate(compareInt: Int, reversed: Boolean) {
|
private fun sortDate(compareInt: Int, reversed: Boolean) {
|
||||||
Log.i(TAG, "sortDate: " + compareInt + " - " + reversed)
|
|
||||||
val comparator: Comparator<MappedObject> = object : Comparator<MappedObject> {
|
val comparator: Comparator<MappedObject> = object : Comparator<MappedObject> {
|
||||||
override fun compare(o1: MappedObject, o2: MappedObject): Int {
|
override fun compare(o1: MappedObject, o2: MappedObject): Int {
|
||||||
when (compareInt) {
|
when (compareInt) {
|
||||||
0 -> return o1.getWholeDriverObject().getUser_details().getProfileName()
|
0 -> return o1.wholeDriverObject?.user_details?.profileName!!.compareTo(
|
||||||
.compareTo(
|
o2.wholeDriverObject?.user_details?.profileName!!
|
||||||
o2.getWholeDriverObject().getUser_details().getProfileName()
|
|
||||||
)
|
)
|
||||||
1 -> {
|
1 -> {
|
||||||
var s1: String? = o1.getWholeDriverObject().getDriver_number()
|
var s1: String? = o1.wholeDriverObject?.driver_number
|
||||||
var s2: String? = o2.getWholeDriverObject().getDriver_number()
|
var s2: String? = o2.wholeDriverObject?.driver_number
|
||||||
if (o1.getWholeDriverObject().driver_number == null || (o1.getWholeDriverObject()
|
if (o1.wholeDriverObject?.driver_number == null || (o1.wholeDriverObject!!
|
||||||
.getDriver_number() == "0")
|
.driver_number == "0")
|
||||||
) {
|
) {
|
||||||
s1 = ";"
|
s1 = ";"
|
||||||
}
|
}
|
||||||
if (o2.getWholeDriverObject().driver_number == null || (o2.getWholeDriverObject()
|
if (o2.wholeDriverObject?.driver_number == null || (o2.wholeDriverObject!!
|
||||||
.getDriver_number() == "0")
|
.driver_number == "0")
|
||||||
) {
|
) {
|
||||||
s2 = ";"
|
s2 = ";"
|
||||||
}
|
}
|
||||||
return s1!!.compareTo((s2)!!)
|
return s1!!.compareTo((s2)!!)
|
||||||
}
|
}
|
||||||
2 -> return MainActivity.approvalsClass!!.getOverApprovalStatusCode(o1.wholeDriverObject) -
|
2 -> return MainActivity.approvalsClass.getOverApprovalStatusCode(o1.wholeDriverObject) -
|
||||||
MainActivity.approvalsClass!!.getOverApprovalStatusCode(o2.wholeDriverObject)
|
MainActivity.approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject)
|
||||||
else -> return MainActivity.approvalsClass!!.getOverApprovalStatusCode(
|
else -> return MainActivity.approvalsClass.getOverApprovalStatusCode(
|
||||||
o1.wholeDriverObject
|
o1.wholeDriverObject
|
||||||
) -
|
) - MainActivity.approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject)
|
||||||
MainActivity.approvalsClass!!.getOverApprovalStatusCode(o2.wholeDriverObject)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -170,12 +141,10 @@ class homeSuperUserFragment : Fragment() {
|
|||||||
Collections.sort(mappedObjectList, comparator)
|
Collections.sort(mappedObjectList, comparator)
|
||||||
}
|
}
|
||||||
recyclerViewAdapter!!.notifyDataSetChanged()
|
recyclerViewAdapter!!.notifyDataSetChanged()
|
||||||
// listViewSuperAdapter.notifyDataSetChanged();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val SORT: String = "SORT"
|
private val SORT: String = "SORT"
|
||||||
private val REVERSED: String = "REVERSED"
|
private val REVERSED: String = "REVERSED"
|
||||||
private val TAG: String = "homeSuperUserFragment"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package h_mal.appttude.com.driver.application
|
||||||
|
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.ViewModelProvider
|
||||||
|
import h_mal.appttude.com.driver.data.FirebaseAuthSource
|
||||||
|
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
|
||||||
|
import h_mal.appttude.com.driver.data.FirebaseStorageSource
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.*
|
||||||
|
|
||||||
|
class ApplicationViewModelFactory(
|
||||||
|
private val firebaseAuthSource: FirebaseAuthSource,
|
||||||
|
private val firebaseDatabaseSource: FirebaseDatabaseSource,
|
||||||
|
private val firebaseStorageSource: FirebaseStorageSource
|
||||||
|
) : ViewModelProvider.Factory {
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
||||||
|
with(modelClass){
|
||||||
|
return when{
|
||||||
|
isAssignableFrom(UserViewModel::class.java) -> UserViewModel(firebaseAuthSource)
|
||||||
|
isAssignableFrom(MainViewModel::class.java) -> MainViewModel(firebaseAuthSource, firebaseDatabaseSource)
|
||||||
|
isAssignableFrom(UpdateUserViewModel::class.java) -> UpdateUserViewModel(firebaseAuthSource, firebaseStorageSource)
|
||||||
|
isAssignableFrom(DriverLicenseViewModel::class.java) -> DriverLicenseViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
|
||||||
|
isAssignableFrom(DriverProfileViewModel::class.java) -> DriverProfileViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
|
||||||
|
isAssignableFrom(PrivateHireLicenseViewModel::class.java) -> PrivateHireLicenseViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
|
||||||
|
isAssignableFrom(VehicleProfileViewModel::class.java) -> VehicleProfileViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
|
||||||
|
isAssignableFrom(InsuranceViewModel::class.java) -> InsuranceViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
|
||||||
|
isAssignableFrom(MotViewModel::class.java) -> MotViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
|
||||||
|
isAssignableFrom(LogbookViewModel::class.java) -> LogbookViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
|
||||||
|
isAssignableFrom(PrivateHireVehicleViewModel::class.java) -> PrivateHireVehicleViewModel(firebaseAuthSource, firebaseDatabaseSource, firebaseStorageSource)
|
||||||
|
else -> throw IllegalArgumentException("Unknown ViewModel class")
|
||||||
|
} as T
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
package h_mal.appttude.com.driver.application
|
||||||
|
|
||||||
|
import android.app.Application
|
||||||
|
import h_mal.appttude.com.driver.data.FirebaseAuthSource
|
||||||
|
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
|
||||||
|
import h_mal.appttude.com.driver.data.FirebaseStorageSource
|
||||||
|
import org.kodein.di.Kodein
|
||||||
|
import org.kodein.di.KodeinAware
|
||||||
|
import org.kodein.di.android.x.androidXModule
|
||||||
|
import org.kodein.di.generic.bind
|
||||||
|
import org.kodein.di.generic.instance
|
||||||
|
import org.kodein.di.generic.provider
|
||||||
|
import org.kodein.di.generic.singleton
|
||||||
|
|
||||||
|
class DriverApplication : Application(), KodeinAware{
|
||||||
|
|
||||||
|
// Kodein aware to initialise the classes used for DI
|
||||||
|
override val kodein = Kodein.lazy {
|
||||||
|
import(androidXModule(this@DriverApplication))
|
||||||
|
bind() from singleton { FirebaseAuthSource() }
|
||||||
|
bind() from singleton { FirebaseDatabaseSource() }
|
||||||
|
bind() from singleton { FirebaseStorageSource() }
|
||||||
|
bind() from provider { ApplicationViewModelFactory(instance(), instance(), instance()) }
|
||||||
|
}
|
||||||
|
}
|
||||||
118
app/src/main/java/h_mal/appttude/com/driver/base/BaseActivity.kt
Normal file
118
app/src/main/java/h_mal/appttude/com/driver/base/BaseActivity.kt
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
package h_mal.appttude.com.driver.base
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.activity.viewModels
|
||||||
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.lifecycle.Observer
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.lifecycle.ViewModelProvider
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.application.ApplicationViewModelFactory
|
||||||
|
import h_mal.appttude.com.driver.data.ViewState
|
||||||
|
import h_mal.appttude.com.driver.utils.displayToast
|
||||||
|
import h_mal.appttude.com.driver.utils.hide
|
||||||
|
import h_mal.appttude.com.driver.utils.show
|
||||||
|
import h_mal.appttude.com.driver.utils.triggerAnimation
|
||||||
|
import org.kodein.di.KodeinAware
|
||||||
|
import org.kodein.di.android.kodein
|
||||||
|
import org.kodein.di.generic.instance
|
||||||
|
|
||||||
|
|
||||||
|
abstract class BaseActivity<V : BaseViewModel> : AppCompatActivity(), KodeinAware {
|
||||||
|
|
||||||
|
private lateinit var loadingView: View
|
||||||
|
abstract fun getViewModel(): V?
|
||||||
|
|
||||||
|
abstract val layoutId: Int
|
||||||
|
|
||||||
|
override val kodein by kodein()
|
||||||
|
val factory by instance<ApplicationViewModelFactory>()
|
||||||
|
|
||||||
|
inline fun <reified VM : ViewModel> createLazyViewModel(): Lazy<VM> = viewModels { factory }
|
||||||
|
inline fun <reified VM : ViewModel> createViewModel(): VM = ViewModelProvider(viewModelStore, factory).get(VM::class.java)
|
||||||
|
|
||||||
|
var mProgressDialog: View? = null
|
||||||
|
|
||||||
|
private var loading: Boolean = false
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
configureObserver()
|
||||||
|
setContentView(layoutId)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onStart() {
|
||||||
|
super.onStart()
|
||||||
|
|
||||||
|
loadingView = layoutInflater.inflate(R.layout.progress_layout, null)
|
||||||
|
loadingView.setOnClickListener(null)
|
||||||
|
addContentView(loadingView, ViewGroup.LayoutParams(
|
||||||
|
ViewGroup.LayoutParams.MATCH_PARENT,
|
||||||
|
ViewGroup.LayoutParams.MATCH_PARENT
|
||||||
|
))
|
||||||
|
|
||||||
|
loadingView.hide()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <A : AppCompatActivity> startActivity(activity: Class<A>){
|
||||||
|
val intent = Intent(this, activity)
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called in case of success or some data emitted from the liveData in viewModel
|
||||||
|
*/
|
||||||
|
open fun onStarted() {
|
||||||
|
loadingView.fadeIn()
|
||||||
|
loading = true
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called in case of success or some data emitted from the liveData in viewModel
|
||||||
|
*/
|
||||||
|
open fun onSuccess(data: Any?) {
|
||||||
|
loadingView.fadeOut()
|
||||||
|
loading = false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called in case of failure or some error emitted from the liveData in viewModel
|
||||||
|
*/
|
||||||
|
open fun onFailure(error: String?) {
|
||||||
|
error?.let { displayToast(it) }
|
||||||
|
loadingView.fadeOut()
|
||||||
|
loading = false
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun configureObserver() {
|
||||||
|
getViewModel()?.uiState?.observe(this, Observer {
|
||||||
|
when(it){
|
||||||
|
is ViewState.HasStarted -> onStarted()
|
||||||
|
is ViewState.HasData<*> -> onSuccess(it.data.getContentIfNotHandled())
|
||||||
|
is ViewState.HasError -> onFailure(it.error.getContentIfNotHandled())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun View.fadeIn() {
|
||||||
|
apply {
|
||||||
|
show()
|
||||||
|
triggerAnimation(R.anim.nav_default_enter_anim){}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun View.fadeOut() {
|
||||||
|
apply {
|
||||||
|
hide()
|
||||||
|
triggerAnimation(R.anim.nav_default_exit_anim){}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBackPressed() {
|
||||||
|
if (!loading) super.onBackPressed()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
142
app/src/main/java/h_mal/appttude/com/driver/base/BaseFragment.kt
Normal file
142
app/src/main/java/h_mal/appttude/com/driver/base/BaseFragment.kt
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
package h_mal.appttude.com.driver.base
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
|
import android.content.ClipData
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.fragment.app.viewModels
|
||||||
|
import androidx.lifecycle.Observer
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import h_mal.appttude.com.driver.application.ApplicationViewModelFactory
|
||||||
|
import h_mal.appttude.com.driver.data.ViewState
|
||||||
|
import h_mal.appttude.com.driver.utils.PermissionsUtils
|
||||||
|
import org.kodein.di.KodeinAware
|
||||||
|
import org.kodein.di.android.x.kodein
|
||||||
|
import org.kodein.di.generic.instance
|
||||||
|
|
||||||
|
const val IMAGE_SELECT_REQUEST_CODE = 401
|
||||||
|
abstract class BaseFragment<V : BaseViewModel> : Fragment(), KodeinAware {
|
||||||
|
|
||||||
|
var mActivity: BaseActivity<V>? = null
|
||||||
|
abstract fun getViewModel(): V
|
||||||
|
abstract fun getLayoutId(): Int
|
||||||
|
|
||||||
|
private var multipleImage: Boolean = false
|
||||||
|
|
||||||
|
fun setImageSelectionAsMultiple(){
|
||||||
|
multipleImage = true
|
||||||
|
}
|
||||||
|
|
||||||
|
override val kodein by kodein()
|
||||||
|
val factory by instance<ApplicationViewModelFactory>()
|
||||||
|
|
||||||
|
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")
|
||||||
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
||||||
|
super.onActivityCreated(savedInstanceState)
|
||||||
|
mActivity = activity as BaseActivity<V>
|
||||||
|
configureObserver()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called in case of starting operation liveData in viewModel
|
||||||
|
*/
|
||||||
|
open fun onStarted() {
|
||||||
|
mActivity?.onStarted()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called in case of success or some data emitted from the liveData in viewModel
|
||||||
|
*/
|
||||||
|
open fun onSuccess(data: Any?) {
|
||||||
|
mActivity?.onSuccess(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called in case of failure or some error emitted from the liveData in viewModel
|
||||||
|
*/
|
||||||
|
open fun onFailure(error: String?) {
|
||||||
|
mActivity?.onFailure(error)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun configureObserver() {
|
||||||
|
getViewModel().uiState.observe(viewLifecycleOwner, Observer {
|
||||||
|
when (it) {
|
||||||
|
is ViewState.HasStarted -> onStarted()
|
||||||
|
is ViewState.HasData<*> -> onSuccess(it.data.getContentIfNotHandled())
|
||||||
|
is ViewState.HasError -> onFailure(it.error.getContentIfNotHandled())
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
|
if (resultCode == Activity.RESULT_OK){
|
||||||
|
when(requestCode){
|
||||||
|
IMAGE_SELECT_REQUEST_CODE -> {
|
||||||
|
data?.clipData?.convertToList()?.let {
|
||||||
|
onImageGalleryResult(it.subList(0, 9))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
onImageGalleryResult(data?.data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun ClipData.convertToList(): List<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}
|
||||||
|
* @param ourRequestCode
|
||||||
|
* @param requestCode
|
||||||
|
* checks that ourRequestCode was granted
|
||||||
|
* sends callback with
|
||||||
|
* @param permissionGranted
|
||||||
|
*/
|
||||||
|
fun onPermissionRequest(
|
||||||
|
requestCode: Int, ourRequestCode: Int, grantResults: IntArray,
|
||||||
|
permissionGranted: () -> Unit
|
||||||
|
){
|
||||||
|
when (requestCode) {
|
||||||
|
ourRequestCode -> {
|
||||||
|
if (PermissionsUtils.isGranted(grantResults)) {
|
||||||
|
permissionGranted.invoke()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun onImageGalleryResult(imageUri: Uri?){ }
|
||||||
|
open fun onImageGalleryResult(imageUris: List<Uri>?){ }
|
||||||
|
|
||||||
|
fun openGalleryForImage() {
|
||||||
|
val intent = Intent(Intent.ACTION_PICK)
|
||||||
|
intent.type = "image/*"
|
||||||
|
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, multipleImage);
|
||||||
|
startActivityForResult(intent, IMAGE_SELECT_REQUEST_CODE)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
package h_mal.appttude.com.driver.base
|
||||||
|
|
||||||
|
import androidx.lifecycle.MutableLiveData
|
||||||
|
import androidx.lifecycle.ViewModel
|
||||||
|
import h_mal.appttude.com.driver.data.ViewState
|
||||||
|
import h_mal.appttude.com.driver.utils.Event
|
||||||
|
|
||||||
|
abstract class BaseViewModel: ViewModel(){
|
||||||
|
open val uiState: MutableLiveData<ViewState> = MutableLiveData()
|
||||||
|
|
||||||
|
fun onStart() {
|
||||||
|
uiState.postValue(ViewState.HasStarted)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T : Any> onSuccess(result: T) {
|
||||||
|
uiState.postValue(ViewState.HasData(Event(result)))
|
||||||
|
}
|
||||||
|
|
||||||
|
protected fun onError(error: String) {
|
||||||
|
uiState.postValue(ViewState.HasError(Event(error)))
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun doTryOperation(
|
||||||
|
defaultErrorMessage: String?,
|
||||||
|
operation: suspend () -> Unit
|
||||||
|
){
|
||||||
|
try {
|
||||||
|
onStart()
|
||||||
|
operation()
|
||||||
|
}catch (e: Exception){
|
||||||
|
e.printStackTrace()
|
||||||
|
e.message?.let {
|
||||||
|
onError(it)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defaultErrorMessage?.let {
|
||||||
|
onError(it)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
package h_mal.appttude.com.driver.base
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.EditText
|
||||||
|
import androidx.core.widget.doAfterTextChanged
|
||||||
|
import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions
|
||||||
|
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEditText
|
||||||
|
|
||||||
|
private const val IMAGE_PERMISSION_RESULT = 402
|
||||||
|
abstract class DataSubmissionBaseFragment<V : DataSubmissionBaseViewModel<T>, T: Any> : BaseFragment<BaseViewModel>(){
|
||||||
|
|
||||||
|
var picUri: Uri? = null
|
||||||
|
|
||||||
|
abstract override fun getViewModel(): V
|
||||||
|
abstract var model: T
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
getViewModel().getDataFromDatabase()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
override fun onSuccess(data: Any?) {
|
||||||
|
super.onSuccess(data)
|
||||||
|
|
||||||
|
data?.let {
|
||||||
|
if (it::class.java == model::class.java)
|
||||||
|
setFields(data as T)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun setFields(data: T){
|
||||||
|
model = data
|
||||||
|
}
|
||||||
|
|
||||||
|
open fun submit(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fun openGalleryWithPermissionRequest(){
|
||||||
|
if (askForPermissions(Manifest.permission.READ_EXTERNAL_STORAGE, IMAGE_PERMISSION_RESULT)) {
|
||||||
|
openGalleryForImage()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onRequestPermissionsResult(
|
||||||
|
requestCode: Int,
|
||||||
|
permissions: Array<String>,
|
||||||
|
grantResults: IntArray
|
||||||
|
) = onPermissionRequest(requestCode, IMAGE_PERMISSION_RESULT, grantResults) {
|
||||||
|
openGalleryForImage()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun validateEditTexts(vararg editTexts: EditText): Boolean{
|
||||||
|
editTexts.forEach {
|
||||||
|
if (it.text.isNullOrBlank()){
|
||||||
|
it.validateEditText()
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
fun EditText.setTextOnChange(output: (m: String) -> Unit){
|
||||||
|
doAfterTextChanged {
|
||||||
|
output(text.toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onImageGalleryResult(imageUri: Uri?){
|
||||||
|
super.onImageGalleryResult(imageUri)
|
||||||
|
picUri = imageUri
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,86 @@
|
|||||||
|
package h_mal.appttude.com.driver.base
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import com.google.firebase.database.DatabaseReference
|
||||||
|
import com.google.firebase.storage.StorageReference
|
||||||
|
import h_mal.appttude.com.driver.data.FirebaseCompletion
|
||||||
|
import h_mal.appttude.com.driver.data.FirebaseDatabaseSource
|
||||||
|
import h_mal.appttude.com.driver.data.FirebaseStorageSource
|
||||||
|
import h_mal.appttude.com.driver.utils.Coroutines.io
|
||||||
|
import h_mal.appttude.com.driver.utils.DateUtils.getDateTimeStamp
|
||||||
|
import h_mal.appttude.com.driver.utils.getDataFromDatabaseRef
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
|
import kotlinx.coroutines.async
|
||||||
|
import kotlinx.coroutines.coroutineScope
|
||||||
|
import java.io.IOException
|
||||||
|
|
||||||
|
abstract class DataSubmissionBaseViewModel<T : Any>(
|
||||||
|
private val database: FirebaseDatabaseSource,
|
||||||
|
private val storage: FirebaseStorageSource?
|
||||||
|
) : BaseViewModel() {
|
||||||
|
|
||||||
|
abstract val databaseRef: DatabaseReference
|
||||||
|
abstract val storageRef: StorageReference?
|
||||||
|
abstract val objectName: String
|
||||||
|
|
||||||
|
abstract fun getDataFromDatabase(): Job
|
||||||
|
open fun setDataInDatabase(data: T, localImageUri: Uri?): Job = Job()
|
||||||
|
open fun setDataInDatabase(data: T, localImageUris: List<Uri?>?): Job = Job()
|
||||||
|
open fun setDataInDatabase(data: T) { }
|
||||||
|
|
||||||
|
inline fun <reified T : Any> getDataClass() = io {
|
||||||
|
doTryOperation("Failed to retrieve $objectName") {
|
||||||
|
val data = databaseRef.getDataFromDatabaseRef<T>()
|
||||||
|
onSuccess(data ?: FirebaseCompletion.Default)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun <T : Any> postDataToDatabase(data: T) {
|
||||||
|
val driversLicense = database.postToDatabaseRed(databaseRef, data)
|
||||||
|
onSuccess(driversLicense)
|
||||||
|
}
|
||||||
|
|
||||||
|
private suspend fun uploadImage(localImageUri: Uri?): String? {
|
||||||
|
val imageString = StringBuilder()
|
||||||
|
.append(getDateTimeStamp())
|
||||||
|
.append("_")
|
||||||
|
.append(objectName.replace(" ", "_"))
|
||||||
|
.toString()
|
||||||
|
|
||||||
|
return localImageUri?.let { uri ->
|
||||||
|
storageRef?.let {
|
||||||
|
val image = storage?.uploadImage(uri, it, imageString)
|
||||||
|
image.toString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun getImageUrl(localImageUri: Uri?, imageUrl: String?): String {
|
||||||
|
if (localImageUri == null && imageUrl.isNullOrBlank()){
|
||||||
|
throw IOException("No image is selected")
|
||||||
|
}
|
||||||
|
|
||||||
|
return uploadImage(localImageUri) ?: imageUrl!!
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun getImageUrls(localImageUris: List<Uri?>?): List<String?> {
|
||||||
|
if (localImageUris.isNullOrEmpty()){
|
||||||
|
throw IOException("No images is selected")
|
||||||
|
}
|
||||||
|
val listOfUrls = mutableListOf<String>()
|
||||||
|
localImageUris.forEach { uri ->
|
||||||
|
uploadImage(uri)?.let {
|
||||||
|
listOfUrls.add(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return listOfUrls
|
||||||
|
}
|
||||||
|
|
||||||
|
suspend fun <T, R> Iterable<T>.mapSuspend(transform: suspend (T) -> R): List<R> =
|
||||||
|
coroutineScope { map { t: T -> async { transform(t) } }.map { it.await() } }
|
||||||
|
|
||||||
|
|
||||||
|
suspend fun <T, R> Iterable<T>.mapIndexSuspend(transform: suspend (index: Int, T) -> R) =
|
||||||
|
coroutineScope { mapIndexed { index: Int, t: T -> async { transform(index, t) } }.map { it.await() } }
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package h_mal.appttude.com.driver.data
|
||||||
|
|
||||||
|
sealed class DataFieldState {
|
||||||
|
object DefaultState : DataFieldState()
|
||||||
|
object NonUserSateUpdated: DataFieldState()
|
||||||
|
object UserUpdateState: DataFieldState()
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package h_mal.appttude.com.driver.data
|
||||||
|
|
||||||
|
import com.google.firebase.database.DataSnapshot
|
||||||
|
import com.google.firebase.database.DatabaseError
|
||||||
|
|
||||||
|
sealed class EventResponse {
|
||||||
|
data class Changed(val snapshot: DataSnapshot): EventResponse()
|
||||||
|
data class Cancelled(val error: DatabaseError): EventResponse()
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
package h_mal.appttude.com.driver.data
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import com.google.android.gms.tasks.Task
|
||||||
|
import com.google.firebase.auth.*
|
||||||
|
|
||||||
|
class FirebaseAuthSource: FirebaseAuthentication{
|
||||||
|
private val auth = FirebaseAuth.getInstance()
|
||||||
|
|
||||||
|
override fun getUid(): String? = auth.uid
|
||||||
|
|
||||||
|
override fun getUser(): FirebaseUser? = auth.currentUser
|
||||||
|
|
||||||
|
override fun signIn(email: String, password: String): Task<AuthResult> =
|
||||||
|
auth.signInWithEmailAndPassword(email, password)
|
||||||
|
|
||||||
|
override fun registerUser(email: String, password: String): Task<AuthResult> =
|
||||||
|
auth.createUserWithEmailAndPassword(email, password)
|
||||||
|
|
||||||
|
override fun logOut() = auth.signOut()
|
||||||
|
|
||||||
|
override fun forgotPassword(email: String): Task<Void> = auth.sendPasswordResetEmail(email)
|
||||||
|
|
||||||
|
override fun updateProfile(
|
||||||
|
name: String?,
|
||||||
|
profilePic: Uri?
|
||||||
|
): Task<Void>? {
|
||||||
|
val profileUpdates = UserProfileChangeRequest.Builder().apply {
|
||||||
|
name?.let { setDisplayName(it) }
|
||||||
|
profilePic?.let { setPhotoUri(it) }
|
||||||
|
}.build()
|
||||||
|
|
||||||
|
return getUser()?.updateProfile(profileUpdates)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun reauthenticate(
|
||||||
|
email: String,
|
||||||
|
password: String
|
||||||
|
): Task<Void>? {
|
||||||
|
val credential = EmailAuthProvider.getCredential(email, password)
|
||||||
|
|
||||||
|
return getUser()?.reauthenticate(credential)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun updateEmail(email: String): Task<Void>? = getUser()?.updateEmail(email)
|
||||||
|
override fun updatePassword(password: String): Task<Void>? = getUser()?.updatePassword(password)
|
||||||
|
override fun deleteProfile() = getUser()?.delete()
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package h_mal.appttude.com.driver.data
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import com.google.android.gms.tasks.Task
|
||||||
|
import com.google.firebase.auth.AuthResult
|
||||||
|
import com.google.firebase.auth.FirebaseUser
|
||||||
|
|
||||||
|
interface FirebaseAuthentication{
|
||||||
|
fun getUid(): String?
|
||||||
|
fun getUser(): FirebaseUser?
|
||||||
|
fun signIn(email: String, password: String): Task<AuthResult>
|
||||||
|
fun registerUser(email: String, password: String): Task<AuthResult>
|
||||||
|
fun logOut()
|
||||||
|
fun forgotPassword(email: String): Task<Void>
|
||||||
|
fun updateProfile(
|
||||||
|
name: String?,
|
||||||
|
profilePic: Uri?
|
||||||
|
): Task<Void>?
|
||||||
|
fun reauthenticate(
|
||||||
|
email: String,
|
||||||
|
password: String
|
||||||
|
): Task<Void>?
|
||||||
|
fun updateEmail(email: String): Task<Void>?
|
||||||
|
fun updatePassword(password: String): Task<Void>?
|
||||||
|
fun deleteProfile(): Task<Void>?
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
package h_mal.appttude.com.driver.data
|
||||||
|
|
||||||
|
sealed class FirebaseCompletion{
|
||||||
|
object Default: FirebaseCompletion()
|
||||||
|
data class Changed(val message: String): FirebaseCompletion()
|
||||||
|
data class ProfileDeleted(val message: String): FirebaseCompletion()
|
||||||
|
}
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
package h_mal.appttude.com.driver.data
|
||||||
|
|
||||||
|
import com.google.firebase.database.DatabaseReference
|
||||||
|
import com.google.firebase.database.FirebaseDatabase
|
||||||
|
import kotlinx.coroutines.tasks.await
|
||||||
|
|
||||||
|
const val USER_CONST = "user"
|
||||||
|
const val PROFILE_ROLE ="role"
|
||||||
|
const val DRIVER_NUMBER = "driver_number"
|
||||||
|
const val USER_DETAILS = "user_details"
|
||||||
|
const val VEHICLE_PROFILE = "vehicle_profile"
|
||||||
|
const val DRIVER_PROFILE = "driver_profile"
|
||||||
|
const val APPROVALS = "approvalsObject"
|
||||||
|
const val DRIVER_DETAILS = "driver_details"
|
||||||
|
const val DRIVER_LICENSE = "driver_license"
|
||||||
|
const val PRIVATE_HIRE = "private_hire"
|
||||||
|
const val INSURANCE_DETAILS = "insurance_details"
|
||||||
|
const val LOG_BOOK = "log_book"
|
||||||
|
const val MOT = "mot_details"
|
||||||
|
const val PRIVATE_HIRE_VEHICLE = "private_hire_vehicle"
|
||||||
|
const val VEHICLE_DETAILS = "vehicle_details"
|
||||||
|
const val ARCHIVE = "archive"
|
||||||
|
class FirebaseDatabaseSource {
|
||||||
|
private val database = FirebaseDatabase.getInstance()
|
||||||
|
|
||||||
|
suspend fun <T: Any> postToDatabaseRed(ref: DatabaseReference, data: T) : T{
|
||||||
|
ref.setValue(data).await()
|
||||||
|
return data
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getUserRef(uid: String) = database.getReference(USER_CONST).child(uid)
|
||||||
|
fun getUserDetailsRef(uid: String) = getUserRef(uid).child(USER_DETAILS)
|
||||||
|
fun getVehicleRef(uid: String) = getUserRef(uid).child(VEHICLE_PROFILE)
|
||||||
|
fun getDriverRef(uid: String) = getUserRef(uid).child(DRIVER_PROFILE)
|
||||||
|
fun getApprovalsRef(uid: String) = getUserRef(uid).child(APPROVALS)
|
||||||
|
fun getArchiveRef(uid: String) = getUserRef(uid).child(ARCHIVE)
|
||||||
|
fun getUserRoleRef(uid: String) = getUserRef(uid).child(PROFILE_ROLE)
|
||||||
|
fun getDriverNumberRef(uid: String) = getUserRef(uid).child(DRIVER_NUMBER)
|
||||||
|
|
||||||
|
fun getDriverDetailsRef(uid: String) = getDriverRef(uid).child(DRIVER_DETAILS)
|
||||||
|
fun getDriverLicenseRef(uid: String) = getDriverRef(uid).child(DRIVER_LICENSE)
|
||||||
|
fun getPrivateHireRef(uid: String) = getDriverRef(uid).child(PRIVATE_HIRE)
|
||||||
|
|
||||||
|
fun getInsuranceDetailsRef(uid: String) = getVehicleRef(uid).child(INSURANCE_DETAILS)
|
||||||
|
fun getLogbookRef(uid: String) = getVehicleRef(uid).child(LOG_BOOK)
|
||||||
|
fun getMotDetailsRef(uid: String) = getVehicleRef(uid).child(MOT)
|
||||||
|
fun getPrivateHireVehicleRef(uid: String) = getVehicleRef(uid).child(PRIVATE_HIRE_VEHICLE)
|
||||||
|
fun getVehicleDetailsRef(uid: String) = getVehicleRef(uid).child(VEHICLE_DETAILS)
|
||||||
|
|
||||||
|
fun getDriverLicenseArchiveRef(uid: String) = getArchiveRef(uid).child(DRIVER_LICENSE)
|
||||||
|
fun getArchiveInsuranceDetailsRef(uid: String) = getArchiveRef(uid).child(INSURANCE_DETAILS)
|
||||||
|
fun getArchiveLogbookRef(uid: String) = getArchiveRef(uid).child(LOG_BOOK)
|
||||||
|
fun getArchiveMotDetailsRef(uid: String) = getArchiveRef(uid).child(MOT)
|
||||||
|
fun getArchivePrivateHireLicenseRef(uid: String) = getArchiveRef(uid).child(PRIVATE_HIRE)
|
||||||
|
fun getArchivePrivateHireVehicleRef(uid: String) = getArchiveRef(uid).child(PRIVATE_HIRE_VEHICLE)
|
||||||
|
fun getArchiveVehicleDetailsRef(uid: String) = getArchiveRef(uid).child(VEHICLE_DETAILS)
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package h_mal.appttude.com.driver.data
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import com.google.firebase.storage.FirebaseStorage
|
||||||
|
import com.google.firebase.storage.StorageReference
|
||||||
|
import kotlinx.coroutines.tasks.await
|
||||||
|
|
||||||
|
private const val IMAGE_CONST = "images"
|
||||||
|
const val PROFILE_SREF = "user_profile"
|
||||||
|
const val DRIVERS_LICENSE_SREF = "drivers_license"
|
||||||
|
const val INSURANCE_SREF = "insurance_details"
|
||||||
|
const val LOG_BOOK_SREF = "log_book"
|
||||||
|
const val MOT_SREF = "mot_Details"
|
||||||
|
const val PRIVATE_HIRE_SREF = "private_hire"
|
||||||
|
const val PRIVATE_HIRE_VEHICLE_SREF = "private_hire_vehicle"
|
||||||
|
class FirebaseStorageSource {
|
||||||
|
private val storage = FirebaseStorage.getInstance()
|
||||||
|
private val storageRef: StorageReference by lazy { storage.reference }
|
||||||
|
|
||||||
|
suspend fun uploadImage(localFilePath: Uri, path: StorageReference, filename: String): Uri {
|
||||||
|
val ref = path.child("$filename.jpg")
|
||||||
|
return ref.putFile(localFilePath)
|
||||||
|
.continueWithTask { ref.downloadUrl }
|
||||||
|
.await()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun usersImagesStorageRef(uid: String) = storageRef.child(IMAGE_CONST).child(uid)
|
||||||
|
fun profileImageStorageRef(uid: String) = usersImagesStorageRef(uid).child(PROFILE_SREF)
|
||||||
|
fun driversLicenseStorageRef(uid: String) = usersImagesStorageRef(uid).child(DRIVERS_LICENSE_SREF)
|
||||||
|
fun insuranceStorageRef(uid: String) = usersImagesStorageRef(uid).child(INSURANCE_SREF)
|
||||||
|
fun logBookStorageRef(uid: String) = usersImagesStorageRef(uid).child(LOG_BOOK_SREF)
|
||||||
|
fun motStorageRef(uid: String) = usersImagesStorageRef(uid).child(MOT_SREF)
|
||||||
|
fun privateHireStorageRef(uid: String) = usersImagesStorageRef(uid).child(PRIVATE_HIRE_SREF)
|
||||||
|
fun privateHireVehicleStorageRef(uid: String) = usersImagesStorageRef(uid).child(PRIVATE_HIRE_VEHICLE_SREF)
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package h_mal.appttude.com.driver.data
|
||||||
|
|
||||||
|
enum class Roles(name: String) {
|
||||||
|
Driver("driver"),
|
||||||
|
SuperUser("super_user")
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package h_mal.appttude.com.driver.data
|
||||||
|
|
||||||
|
import h_mal.appttude.com.driver.utils.Event
|
||||||
|
|
||||||
|
|
||||||
|
sealed class ViewState {
|
||||||
|
object HasStarted : ViewState()
|
||||||
|
class HasData<T : Any>(val data: Event<T>) : ViewState()
|
||||||
|
class HasError(val error: Event<String>) : ViewState()
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package h_mal.appttude.com.driver.dialogs
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
|
import android.app.AlertDialog
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import kotlin.system.exitProcess
|
||||||
|
|
||||||
|
object ExitDialog{
|
||||||
|
|
||||||
|
fun Activity.displayExitDialog() = AlertDialog.Builder(this)
|
||||||
|
.setTitle("Leave?")
|
||||||
|
.setMessage("Are you sure you want to exit?")
|
||||||
|
.setNegativeButton(android.R.string.no, null)
|
||||||
|
.setPositiveButton(
|
||||||
|
android.R.string.yes
|
||||||
|
) { _, _ ->
|
||||||
|
this.finish()
|
||||||
|
exitProcess(0)
|
||||||
|
}
|
||||||
|
.create()
|
||||||
|
.show()
|
||||||
|
|
||||||
|
fun Fragment.displayExitDialog() = requireActivity().displayExitDialog()
|
||||||
|
}
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
package h_mal.appttude.com.driver.driver
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
|
import android.widget.ImageView
|
||||||
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
|
import h_mal.appttude.com.driver.DataFieldsInterface
|
||||||
|
import h_mal.appttude.com.driver.Objects.InsuranceObject
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.setPicassoImage
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.InsuranceViewModel
|
||||||
|
import io.github.vejei.carouselview.CarouselAdapter
|
||||||
|
import kotlinx.android.synthetic.main.fragment_insurance.*
|
||||||
|
|
||||||
|
|
||||||
|
class InsuranceFragment : DataSubmissionBaseFragment<InsuranceViewModel, InsuranceObject>(),
|
||||||
|
DataFieldsInterface {
|
||||||
|
|
||||||
|
private var selectedImages: List<Uri>? = listOf()
|
||||||
|
|
||||||
|
lateinit var adapter: PageAdapter
|
||||||
|
|
||||||
|
private val viewmodel: InsuranceViewModel by getFragmentViewModel()
|
||||||
|
override fun getViewModel(): InsuranceViewModel = viewmodel
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_insurance
|
||||||
|
override var model = InsuranceObject()
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
setImageSelectionAsMultiple()
|
||||||
|
|
||||||
|
adapter = PageAdapter()
|
||||||
|
carousel_view.adapter = adapter
|
||||||
|
|
||||||
|
insurer.setTextOnChange { model.insurerName = it }
|
||||||
|
insurance_exp.setTextOnChange { model.expiryDate = it }
|
||||||
|
|
||||||
|
uploadInsurance.setOnClickListener { openGalleryWithPermissionRequest() }
|
||||||
|
submit_ins.setOnClickListener { submit() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun submit() {
|
||||||
|
super.submit()
|
||||||
|
validateEditTexts(insurer, insurance_exp)
|
||||||
|
.takeIf { !it }
|
||||||
|
?.let { return }
|
||||||
|
viewmodel.setDataInDatabase(model, selectedImages)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setFields(data: InsuranceObject) {
|
||||||
|
super.setFields(data)
|
||||||
|
|
||||||
|
insurer.setFieldFromDataFetch(model.insurerName)
|
||||||
|
insurance_exp.setFieldFromDataFetch(model.expiryDate)
|
||||||
|
model.photoStrings?.let { adapter.setData(it) }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onImageGalleryResult(imageUris: List<Uri>?) {
|
||||||
|
selectedImages = imageUris
|
||||||
|
selectedImages?.let { adapter.setData(it) }
|
||||||
|
}
|
||||||
|
|
||||||
|
class PageAdapter : CarouselAdapter<PageAdapter.ViewHolder>() {
|
||||||
|
private var data: List<Any?>? = null
|
||||||
|
|
||||||
|
fun setData(list: List<Any?>) {
|
||||||
|
data = list
|
||||||
|
notifyDataSetChanged()
|
||||||
|
}
|
||||||
|
|
||||||
|
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
|
||||||
|
private val backgroundImageView = itemView.findViewById<ImageView>(R.id.imageView)
|
||||||
|
|
||||||
|
fun bind(page: Any?) {
|
||||||
|
backgroundImageView.clipToOutline = true
|
||||||
|
when (page) {
|
||||||
|
is Uri -> backgroundImageView.setImageURI(page)
|
||||||
|
is String -> backgroundImageView.setPicassoImage(page)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onCreatePageViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
|
||||||
|
return ViewHolder(
|
||||||
|
LayoutInflater.from(parent.context).inflate(R.layout.carousal_image_cell, parent, false)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBindPageViewHolder(holder: ViewHolder, position: Int) {
|
||||||
|
holder.bind(data?.get(position))
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getPageCount(): Int {
|
||||||
|
return data?.size ?: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
package h_mal.appttude.com.driver.model
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
data class DriverProfileObject(
|
||||||
|
var driverPic: String? = null,
|
||||||
|
var forenames: String? = null,
|
||||||
|
var address: String? = null,
|
||||||
|
var postcode: String? = null,
|
||||||
|
var dob: String? = null,
|
||||||
|
var ni: String? = null,
|
||||||
|
var dateFirst: String? = null
|
||||||
|
)
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package h_mal.appttude.com.driver.model
|
||||||
|
|
||||||
|
|
||||||
|
data class DriversLicenseObject(
|
||||||
|
var licenseImageString: String? = null,
|
||||||
|
var licenseNumber: String? = null,
|
||||||
|
var licenseExpiry: String? = null
|
||||||
|
)
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package h_mal.appttude.com.driver.model
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
data class MotObject(
|
||||||
|
var motImageString: String? = null,
|
||||||
|
var motExpiry: String? = null
|
||||||
|
)
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
package h_mal.appttude.com.driver.model
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
data class PrivateHireObject (
|
||||||
|
var phImageString: String? = null,
|
||||||
|
var phNumber: String? = null,
|
||||||
|
var phExpiry: String? = null
|
||||||
|
)
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package h_mal.appttude.com.driver.model
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
data class VehicleProfileObject(
|
||||||
|
var reg: String? = null,
|
||||||
|
var make: String? = null,
|
||||||
|
var model: String? = null,
|
||||||
|
var colour: String? = null,
|
||||||
|
var keeperName: String? = null,
|
||||||
|
var keeperAddress: String? = null,
|
||||||
|
var keeperPostCode: String? = null,
|
||||||
|
var startDate: String? = null,
|
||||||
|
var isSeized: Boolean = false
|
||||||
|
)
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package h_mal.appttude.com.driver.ui
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package h_mal.appttude.com.driver.ui.driver
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.BaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.navigateTo
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel
|
||||||
|
|
||||||
|
import kotlinx.android.synthetic.main.fragment_driver_overall.*
|
||||||
|
|
||||||
|
class DriverOverallFragment : BaseFragment<DriverLicenseViewModel>() {
|
||||||
|
|
||||||
|
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?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
driver_prof.setOnClickListener {
|
||||||
|
it.navigateTo(R.id.to_driverProfileFragment)
|
||||||
|
}
|
||||||
|
private_hire.setOnClickListener {
|
||||||
|
it.navigateTo(R.id.to_privateHireLicenseFragment2)
|
||||||
|
}
|
||||||
|
drivers_license.setOnClickListener {
|
||||||
|
it.navigateTo(R.id.to_driverLicenseFragment)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package h_mal.appttude.com.driver.ui.driver
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.BaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.navigateTo
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.DriverLicenseViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_vehicle_overall.*
|
||||||
|
|
||||||
|
|
||||||
|
class VehicleOverallFragment : BaseFragment<DriverLicenseViewModel>() {
|
||||||
|
|
||||||
|
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?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
vehicle_prof.setOnClickListener { it.navigateTo(R.id.to_vehicleSetupFragment) }
|
||||||
|
insurance.setOnClickListener { it.navigateTo(R.id.to_insuranceFragment) }
|
||||||
|
mot.setOnClickListener { it.navigateTo(R.id.to_motFragment) }
|
||||||
|
logbook.setOnClickListener { it.navigateTo(R.id.to_logbookFragment) }
|
||||||
|
private_hire_vehicle_license.setOnClickListener { it.navigateTo(R.id.to_privateHireVehicleFragment) }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
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.DataFieldsInterface
|
||||||
|
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.viewmodels.DriverLicenseViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_driver_license.*
|
||||||
|
|
||||||
|
class DriverLicenseFragment : DataSubmissionBaseFragment<DriverLicenseViewModel, DriversLicenseObject>(), DataFieldsInterface {
|
||||||
|
|
||||||
|
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(requireContext(), 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.setFieldFromFetchData(data.licenseImageString)
|
||||||
|
lic_no.setFieldFromDataFetch(data.licenseNumber)
|
||||||
|
lic_expiry.setFieldFromDataFetch(data.licenseExpiry)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onImageGalleryResult(imageUri: Uri?) {
|
||||||
|
super.onImageGalleryResult(imageUri)
|
||||||
|
this.imageUri = imageUri
|
||||||
|
driversli_img.setImageURI(imageUri)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
package h_mal.appttude.com.driver.ui.driver.driverprofile
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.EditText
|
||||||
|
import h_mal.appttude.com.driver.DataFieldsInterface
|
||||||
|
import h_mal.appttude.com.driver.Global.DateDialog
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
||||||
|
import h_mal.appttude.com.driver.model.DriverProfileObject
|
||||||
|
import h_mal.appttude.com.driver.utils.setPicassoImage
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.DriverProfileViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_driver_profile.*
|
||||||
|
|
||||||
|
|
||||||
|
class DriverProfileFragment: DataSubmissionBaseFragment<DriverProfileViewModel, DriverProfileObject>(), DataFieldsInterface {
|
||||||
|
|
||||||
|
var localUri: Uri? = null
|
||||||
|
|
||||||
|
private val viewmodel by getFragmentViewModel<DriverProfileViewModel>()
|
||||||
|
override fun getViewModel(): DriverProfileViewModel = viewmodel
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_driver_profile
|
||||||
|
override var model = DriverProfileObject()
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
names_input.setTextOnChange{ model.forenames = it }
|
||||||
|
address_input.setTextOnChange{ model.address = it }
|
||||||
|
postcode_input.setTextOnChange{ model.postcode = it }
|
||||||
|
dob_input.setTextOnChange{ model.dob = it }
|
||||||
|
ni_number.setTextOnChange{ model.ni = it }
|
||||||
|
date_first.apply {
|
||||||
|
setTextOnChange{ model.dateFirst = it }
|
||||||
|
setOnClickListener {
|
||||||
|
DateDialog(requireContext(), it as EditText)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
add_driver_pic.setOnClickListener { openGalleryWithPermissionRequest() }
|
||||||
|
submit_driver.setOnClickListener{ submit() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun submit(){
|
||||||
|
validateEditTexts(names_input, address_input, postcode_input,
|
||||||
|
dob_input, ni_number, date_first)
|
||||||
|
.takeIf { !it }
|
||||||
|
?.let { return }
|
||||||
|
|
||||||
|
viewmodel.setDataInDatabase(model, localUri)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setFields(data: DriverProfileObject) {
|
||||||
|
super.setFields(data)
|
||||||
|
driver_pic.setPicassoImage(data.driverPic)
|
||||||
|
names_input.setFieldFromDataFetch(data.forenames)
|
||||||
|
address_input.setFieldFromDataFetch(data.address)
|
||||||
|
postcode_input.setFieldFromDataFetch(data.postcode)
|
||||||
|
dob_input.setFieldFromDataFetch(data.dob)
|
||||||
|
ni_number.setFieldFromDataFetch(data.ni)
|
||||||
|
date_first.setFieldFromDataFetch(data.dateFirst)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onImageGalleryResult(imageUri: Uri?) {
|
||||||
|
super.onImageGalleryResult(imageUri)
|
||||||
|
localUri = imageUri
|
||||||
|
driver_pic.setImageURI(imageUri)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
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.DataFieldsInterface
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
||||||
|
import h_mal.appttude.com.driver.model.PrivateHireObject
|
||||||
|
import h_mal.appttude.com.driver.utils.setPicassoImage
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.PrivateHireLicenseViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_private_hire_license.*
|
||||||
|
|
||||||
|
|
||||||
|
class PrivateHireLicenseFragment : DataSubmissionBaseFragment<PrivateHireLicenseViewModel, PrivateHireObject>(),
|
||||||
|
DataFieldsInterface {
|
||||||
|
|
||||||
|
val viewmodel by getFragmentViewModel<PrivateHireLicenseViewModel>()
|
||||||
|
override fun getViewModel(): PrivateHireLicenseViewModel = viewmodel
|
||||||
|
override var model = PrivateHireObject()
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_private_hire_license
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
ph_no.setTextOnChange{ model.phNumber = it }
|
||||||
|
ph_expiry.setTextOnChange{ model.phExpiry = it }
|
||||||
|
|
||||||
|
uploadphlic.setOnClickListener { openGalleryWithPermissionRequest() }
|
||||||
|
submit.setOnClickListener{ submit() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun submit(){
|
||||||
|
validateEditTexts(ph_no,ph_expiry)
|
||||||
|
.takeIf { !it }
|
||||||
|
?.let { return }
|
||||||
|
|
||||||
|
viewmodel.setDataInDatabase(model, picUri)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setFields(data: PrivateHireObject) {
|
||||||
|
super.setFields(data)
|
||||||
|
imageView2.setPicassoImage(data.phImageString)
|
||||||
|
ph_no.setFieldFromDataFetch(data.phNumber)
|
||||||
|
ph_expiry.setFieldFromDataFetch(data.phExpiry)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onImageGalleryResult(imageUri: Uri?) {
|
||||||
|
super.onImageGalleryResult(imageUri)
|
||||||
|
imageView2.setImageURI(imageUri)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import h_mal.appttude.com.driver.DataFieldsInterface
|
||||||
|
import h_mal.appttude.com.driver.Objects.LogbookObject
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.setPicassoImage
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.LogbookViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_logbook.*
|
||||||
|
|
||||||
|
|
||||||
|
class LogbookFragment : DataSubmissionBaseFragment<LogbookViewModel, LogbookObject>(),
|
||||||
|
DataFieldsInterface {
|
||||||
|
|
||||||
|
private val viewmodel by getFragmentViewModel<LogbookViewModel>()
|
||||||
|
override fun getViewModel(): LogbookViewModel = viewmodel
|
||||||
|
override var model = LogbookObject()
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_logbook
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
v5c_no.setTextOnChange{ model.v5cnumber = it }
|
||||||
|
upload_lb.setOnClickListener { openGalleryWithPermissionRequest() }
|
||||||
|
submit_lb.setOnClickListener { submit() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun submit() {
|
||||||
|
super.submit()
|
||||||
|
validateEditTexts(v5c_no)
|
||||||
|
.takeIf { !it }
|
||||||
|
?.let { return }
|
||||||
|
|
||||||
|
viewmodel.setDataInDatabase(model, picUri)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setFields(data: LogbookObject) {
|
||||||
|
super.setFields(data)
|
||||||
|
|
||||||
|
log_book_img.setPicassoImage(data.photoString)
|
||||||
|
v5c_no.setFieldFromDataFetch(data.v5cnumber)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onImageGalleryResult(imageUri: Uri?) {
|
||||||
|
super.onImageGalleryResult(imageUri)
|
||||||
|
|
||||||
|
picUri = imageUri
|
||||||
|
log_book_img.setImageURI(picUri)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import h_mal.appttude.com.driver.DataFieldsInterface
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
||||||
|
import h_mal.appttude.com.driver.model.MotObject
|
||||||
|
import h_mal.appttude.com.driver.utils.setPicassoImage
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.MotViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_mot.*
|
||||||
|
|
||||||
|
|
||||||
|
class MotFragment: DataSubmissionBaseFragment<MotViewModel, MotObject>(),
|
||||||
|
DataFieldsInterface {
|
||||||
|
|
||||||
|
private val viewmodel by getFragmentViewModel<MotViewModel>()
|
||||||
|
override fun getViewModel(): MotViewModel = viewmodel
|
||||||
|
override var model = MotObject()
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_mot
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
mot_expiry.setTextOnChange{ model.motExpiry = it }
|
||||||
|
uploadmot.setOnClickListener { openGalleryWithPermissionRequest() }
|
||||||
|
submit_mot.setOnClickListener { submit() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun submit() {
|
||||||
|
super.submit()
|
||||||
|
validateEditTexts(mot_expiry)
|
||||||
|
.takeIf { !it }
|
||||||
|
?.let { return }
|
||||||
|
viewmodel.setDataInDatabase(model, picUri)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setFields(data: MotObject) {
|
||||||
|
super.setFields(data)
|
||||||
|
mot_img.setPicassoImage(data.motImageString)
|
||||||
|
mot_expiry.setFieldFromDataFetch(data.motExpiry)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onImageGalleryResult(imageUri: Uri?) {
|
||||||
|
super.onImageGalleryResult(imageUri)
|
||||||
|
mot_img.setImageURI(imageUri)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
|
||||||
|
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import h_mal.appttude.com.driver.DataFieldsInterface
|
||||||
|
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.setPicassoImage
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.PrivateHireVehicleViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_private_hire_vehicle.*
|
||||||
|
|
||||||
|
|
||||||
|
class PrivateHireVehicleFragment: DataSubmissionBaseFragment<PrivateHireVehicleViewModel, PrivateHireVehicleObject>(),
|
||||||
|
DataFieldsInterface {
|
||||||
|
|
||||||
|
private val viewmodel by getFragmentViewModel<PrivateHireVehicleViewModel>()
|
||||||
|
override fun getViewModel(): PrivateHireVehicleViewModel = viewmodel
|
||||||
|
override var model = PrivateHireVehicleObject()
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_private_hire_vehicle
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
ph_no.setTextOnChange{ model.phCarNumber = it }
|
||||||
|
ph_expiry.setTextOnChange{ model.phCarExpiry = it }
|
||||||
|
|
||||||
|
uploadphlic.setOnClickListener { openGalleryWithPermissionRequest() }
|
||||||
|
submit.setOnClickListener { submit() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun submit() {
|
||||||
|
super.submit()
|
||||||
|
validateEditTexts(ph_no, ph_expiry)
|
||||||
|
.takeIf { !it }
|
||||||
|
?.let { return }
|
||||||
|
viewmodel.setDataInDatabase(model, picUri)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setFields(data: PrivateHireVehicleObject) {
|
||||||
|
super.setFields(data)
|
||||||
|
imageView2.setPicassoImage(data.phCarImageString)
|
||||||
|
ph_no.setFieldFromDataFetch(data.phCarNumber)
|
||||||
|
ph_expiry.setFieldFromDataFetch(data.phCarExpiry)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onImageGalleryResult(imageUri: Uri?) {
|
||||||
|
super.onImageGalleryResult(imageUri)
|
||||||
|
imageView2.setImageURI(imageUri)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
package h_mal.appttude.com.driver.ui.driver.vehicleprofile
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import h_mal.appttude.com.driver.DataFieldsInterface
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.DataSubmissionBaseFragment
|
||||||
|
import h_mal.appttude.com.driver.model.VehicleProfileObject
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.VehicleProfileViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_vehicle_setup.*
|
||||||
|
|
||||||
|
|
||||||
|
class VehicleProfileFragment :
|
||||||
|
DataSubmissionBaseFragment<VehicleProfileViewModel, VehicleProfileObject>(),
|
||||||
|
DataFieldsInterface {
|
||||||
|
|
||||||
|
private val viewmodel by getFragmentViewModel<VehicleProfileViewModel>()
|
||||||
|
override fun getViewModel(): VehicleProfileViewModel = viewmodel
|
||||||
|
override var model = VehicleProfileObject()
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_vehicle_setup
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
reg.setTextOnChange { model.reg = it }
|
||||||
|
make.setTextOnChange { model.make = it }
|
||||||
|
car_model.setTextOnChange { model.model = it }
|
||||||
|
colour.setTextOnChange { model.colour = it }
|
||||||
|
keeper_name.setTextOnChange { model.keeperName = it }
|
||||||
|
address.setTextOnChange { model.keeperAddress = it }
|
||||||
|
postcode.setTextOnChange { model.keeperPostCode = it }
|
||||||
|
start_date.setTextOnChange { model.startDate = it }
|
||||||
|
seized_checkbox.setOnCheckedChangeListener { _, res -> model.isSeized = res}
|
||||||
|
|
||||||
|
submit_vehicle.setOnClickListener { submit() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun submit() {
|
||||||
|
validateEditTexts(reg, make, car_model, colour, keeper_name, address, postcode, start_date)
|
||||||
|
.takeIf { !it }
|
||||||
|
?.let { return }
|
||||||
|
|
||||||
|
viewmodel.setDataInDatabase(model)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setFields(data: VehicleProfileObject) {
|
||||||
|
super.setFields(data)
|
||||||
|
reg.setFieldFromDataFetch(data.reg)
|
||||||
|
make.setFieldFromDataFetch(data.make)
|
||||||
|
car_model.setFieldFromDataFetch(data.model)
|
||||||
|
colour.setFieldFromDataFetch(data.colour)
|
||||||
|
keeper_name.setFieldFromDataFetch(data.keeperName)
|
||||||
|
address.setFieldFromDataFetch(data.keeperAddress)
|
||||||
|
postcode.setFieldFromDataFetch(data.keeperPostCode)
|
||||||
|
start_date.setFieldFromDataFetch(data.startDate)
|
||||||
|
seized_checkbox.isChecked = data.isSeized
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package h_mal.appttude.com.driver.update
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.BaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
|
||||||
|
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_update_email.*
|
||||||
|
|
||||||
|
|
||||||
|
class DeleteProfileFragment : BaseFragment<UpdateUserViewModel>() {
|
||||||
|
|
||||||
|
private val viewmodel: UpdateUserViewModel by activityViewModels()
|
||||||
|
override fun getViewModel(): UpdateUserViewModel = viewmodel
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_delete_profile
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
password_top.setEnterPressedListener { deleteUser() }
|
||||||
|
submission_button_label.setOnClickListener { deleteUser() }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun deleteUser(){
|
||||||
|
val emailString = email_update.validatePasswordEditText() ?: return
|
||||||
|
val passwordText = password_top.validatePasswordEditText() ?: return
|
||||||
|
|
||||||
|
getViewModel().deleteProfile(emailString, passwordText)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
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>()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package h_mal.appttude.com.driver.update
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.BaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
|
||||||
|
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
|
||||||
|
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_update_email.*
|
||||||
|
|
||||||
|
|
||||||
|
class UpdateEmailFragment : BaseFragment<UpdateUserViewModel>() {
|
||||||
|
|
||||||
|
private val viewmodel: UpdateUserViewModel by activityViewModels()
|
||||||
|
override fun getViewModel(): UpdateUserViewModel = viewmodel
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_update_email
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
new_email.setEnterPressedListener { registerUser() }
|
||||||
|
submission_button_label.setOnClickListener { registerUser() }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun registerUser(){
|
||||||
|
val emailString = email_update.validatePasswordEditText() ?: return
|
||||||
|
val passwordText = password_top.validatePasswordEditText() ?: return
|
||||||
|
val newEmail = new_email.validateEmailEditText() ?: return
|
||||||
|
|
||||||
|
getViewModel().updateEmail(emailString, passwordText, newEmail)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package h_mal.appttude.com.driver.update
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.BaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.navigateTo
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
|
||||||
|
import kotlinx.android.synthetic.main.update_overview_fragment.*
|
||||||
|
|
||||||
|
class UpdateOverviewFragment : BaseFragment<UpdateUserViewModel>(), View.OnClickListener {
|
||||||
|
|
||||||
|
private val vm by activityViewModels<UpdateUserViewModel>()
|
||||||
|
override fun getViewModel(): UpdateUserViewModel = vm
|
||||||
|
override fun getLayoutId(): Int = R.layout.update_overview_fragment
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
update_email_button.setOnClickListener(this)
|
||||||
|
update_password_button.setOnClickListener(this)
|
||||||
|
update_profile_button.setOnClickListener(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun View.submit(){
|
||||||
|
when(id){
|
||||||
|
R.id.update_email_button -> navigateTo(R.id.to_updateEmailFragment)
|
||||||
|
R.id.update_password_button -> navigateTo(R.id.to_updatePasswordFragment)
|
||||||
|
R.id.update_profile_button -> navigateTo(R.id.to_updateProfileFragment)
|
||||||
|
R.id.delete_profile -> navigateTo(R.id.to_deleteProfileFragment)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onClick(v: View?){
|
||||||
|
v?.submit()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package h_mal.appttude.com.driver.update
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.BaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
|
||||||
|
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
|
||||||
|
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_update_password.*
|
||||||
|
|
||||||
|
|
||||||
|
class UpdatePasswordFragment : BaseFragment<UpdateUserViewModel>() {
|
||||||
|
|
||||||
|
private val viewmodel: UpdateUserViewModel by activityViewModels()
|
||||||
|
override fun getViewModel(): UpdateUserViewModel = viewmodel
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_update_password
|
||||||
|
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
email_update.setEnterPressedListener { registerUser() }
|
||||||
|
email_sign_up.setOnClickListener { registerUser() }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun registerUser(){
|
||||||
|
val emailString = email_update.validatePasswordEditText() ?: return
|
||||||
|
val passwordText = password_top.validatePasswordEditText() ?: return
|
||||||
|
val newPassword = password_bottom.validateEmailEditText() ?: return
|
||||||
|
|
||||||
|
getViewModel().updatePassword(emailString, passwordText, newPassword)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
package h_mal.appttude.com.driver.update
|
||||||
|
|
||||||
|
import android.Manifest.permission.READ_EXTERNAL_STORAGE
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.core.widget.doAfterTextChanged
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import com.google.firebase.auth.FirebaseUser
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.BaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.PermissionsUtils.askForPermissions
|
||||||
|
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
||||||
|
import h_mal.appttude.com.driver.utils.setPicassoImage
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.UpdateUserViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_update_profile.*
|
||||||
|
|
||||||
|
const val TAG_CONST = "non-user"
|
||||||
|
private const val IMAGE_PERMISSION_RESULT = 402
|
||||||
|
class UpdateProfileFragment : BaseFragment<UpdateUserViewModel>() {
|
||||||
|
|
||||||
|
private val viewmodel: UpdateUserViewModel by activityViewModels()
|
||||||
|
override fun getViewModel(): UpdateUserViewModel = viewmodel
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_update_profile
|
||||||
|
|
||||||
|
private var imageChangeListener: Boolean = false
|
||||||
|
private var nameChangeListener: Boolean = false
|
||||||
|
|
||||||
|
private var imageUri: Uri? = null
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
viewmodel.getUser()
|
||||||
|
|
||||||
|
update_name.apply {
|
||||||
|
doAfterTextChanged {
|
||||||
|
if (tag == TAG_CONST) {
|
||||||
|
tag = null
|
||||||
|
return@doAfterTextChanged
|
||||||
|
}
|
||||||
|
nameChangeListener = true
|
||||||
|
}
|
||||||
|
setEnterPressedListener { submitProfileUpdate() }
|
||||||
|
}
|
||||||
|
|
||||||
|
profile_img.setOnClickListener {
|
||||||
|
if (askForPermissions(READ_EXTERNAL_STORAGE, IMAGE_PERMISSION_RESULT)) {
|
||||||
|
openGalleryForImage()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
submit_update_profile.setOnClickListener { submitProfileUpdate() }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun submitProfileUpdate() {
|
||||||
|
val name: String? = takeIf { nameChangeListener }?.update_name?.text?.toString()
|
||||||
|
val imgUri = takeIf { imageChangeListener }?.let { imageUri }
|
||||||
|
|
||||||
|
viewmodel.updateProfile(name, imgUri)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onRequestPermissionsResult(
|
||||||
|
requestCode: Int,
|
||||||
|
permissions: Array<out String>,
|
||||||
|
grantResults: IntArray
|
||||||
|
) = onPermissionRequest(requestCode, IMAGE_PERMISSION_RESULT, grantResults) {
|
||||||
|
openGalleryForImage()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
override fun onSuccess(data: Any?) {
|
||||||
|
super.onSuccess(data)
|
||||||
|
if (data is FirebaseUser) setFields(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setFields(firebaseUser: FirebaseUser) {
|
||||||
|
profile_img.setPicassoImage(firebaseUser.photoUrl)
|
||||||
|
update_name.apply {
|
||||||
|
setText(firebaseUser.displayName)
|
||||||
|
tag = TAG_CONST
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onImageGalleryResult(imageUri: Uri?) {
|
||||||
|
super.onImageGalleryResult(imageUri)
|
||||||
|
this.imageUri = imageUri
|
||||||
|
profile_img.setImageURI(imageUri)
|
||||||
|
imageChangeListener = true
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package h_mal.appttude.com.driver.user
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.BaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.UserViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_forgot_password.*
|
||||||
|
|
||||||
|
|
||||||
|
class ForgotPasswordFragment : BaseFragment<UserViewModel>() {
|
||||||
|
|
||||||
|
private val userViewModel: UserViewModel by activityViewModels()
|
||||||
|
|
||||||
|
override fun getViewModel(): UserViewModel = userViewModel
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_forgot_password
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
submission_button.setOnClickListener {
|
||||||
|
val emailString = submission_et.validateEmailEditText() ?: return@setOnClickListener
|
||||||
|
userViewModel.forgotPassword(emailString)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package h_mal.appttude.com.driver.user
|
||||||
|
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import android.os.Bundle
|
||||||
|
import com.google.firebase.auth.AuthResult
|
||||||
|
import com.google.firebase.auth.FirebaseUser
|
||||||
|
import h_mal.appttude.com.driver.MainActivity
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.BaseActivity
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.UserViewModel
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A login screen that offers login via email/password.
|
||||||
|
*/
|
||||||
|
class LoginActivity : BaseActivity<UserViewModel>() {
|
||||||
|
|
||||||
|
override fun getViewModel(): UserViewModel? = null
|
||||||
|
override val layoutId: Int = R.layout.activity_login
|
||||||
|
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
createViewModel<UserViewModel>()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSuccess(data: Any?) {
|
||||||
|
super.onSuccess(data)
|
||||||
|
if (data is AuthResult || data is FirebaseUser) {
|
||||||
|
val intent = Intent(this, MainActivity::class.java)
|
||||||
|
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
|
startActivity(intent)
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
package h_mal.appttude.com.driver.user
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.BaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
|
||||||
|
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
|
||||||
|
import h_mal.appttude.com.driver.utils.navigateTo
|
||||||
|
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.UserViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_login.*
|
||||||
|
|
||||||
|
class LoginFragment : BaseFragment<UserViewModel>() {
|
||||||
|
|
||||||
|
private val userViewModel: UserViewModel by activityViewModels()
|
||||||
|
override fun getViewModel(): UserViewModel = userViewModel
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_login
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
password.setEnterPressedListener { attemptLogin() }
|
||||||
|
|
||||||
|
email_sign_in_button.setOnClickListener { attemptLogin() }
|
||||||
|
register_button.setOnClickListener { it.navigateTo(R.id.to_register) }
|
||||||
|
forgot.setOnClickListener { it.navigateTo(R.id.to_forgotPassword) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun attemptLogin(){
|
||||||
|
// Store values at the time of the login attempt.
|
||||||
|
val emailString = email.validateEmailEditText() ?: return
|
||||||
|
val passwordString = password.validatePasswordEditText() ?: return
|
||||||
|
|
||||||
|
// attempt to login user
|
||||||
|
getViewModel().signInUser(emailString, passwordString)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package h_mal.appttude.com.driver.user
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.BaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.TextValidationUtils.validateEmailEditText
|
||||||
|
import h_mal.appttude.com.driver.utils.TextValidationUtils.validatePasswordEditText
|
||||||
|
import h_mal.appttude.com.driver.utils.setEnterPressedListener
|
||||||
|
import h_mal.appttude.com.driver.viewmodels.UserViewModel
|
||||||
|
import kotlinx.android.synthetic.main.fragment_register.*
|
||||||
|
|
||||||
|
class RegisterFragment : BaseFragment<UserViewModel>() {
|
||||||
|
|
||||||
|
override fun getLayoutId(): Int = R.layout.fragment_register
|
||||||
|
override fun getViewModel(): UserViewModel {
|
||||||
|
val userViewModel: UserViewModel by activityViewModels()
|
||||||
|
return userViewModel
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
|
password_bottom.setEnterPressedListener { registerUser() }
|
||||||
|
email_sign_up.setOnClickListener { registerUser() }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun registerUser(){
|
||||||
|
val nameString = name_register.validatePasswordEditText() ?: return
|
||||||
|
val emailText = email_register.validateEmailEditText() ?: return
|
||||||
|
val passwordText = password_top.validatePasswordEditText() ?: return
|
||||||
|
val passwordTextBottom = password_bottom.validatePasswordEditText() ?: return
|
||||||
|
|
||||||
|
if ((passwordText != passwordTextBottom)) {
|
||||||
|
password_bottom.error = getString(R.string.no_match_password)
|
||||||
|
password_bottom.requestFocus()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
getViewModel().registerUser(nameString, emailText, passwordText)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
package h_mal.appttude.com.driver.user
|
||||||
|
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.fragment.app.activityViewModels
|
||||||
|
import h_mal.appttude.com.driver.R
|
||||||
|
import h_mal.appttude.com.driver.base.BaseFragment
|
||||||
|
import h_mal.appttude.com.driver.utils.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.getUser()
|
||||||
|
|
||||||
|
goToLogin()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun goToLogin() = main{
|
||||||
|
delay(1000)
|
||||||
|
view?.navigateTo(R.id.to_loginFragment)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,165 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.user
|
|
||||||
|
|
||||||
import android.animation.Animator
|
|
||||||
import android.animation.AnimatorListenerAdapter
|
|
||||||
import android.annotation.TargetApi
|
|
||||||
import android.content.Intent
|
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.text.TextUtils
|
|
||||||
import android.view.View
|
|
||||||
import android.view.inputmethod.EditorInfo
|
|
||||||
import android.widget.Button
|
|
||||||
import android.widget.EditText
|
|
||||||
import android.widget.TextView
|
|
||||||
import android.widget.TextView.OnEditorActionListener
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.auth.AuthResult
|
|
||||||
import com.google.firebase.auth.FirebaseAuth
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
import h_mal.appttude.com.driver.utils.Navigations
|
|
||||||
import h_mal.appttude.com.driver.utils.displayToast
|
|
||||||
import h_mal.appttude.com.driver.utils.navigateToActivity
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A login screen that offers login via email/password.
|
|
||||||
*/
|
|
||||||
class LoginActivity : AppCompatActivity() {
|
|
||||||
private var auth: FirebaseAuth? = null
|
|
||||||
|
|
||||||
// UI references.
|
|
||||||
private var mEmailView: EditText? = null
|
|
||||||
private var mPasswordView: EditText? = null
|
|
||||||
private var mProgressView: View? = null
|
|
||||||
private var mLoginView: View? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
setContentView(R.layout.activity_login)
|
|
||||||
auth = FirebaseAuth.getInstance()
|
|
||||||
|
|
||||||
// Set up the login form.
|
|
||||||
mEmailView = findViewById(R.id.email)
|
|
||||||
mPasswordView = findViewById<View>(R.id.password) as EditText
|
|
||||||
mPasswordView!!.setOnEditorActionListener(OnEditorActionListener { textView, id, keyEvent ->
|
|
||||||
if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
|
|
||||||
attemptLogin()
|
|
||||||
return@OnEditorActionListener true
|
|
||||||
}
|
|
||||||
false
|
|
||||||
})
|
|
||||||
val mEmailSignInButton = findViewById<Button>(R.id.email_sign_in_button)
|
|
||||||
mEmailSignInButton.setOnClickListener { view: View? -> attemptLogin() }
|
|
||||||
mProgressView = findViewById(R.id.login_progress)
|
|
||||||
mLoginView = findViewById(R.id.email_login_form)
|
|
||||||
val register = findViewById<TextView>(R.id.register_button)
|
|
||||||
register.setOnClickListener { v: View? ->
|
|
||||||
val intent = Intent(application, RegisterActivity::class.java)
|
|
||||||
startActivity(intent)
|
|
||||||
}
|
|
||||||
val forgotPw = findViewById<TextView>(R.id.forgot)
|
|
||||||
forgotPw.setOnClickListener { v: View? ->
|
|
||||||
val intent = Intent(application, forgotPasswordActivity::class.java)
|
|
||||||
startActivity(intent)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Attempts to sign in or register the account specified by the login form.
|
|
||||||
* If there are form errors (invalid email, missing fields, etc.), the
|
|
||||||
* errors are presented and no actual login attempt is made.
|
|
||||||
*/
|
|
||||||
private fun attemptLogin() {
|
|
||||||
if (auth == null) {
|
|
||||||
displayToast("Login invalid")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset errors
|
|
||||||
mEmailView!!.error = null
|
|
||||||
mPasswordView!!.error = null
|
|
||||||
|
|
||||||
// Store values at the time of the login attempt.
|
|
||||||
val email = mEmailView!!.text.toString()
|
|
||||||
val password = mPasswordView!!.text.toString()
|
|
||||||
var cancel = false
|
|
||||||
var focusView: View? = null
|
|
||||||
|
|
||||||
// Check for a valid password, if the user entered one.
|
|
||||||
if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) {
|
|
||||||
mPasswordView!!.error = getString(R.string.error_invalid_password)
|
|
||||||
focusView = mPasswordView
|
|
||||||
cancel = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for a valid email address.
|
|
||||||
if (TextUtils.isEmpty(email)) {
|
|
||||||
mEmailView!!.error = getString(R.string.error_field_required)
|
|
||||||
focusView = mEmailView
|
|
||||||
cancel = true
|
|
||||||
} else if (!isEmailValid(email)) {
|
|
||||||
mEmailView!!.error = getString(R.string.error_invalid_email)
|
|
||||||
focusView = mEmailView
|
|
||||||
cancel = true
|
|
||||||
}
|
|
||||||
if (cancel) {
|
|
||||||
// There was an error; don't attempt login and focus the first
|
|
||||||
// form field with an error.
|
|
||||||
focusView!!.requestFocus()
|
|
||||||
} else {
|
|
||||||
// Show a progress spinner, and kick off a background task to
|
|
||||||
// perform the user login attempt.
|
|
||||||
showProgress(true)
|
|
||||||
auth!!.signInWithEmailAndPassword(email, password)
|
|
||||||
.addOnCompleteListener { task: Task<AuthResult?> ->
|
|
||||||
showProgress(false)
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
navigateToActivity(
|
|
||||||
this@LoginActivity,
|
|
||||||
Navigations.Main
|
|
||||||
)
|
|
||||||
finish()
|
|
||||||
} else {
|
|
||||||
displayToast(getString(R.string.login_failed))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun isEmailValid(email: String): Boolean {
|
|
||||||
//TODO: Replace this with your own logic
|
|
||||||
return email.contains("@")
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun isPasswordValid(password: String): Boolean {
|
|
||||||
//TODO: Replace this with your own logic
|
|
||||||
return password.length > 6
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Shows the progress UI and hides the login form.
|
|
||||||
*/
|
|
||||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2)
|
|
||||||
private fun showProgress(show: Boolean) {
|
|
||||||
// On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow
|
|
||||||
// for very easy animations. If available, use these APIs to fade-in
|
|
||||||
// the progress spinner.
|
|
||||||
val shortAnimTime = resources.getInteger(android.R.integer.config_shortAnimTime)
|
|
||||||
mLoginView!!.visibility = if (show) View.GONE else View.VISIBLE
|
|
||||||
mLoginView!!.animate().setDuration(shortAnimTime.toLong()).alpha(
|
|
||||||
if (show) 0F else 1.toFloat()
|
|
||||||
).setListener(object : AnimatorListenerAdapter() {
|
|
||||||
override fun onAnimationEnd(animation: Animator) {
|
|
||||||
mLoginView!!.visibility = if (show) View.GONE else View.VISIBLE
|
|
||||||
}
|
|
||||||
})
|
|
||||||
mProgressView!!.visibility = if (show) View.VISIBLE else View.GONE
|
|
||||||
mProgressView!!.animate().setDuration(shortAnimTime.toLong()).alpha(
|
|
||||||
if (show) 1F else 0.toFloat()
|
|
||||||
).setListener(object : AnimatorListenerAdapter() {
|
|
||||||
override fun onAnimationEnd(animation: Animator) {
|
|
||||||
mProgressView!!.visibility = if (show) View.VISIBLE else View.GONE
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,161 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.user
|
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.text.TextUtils
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.View
|
|
||||||
import android.widget.Button
|
|
||||||
import android.widget.EditText
|
|
||||||
import android.widget.ProgressBar
|
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.auth.AuthResult
|
|
||||||
import com.google.firebase.auth.FirebaseAuth
|
|
||||||
import com.google.firebase.auth.UserProfileChangeRequest
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import com.google.firebase.database.FirebaseDatabase
|
|
||||||
import h_mal.appttude.com.driver.Global.FirebaseClass
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.Objects.UserObject
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
|
|
||||||
class RegisterActivity : AppCompatActivity() {
|
|
||||||
private var auth: FirebaseAuth? = null
|
|
||||||
private var name: EditText? = null
|
|
||||||
private var email: EditText? = null
|
|
||||||
private var passwordTop: EditText? = null
|
|
||||||
private var passwordBottom: EditText? = null
|
|
||||||
private var progressBar: ProgressBar? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
setContentView(R.layout.activity_register)
|
|
||||||
auth = FirebaseAuth.getInstance()
|
|
||||||
name = findViewById(R.id.name_register)
|
|
||||||
email = findViewById(R.id.email_register)
|
|
||||||
passwordTop = findViewById(R.id.password_top)
|
|
||||||
passwordBottom = findViewById(R.id.password_bottom)
|
|
||||||
progressBar = findViewById(R.id.pb)
|
|
||||||
val submit: Button = findViewById(R.id.email_sign_up)
|
|
||||||
submit.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val nameString: String = name.getText().toString().trim({ it <= ' ' })
|
|
||||||
val emailText: String = email.getText().toString().trim({ it <= ' ' })
|
|
||||||
val passwordText: String = passwordTop.getText().toString().trim({ it <= ' ' })
|
|
||||||
val passwordTextBottom: String =
|
|
||||||
passwordBottom.getText().toString().trim({ it <= ' ' })
|
|
||||||
var cancel: Boolean = false
|
|
||||||
var focusView: View? = null
|
|
||||||
if (TextUtils.isEmpty(nameString)) {
|
|
||||||
name.setError(getString(R.string.error_field_required))
|
|
||||||
focusView = name
|
|
||||||
cancel = true
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(emailText)) {
|
|
||||||
email.setError(getString(R.string.error_field_required))
|
|
||||||
focusView = email
|
|
||||||
cancel = true
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(passwordText)) {
|
|
||||||
passwordTop.setError(getString(R.string.error_field_required))
|
|
||||||
focusView = passwordTop
|
|
||||||
cancel = true
|
|
||||||
}
|
|
||||||
if (TextUtils.isEmpty(passwordTextBottom)) {
|
|
||||||
passwordBottom.setError(getString(R.string.error_field_required))
|
|
||||||
focusView = passwordBottom
|
|
||||||
cancel = true
|
|
||||||
}
|
|
||||||
if (!TextUtils.isEmpty(passwordText) && !isPasswordValid(passwordText)) {
|
|
||||||
passwordTop.setError(getString(R.string.error_invalid_password))
|
|
||||||
focusView = passwordTop
|
|
||||||
cancel = true
|
|
||||||
}
|
|
||||||
if (!(passwordText == passwordTextBottom)) {
|
|
||||||
passwordBottom.setError(getString(R.string.no_match_password))
|
|
||||||
focusView = passwordBottom
|
|
||||||
cancel = true
|
|
||||||
}
|
|
||||||
if (cancel) {
|
|
||||||
// There was an error; don't attempt login and focus the first
|
|
||||||
// form field with an error.
|
|
||||||
focusView!!.requestFocus()
|
|
||||||
} else {
|
|
||||||
progressBar.setVisibility(View.VISIBLE)
|
|
||||||
//create user
|
|
||||||
auth.createUserWithEmailAndPassword(emailText, passwordText)
|
|
||||||
.addOnCompleteListener(
|
|
||||||
this@RegisterActivity,
|
|
||||||
object : OnCompleteListener<AuthResult?> {
|
|
||||||
override fun onComplete(task: Task<AuthResult?>) {
|
|
||||||
progressBar.setVisibility(View.GONE)
|
|
||||||
if (!task.isSuccessful) {
|
|
||||||
Toast.makeText(
|
|
||||||
this@RegisterActivity,
|
|
||||||
"Authentication failed." + task.exception,
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
} else {
|
|
||||||
val profileUpdatesBuilder: UserProfileChangeRequest.Builder =
|
|
||||||
UserProfileChangeRequest.Builder()
|
|
||||||
if (!TextUtils.isEmpty(nameString)) {
|
|
||||||
profileUpdatesBuilder.setDisplayName(nameString)
|
|
||||||
}
|
|
||||||
val profileUpdates: UserProfileChangeRequest =
|
|
||||||
profileUpdatesBuilder.build()
|
|
||||||
auth.getCurrentUser()!!.updateProfile(profileUpdates)
|
|
||||||
.addOnCompleteListener(object :
|
|
||||||
OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
Log.i(
|
|
||||||
"RegisterActivity",
|
|
||||||
"onComplete: " + task.isSuccessful
|
|
||||||
)
|
|
||||||
val mDatabase: DatabaseReference =
|
|
||||||
FirebaseDatabase.getInstance()
|
|
||||||
.reference
|
|
||||||
mDatabase.child(FirebaseClass.USER_FIREBASE)
|
|
||||||
.child(
|
|
||||||
auth.getCurrentUser()!!.uid
|
|
||||||
).child("role")
|
|
||||||
.setValue("driver")
|
|
||||||
mDatabase.child(FirebaseClass.USER_FIREBASE)
|
|
||||||
.child(
|
|
||||||
auth.getCurrentUser()!!.uid
|
|
||||||
).child("user_details")
|
|
||||||
.setValue(
|
|
||||||
UserObject(
|
|
||||||
auth.getCurrentUser()!!
|
|
||||||
.displayName,
|
|
||||||
auth.getCurrentUser()!!
|
|
||||||
.email,
|
|
||||||
null
|
|
||||||
)
|
|
||||||
)
|
|
||||||
val intent: Intent = Intent(
|
|
||||||
this@RegisterActivity,
|
|
||||||
MainActivity::class.java
|
|
||||||
)
|
|
||||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
|
|
||||||
startActivity(intent)
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun isPasswordValid(password: String): Boolean {
|
|
||||||
//TODO: Replace this with your own logic
|
|
||||||
return password.length > 6
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.user
|
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.View
|
|
||||||
import android.widget.Button
|
|
||||||
import android.widget.EditText
|
|
||||||
import android.widget.Toast
|
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
import androidx.core.app.NavUtils
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.auth.FirebaseAuth
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
|
|
||||||
class forgotPasswordActivity : AppCompatActivity() {
|
|
||||||
var TAG: String = "forgotPasswordActivity"
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
setContentView(R.layout.activity_forgot_password)
|
|
||||||
val editText: EditText = findViewById(R.id.reset_pw)
|
|
||||||
val resetPw: Button = findViewById(R.id.reset_pw_sign_up)
|
|
||||||
resetPw.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
resetPassword(editText.text.toString().trim({ it <= ' ' }))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun resetPassword(emailAddress: String) {
|
|
||||||
val auth: FirebaseAuth = FirebaseAuth.getInstance()
|
|
||||||
auth.sendPasswordResetEmail(emailAddress)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
Log.d(TAG, "Email sent.")
|
|
||||||
NavUtils.navigateUpFromSameTask(this@forgotPasswordActivity)
|
|
||||||
finish()
|
|
||||||
} else {
|
|
||||||
Toast.makeText(
|
|
||||||
this@forgotPasswordActivity,
|
|
||||||
"Could not reset Password",
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,201 +0,0 @@
|
|||||||
package h_mal.appttude.com.driver.user
|
|
||||||
|
|
||||||
import android.app.AlertDialog
|
|
||||||
import android.content.DialogInterface
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.text.InputType
|
|
||||||
import android.text.TextUtils
|
|
||||||
import android.util.Log
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.View
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import android.widget.*
|
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import com.google.android.gms.tasks.OnCompleteListener
|
|
||||||
import com.google.android.gms.tasks.OnFailureListener
|
|
||||||
import com.google.android.gms.tasks.Task
|
|
||||||
import com.google.firebase.auth.EmailAuthProvider
|
|
||||||
import com.google.firebase.auth.FirebaseAuth
|
|
||||||
import com.google.firebase.auth.FirebaseUser
|
|
||||||
import com.google.firebase.auth.UserProfileChangeRequest
|
|
||||||
import com.google.firebase.database.DatabaseReference
|
|
||||||
import h_mal.appttude.com.driver.Global.FirebaseClass
|
|
||||||
import h_mal.appttude.com.driver.Global.ViewController
|
|
||||||
import h_mal.appttude.com.driver.MainActivity
|
|
||||||
import h_mal.appttude.com.driver.R
|
|
||||||
|
|
||||||
|
|
||||||
class profileFragment : Fragment() {
|
|
||||||
private val TAG = this.javaClass.simpleName
|
|
||||||
private var email: TextView? = null
|
|
||||||
private var name: TextView? = null
|
|
||||||
private var changePw: TextView? = null
|
|
||||||
private var user: FirebaseUser? = null
|
|
||||||
private var databaseReference: DatabaseReference? = null
|
|
||||||
var viewController: ViewController? = null
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
viewController = ViewController(activity)
|
|
||||||
user = MainActivity.auth!!.currentUser
|
|
||||||
databaseReference =
|
|
||||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
|
||||||
user!!.uid
|
|
||||||
)
|
|
||||||
.child(FirebaseClass.DRIVER_FIREBASE)
|
|
||||||
.child(FirebaseClass.DRIVER_DETAILS_FIREBASE)
|
|
||||||
.child("driverPic")
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateView(
|
|
||||||
inflater: LayoutInflater, container: ViewGroup?,
|
|
||||||
savedInstanceState: Bundle?
|
|
||||||
): View? {
|
|
||||||
// Inflate the layout for this fragment
|
|
||||||
val view = inflater.inflate(R.layout.fragment_profile, container, false)
|
|
||||||
email = view.findViewById(R.id.change_email)
|
|
||||||
name = view.findViewById(R.id.change_profile_name)
|
|
||||||
changePw = view.findViewById(R.id.change_pw)
|
|
||||||
val button = view.findViewById<Button>(R.id.submit_profile)
|
|
||||||
button.setOnClickListener(View.OnClickListener { MainActivity.fragmentManager!!.popBackStack() })
|
|
||||||
name.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
val dialog = AlertDialog.Builder(context)
|
|
||||||
dialog.setTitle("Update Username")
|
|
||||||
val titleBox = EditText(context)
|
|
||||||
titleBox.setText(user!!.displayName)
|
|
||||||
dialog.setView(titleBox)
|
|
||||||
dialog.setPositiveButton("Update", object : DialogInterface.OnClickListener {
|
|
||||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
|
||||||
updateProfile(titleBox.text.toString().trim { it <= ' ' })
|
|
||||||
}
|
|
||||||
})
|
|
||||||
dialog.show()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
email.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
showDialog(EMAIL_CONSTANT)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
changePw.setOnClickListener(object : View.OnClickListener {
|
|
||||||
override fun onClick(v: View) {
|
|
||||||
showDialog(PW_CONSTANT)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
return view
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun updateProfile(profileName: String) {
|
|
||||||
val profileUpdatesBuilder = UserProfileChangeRequest.Builder()
|
|
||||||
if (!TextUtils.isEmpty(profileName)) {
|
|
||||||
profileUpdatesBuilder.setDisplayName(profileName)
|
|
||||||
}
|
|
||||||
val profileUpdates = profileUpdatesBuilder.build()
|
|
||||||
user!!.updateProfile(profileUpdates)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
Log.d(TAG, "User profile updated.")
|
|
||||||
viewController!!.reloadDrawer()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.addOnFailureListener(object : OnFailureListener {
|
|
||||||
override fun onFailure(e: Exception) {
|
|
||||||
Toast.makeText(context, "Update Failed", Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun changeCredentials(
|
|
||||||
email: String,
|
|
||||||
password: String,
|
|
||||||
changeText: String,
|
|
||||||
selector: String
|
|
||||||
) {
|
|
||||||
// Get auth credentials from the user for re-authentication
|
|
||||||
val credential = EmailAuthProvider
|
|
||||||
.getCredential(email, password) // Current Login Credentials \\
|
|
||||||
// Prompt the user to re-provide their sign-in credentials
|
|
||||||
user!!.reauthenticate(credential)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
Log.d(TAG, "User re-authenticated.")
|
|
||||||
user = FirebaseAuth.getInstance().currentUser
|
|
||||||
if ((selector == EMAIL_CONSTANT)) {
|
|
||||||
user!!.updateEmail(changeText)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
Log.d(TAG, "User email address updated.")
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
"Update Successful",
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
viewController!!.reloadDrawer()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if ((selector == PW_CONSTANT)) {
|
|
||||||
user!!.updatePassword(changeText)
|
|
||||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
|
||||||
override fun onComplete(task: Task<Void?>) {
|
|
||||||
if (task.isSuccessful) {
|
|
||||||
Log.d(TAG, "User email address updated.")
|
|
||||||
Toast.makeText(
|
|
||||||
context,
|
|
||||||
"Update Successful",
|
|
||||||
Toast.LENGTH_SHORT
|
|
||||||
).show()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun showDialog(update: String) {
|
|
||||||
//Make new Dialog
|
|
||||||
val dialog = AlertDialog.Builder(context)
|
|
||||||
dialog.setTitle("Update $update")
|
|
||||||
val layout = LinearLayout(context)
|
|
||||||
layout.orientation = LinearLayout.VERTICAL
|
|
||||||
layout.setPadding(28, 0, 56, 0)
|
|
||||||
val box1 = EditText(context)
|
|
||||||
box1.hint = "Current Email Address"
|
|
||||||
box1.inputType = InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
|
|
||||||
layout.addView(box1) // Notice this is an add method
|
|
||||||
val box2 = EditText(context)
|
|
||||||
box2.hint = "Current Password"
|
|
||||||
box2.inputType = InputType.TYPE_CLASS_TEXT or
|
|
||||||
InputType.TYPE_TEXT_VARIATION_PASSWORD
|
|
||||||
layout.addView(box2) // Another add method
|
|
||||||
val box3 = EditText(context)
|
|
||||||
if ((update == PW_CONSTANT)) {
|
|
||||||
box3.inputType = InputType.TYPE_CLASS_TEXT or
|
|
||||||
InputType.TYPE_TEXT_VARIATION_PASSWORD
|
|
||||||
} else {
|
|
||||||
box3.inputType = InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS
|
|
||||||
}
|
|
||||||
box3.hint = "New $update"
|
|
||||||
layout.addView(box3) // Another add method
|
|
||||||
dialog.setView(layout)
|
|
||||||
dialog.setPositiveButton("Update", object : DialogInterface.OnClickListener {
|
|
||||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
|
||||||
val email = box1.text.toString().trim { it <= ' ' }
|
|
||||||
val password = box2.text.toString().trim { it <= ' ' }
|
|
||||||
val textThree = box3.text.toString().trim { it <= ' ' }
|
|
||||||
changeCredentials(email, password, textThree, update)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
dialog.show()
|
|
||||||
}
|
|
||||||
|
|
||||||
companion object {
|
|
||||||
private val EMAIL_CONSTANT = "Email Address"
|
|
||||||
private val PW_CONSTANT = "Password"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user