mirror of
https://github.com/hmalik144/Driver.git
synced 2025-12-10 02:45:20 +00:00
Kotlin migration Successful
This commit is contained in:
@@ -40,28 +40,52 @@ android {
|
||||
|
||||
dependencies {
|
||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||
implementation 'androidx.appcompat:appcompat:1.0.0'
|
||||
implementation 'com.google.android.material:material:1.0.0'
|
||||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation 'androidx.exifinterface:exifinterface:1.0.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation "androidx.appcompat:appcompat:1.0.0"
|
||||
implementation "com.google.android.material:material:1.0.0"
|
||||
implementation "androidx.cardview:cardview:1.0.0"
|
||||
implementation "androidx.legacy:legacy-support-v4:1.0.0"
|
||||
implementation "androidx.exifinterface:exifinterface:1.0.0"
|
||||
implementation "androidx.constraintlayout:constraintlayout:1.1.3"
|
||||
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
|
||||
implementation 'com.google.android.gms:play-services-auth:15.0.1'
|
||||
implementation "com.google.android.gms:play-services-auth:15.0.1"
|
||||
// Google firebase
|
||||
implementation 'com.google.firebase:firebase-core:16.0.1'
|
||||
implementation 'com.google.firebase:firebase-auth:16.0.1'
|
||||
implementation 'com.google.firebase:firebase-storage:16.0.1'
|
||||
implementation 'com.google.firebase:firebase-database:16.0.1'
|
||||
def firebaseVer = "16.0.1"
|
||||
implementation "com.google.firebase:firebase-core:$firebaseVer"
|
||||
implementation "com.google.firebase:firebase-auth:$firebaseVer"
|
||||
implementation "com.google.firebase:firebase-storage:$firebaseVer"
|
||||
implementation "com.google.firebase:firebase-database:$firebaseVer"
|
||||
// Photoviewer
|
||||
implementation 'com.github.chrisbanes:PhotoView:2.1.0'
|
||||
// Picasso photo loader
|
||||
implementation 'com.squareup.picasso:picasso:2.71828'
|
||||
// Gson
|
||||
implementation 'com.google.code.gson:gson:2.3.1'
|
||||
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 "com.github.chrisbanes:PhotoView:2.1.0"
|
||||
/* Picasso photo loader */
|
||||
implementation "com.squareup.picasso:picasso:2.71828"
|
||||
/* Gson */
|
||||
implementation "com.google.code.gson:gson:2.3.1"
|
||||
/* coroutines support for firebase operations */
|
||||
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-play-services: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"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="h_mal.appttude.com.driver">
|
||||
|
||||
<!-- To auto-complete the email text field in the login form with the user's emails -->
|
||||
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
|
||||
<uses-permission android:name="android.permission.READ_PROFILE" />
|
||||
@@ -12,12 +11,14 @@
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<application
|
||||
android:name=".application.DriverApplication"
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme">
|
||||
<activity android:name=".update.UpdateActivity" />
|
||||
<activity
|
||||
android:name=".user.LoginActivity"
|
||||
android:label="@string/app_name"
|
||||
@@ -25,6 +26,7 @@
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
@@ -32,12 +34,7 @@
|
||||
android:name=".MainActivity"
|
||||
android:configChanges="orientation|screenSize"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
|
||||
</activity>
|
||||
<activity android:name=".user.RegisterActivity">
|
||||
|
||||
</activity>
|
||||
android:theme="@style/AppTheme.NoActionBar" />
|
||||
|
||||
<provider
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
@@ -48,8 +45,6 @@
|
||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/file_paths" />
|
||||
</provider>
|
||||
|
||||
<activity android:name=".user.forgotPasswordActivity"></activity>
|
||||
</application>
|
||||
|
||||
</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
|
||||
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
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.ImageSwiperClass
|
||||
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.model.DriversLicenseObject
|
||||
import h_mal.appttude.com.driver.model.MotObject
|
||||
import h_mal.appttude.com.driver.model.PrivateHireObject
|
||||
import h_mal.appttude.com.driver.model.VehicleProfileObject
|
||||
import h_mal.appttude.com.driver.utils.DateUtils.convertDateStringDatePattern
|
||||
import java.text.ParseException
|
||||
|
||||
class ArchiveObjectListAdapter(
|
||||
@@ -94,7 +101,6 @@ class ArchiveObjectListAdapter(
|
||||
fieldTwoText.text = driversLicenseObject.licenseNumber
|
||||
}
|
||||
FirebaseClass.MOT_FIREBASE -> {
|
||||
Log.i(TAG, "getView: MOT OBJECT")
|
||||
expiryHolder.visibility = View.VISIBLE
|
||||
fieldTwo.visibility = View.GONE
|
||||
val motObject: MotObject = getItem(position) as MotObject
|
||||
@@ -141,7 +147,7 @@ class ArchiveObjectListAdapter(
|
||||
val expiryText: TextView = listItemView.findViewById(R.id.exp_text)
|
||||
val fieldTwoText: TextView = listItemView.findViewById(R.id.archive_insurer)
|
||||
val insuranceObject: InsuranceObject = getItem(position) as InsuranceObject
|
||||
swiperClass.reinstantiateList(insuranceObject.photoStrings)
|
||||
// swiperClass.reinstantiateList(insuranceObject.photoStrings)
|
||||
expiryText.text = insuranceObject.expiryDate
|
||||
fieldTwoText.text = insuranceObject.insurerName
|
||||
} else if ((archiveString == FirebaseClass.VEHICLE_DETAILS_FIREBASE)) {
|
||||
@@ -155,7 +161,7 @@ class ArchiveObjectListAdapter(
|
||||
val keeperAddress: TextView = listItemView.findViewById(R.id.keeper_address)
|
||||
val carText: TextView = listItemView.findViewById(R.id.car_text_arch)
|
||||
val carColour: TextView = listItemView.findViewById(R.id.car_colour)
|
||||
val carSeized: TextView = listItemView.findViewById(R.id.seized)
|
||||
val carSeized: TextView = listItemView.findViewById(R.id.seized_checkbox)
|
||||
val startDate: TextView = listItemView.findViewById(R.id.first_date)
|
||||
val vehicleProfileObject: VehicleProfileObject =
|
||||
getItem(position) as VehicleProfileObject
|
||||
@@ -180,7 +186,7 @@ class ArchiveObjectListAdapter(
|
||||
private fun dateString(position: Int) {
|
||||
var success: Boolean = true
|
||||
try {
|
||||
dateArchivedText!!.text = MainActivity.setAsDateTime(mKeys.get(position))
|
||||
dateArchivedText!!.text = mKeys[position].convertDateStringDatePattern("yyyyMMdd_HHmmss", "dd/MM/yyyy")
|
||||
} catch (e: ParseException) {
|
||||
e.printStackTrace()
|
||||
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
|
||||
|
||||
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.WholeDriverObject
|
||||
import h_mal.appttude.com.driver.R
|
||||
@@ -11,16 +8,16 @@ import h_mal.appttude.com.driver.R
|
||||
class ApprovalsClass {
|
||||
fun getOverApprovalStatusCode(wholeDriverObject: WholeDriverObject?): Int {
|
||||
if (wholeDriverObject!!.approvalsObject != null) {
|
||||
val approvalsObject: ApprovalsObject? = wholeDriverObject.approvalsObject
|
||||
val approvalsObject: ApprovalsObject = wholeDriverObject!!.approvalsObject!!
|
||||
val ints: IntArray = intArrayOf(
|
||||
approvalsObject.getDriver_details_approval(),
|
||||
approvalsObject.driver_details_approval,
|
||||
approvalsObject.driver_license_approval,
|
||||
approvalsObject.private_hire_approval,
|
||||
approvalsObject.vehicle_details_approval,
|
||||
approvalsObject.insurance_details_approval,
|
||||
approvalsObject.getMot_details_approval(),
|
||||
approvalsObject.getLog_book_approval(),
|
||||
approvalsObject.getPh_car_approval()
|
||||
approvalsObject.mot_details_approval,
|
||||
approvalsObject.log_book_approval,
|
||||
approvalsObject.ph_car_approval
|
||||
)
|
||||
return setImageResource(mode(ints))
|
||||
}
|
||||
@@ -28,18 +25,16 @@ class ApprovalsClass {
|
||||
}
|
||||
|
||||
fun setStatusCode(userId: String?, approvalNameString: String, status: Int) {
|
||||
if (!(approvalNameString == "")) {
|
||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
||||
.child((userId)!!).child(FirebaseClass.USER_APPROVALS)
|
||||
.child(approvalNameString)
|
||||
.setValue(status).addOnCompleteListener(object : OnCompleteListener<Void?> {
|
||||
override fun onComplete(task: Task<Void?>) {
|
||||
if (task.isSuccessful) {
|
||||
} else {
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
// if (!(approvalNameString == "")) {
|
||||
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
||||
// .child((userId)!!).child(FirebaseClass.USER_APPROVALS)
|
||||
// .child(approvalNameString)
|
||||
// .setValue(status).addOnCompleteListener { task ->
|
||||
// if (task.isSuccessful) {
|
||||
// } else {
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
fun setImageResource(statusCode: Int): Int {
|
||||
@@ -55,7 +50,6 @@ class ApprovalsClass {
|
||||
|
||||
companion object {
|
||||
fun mode(array: IntArray): Int {
|
||||
MainActivity.printObjectAsJson("modeArrays", array)
|
||||
var mode: Int = array.get(0)
|
||||
var maxCount: Int = 0
|
||||
if (matchedArray(array, 3)) {
|
||||
|
||||
@@ -2,54 +2,45 @@ package h_mal.appttude.com.driver.Global
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.google.android.gms.tasks.OnCompleteListener
|
||||
import com.google.android.gms.tasks.Task
|
||||
import com.google.firebase.database.DatabaseReference
|
||||
import h_mal.appttude.com.driver.MainActivity
|
||||
import h_mal.appttude.com.driver.utils.UPLOAD_NEW
|
||||
|
||||
|
||||
class ArchiveClass {
|
||||
fun archiveRecord(UID: String?, item: String?, `object`: Any?) {
|
||||
val toPath: DatabaseReference =
|
||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
||||
(UID)!!
|
||||
)
|
||||
.child(FirebaseClass.ARCHIVE_FIREBASE).child((item)!!)
|
||||
toPath.child(MainActivity.Companion.getDateTimeStamp()).setValue(`object`)
|
||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
||||
override fun onComplete(task: Task<Void?>) {
|
||||
if (task.isSuccessful) {
|
||||
Log.i(TAG, "onComplete: archive successful")
|
||||
} else {
|
||||
Log.i(TAG, "onComplete: archive unsuccessful")
|
||||
}
|
||||
}
|
||||
})
|
||||
// val toPath: DatabaseReference =
|
||||
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
||||
// (UID)!!
|
||||
// )
|
||||
// .child(FirebaseClass.ARCHIVE_FIREBASE).child((item)!!)
|
||||
// toPath.child(MainActivity.dateTimeStamp).setValue(`object`)
|
||||
// .addOnCompleteListener { task ->
|
||||
// if (task.isSuccessful) {
|
||||
// Log.i(TAG, "onComplete: archive successful")
|
||||
// } else {
|
||||
// Log.i(TAG, "onComplete: archive unsuccessful")
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
fun openDialogArchive(context: Context?, `object`: Any?, fragment: Fragment) {
|
||||
if (`object` == null) {
|
||||
ExecuteFragment.executeFragment(fragment)
|
||||
// executeFragment(fragment)
|
||||
} else {
|
||||
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
||||
builder.setMessage("Do you want to View/Edit or Upload new?")
|
||||
.setPositiveButton("View/Edit", object : DialogInterface.OnClickListener {
|
||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
||||
ExecuteFragment.executeFragment(fragment)
|
||||
}
|
||||
})
|
||||
.setNegativeButton("Upload New", object : DialogInterface.OnClickListener {
|
||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
||||
val bundle: Bundle = Bundle()
|
||||
bundle.putString(ExecuteFragment.UPLOAD_NEW, "Yes")
|
||||
fragment.arguments = bundle
|
||||
ExecuteFragment.executeFragment(fragment)
|
||||
}
|
||||
})
|
||||
.setPositiveButton("View/Edit"
|
||||
) { _, _ ->
|
||||
// executeFragment(fragment)
|
||||
}
|
||||
.setNegativeButton("Upload New"
|
||||
) { _, _ ->
|
||||
val bundle = Bundle()
|
||||
bundle.putString(UPLOAD_NEW, "Yes")
|
||||
fragment.arguments = bundle
|
||||
// executeFragment(fragment)
|
||||
}
|
||||
.create().show()
|
||||
}
|
||||
}
|
||||
@@ -59,26 +50,21 @@ class ArchiveClass {
|
||||
bundle.putString("user_id", user)
|
||||
fragment!!.arguments = bundle
|
||||
if (`object` == null) {
|
||||
ExecuteFragment.executeFragment(fragment)
|
||||
// executeFragment(fragment)
|
||||
} else {
|
||||
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
||||
builder.setMessage("Do you want to View/Edit or Upload new?")
|
||||
.setPositiveButton("View/Edit", object : DialogInterface.OnClickListener {
|
||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
||||
ExecuteFragment.executeFragment(fragment)
|
||||
}
|
||||
})
|
||||
.setNegativeButton("Upload New", object : DialogInterface.OnClickListener {
|
||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
||||
bundle.putString(ExecuteFragment.UPLOAD_NEW, "Yes")
|
||||
ExecuteFragment.executeFragment(fragment)
|
||||
}
|
||||
})
|
||||
.setPositiveButton("View/Edit"
|
||||
) { _, _ ->
|
||||
// executeFragment(fragment)
|
||||
}
|
||||
.setNegativeButton("Upload New"
|
||||
) { _, _ ->
|
||||
bundle.putString(UPLOAD_NEW, "Yes")
|
||||
// executeFragment(fragment)
|
||||
}
|
||||
.create().show()
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TAG: String = "ArchiveClass"
|
||||
}
|
||||
}
|
||||
@@ -1,103 +1,54 @@
|
||||
package h_mal.appttude.com.driver.Global
|
||||
|
||||
|
||||
import android.app.DatePickerDialog
|
||||
import android.app.DatePickerDialog.OnDateSetListener
|
||||
import android.content.Context
|
||||
import android.icu.util.Calendar
|
||||
import android.os.Build
|
||||
import android.text.TextUtils
|
||||
import android.util.Log
|
||||
import android.widget.DatePicker
|
||||
import android.widget.EditText
|
||||
import androidx.annotation.RequiresApi
|
||||
import h_mal.appttude.com.driver.R
|
||||
import java.text.ParseException
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
import h_mal.appttude.com.driver.utils.DateUtils
|
||||
|
||||
private const val DATE_FORMAT = "dd/MM/yyyy"
|
||||
@RequiresApi(api = Build.VERSION_CODES.N)
|
||||
class DateDialog(
|
||||
context: Context,
|
||||
private val editText: EditText
|
||||
) : DatePickerDialog(context) {
|
||||
|
||||
class DateDialog : DatePickerDialog {
|
||||
var mYear: Int = 0
|
||||
var mMonth: Int = 0
|
||||
var mDay: Int = 0
|
||||
var editText: EditText? = null
|
||||
var dateSetListener: OnDateSetListener =
|
||||
OnDateSetListener { _, year, month, dayOfMonth ->
|
||||
val cal = Calendar.getInstance()
|
||||
cal.set(year, month + 1, dayOfMonth)
|
||||
|
||||
@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,
|
||||
listener: OnDateSetListener?,
|
||||
year: Int, month: Int, dayOfMonth: Int
|
||||
) : super(context, listener, year, month, dayOfMonth)
|
||||
|
||||
constructor(
|
||||
context: Context,
|
||||
themeResId: Int,
|
||||
listener: OnDateSetListener?,
|
||||
year: Int,
|
||||
monthOfYear: Int,
|
||||
dayOfMonth: Int
|
||||
) : super(context, themeResId, listener, year, monthOfYear, dayOfMonth)
|
||||
|
||||
override fun setTitle(title: CharSequence) {
|
||||
super.setTitle(title)
|
||||
}
|
||||
|
||||
override fun setOnDateSetListener(listener: OnDateSetListener?) {
|
||||
super.setOnDateSetListener(dateSetListener)
|
||||
}
|
||||
|
||||
fun init(editText: EditText?) {
|
||||
this.editText = editText
|
||||
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)
|
||||
}
|
||||
}
|
||||
editText.setText(DateUtils.parseCalenderIntoDateString(cal, DATE_FORMAT))
|
||||
}
|
||||
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))
|
||||
|
||||
init {
|
||||
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)
|
||||
setOnDateSetListener(dateSetListener)
|
||||
setTitle(context.getString(R.string.set_date))
|
||||
show()
|
||||
}
|
||||
|
||||
var dateSetListener: OnDateSetListener = object : OnDateSetListener {
|
||||
override fun onDateSet(view: DatePicker, year: Int, month: Int, dayOfMonth: Int) {
|
||||
mYear = year
|
||||
mMonth = month + 1
|
||||
mDay = dayOfMonth
|
||||
editText!!.setText(
|
||||
(String.format("%02d", mDay) + "/" + String.format("%02d", (mMonth)) + "/" +
|
||||
mYear)
|
||||
)
|
||||
}
|
||||
private fun setDateFromCalender(calendar: Calendar){
|
||||
val mYear = calendar.get(Calendar.YEAR)
|
||||
val mMonth = calendar.get(Calendar.MONTH)
|
||||
val mDay = calendar.get(Calendar.DAY_OF_MONTH)
|
||||
|
||||
updateDate(mYear, mMonth, mDay)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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
|
||||
|
||||
import android.app.ProgressDialog
|
||||
import android.content.Context
|
||||
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) {
|
||||
open interface Response {
|
||||
@@ -17,46 +9,41 @@ class FirebaseClass constructor(var context: Context?, var filePath: Uri?, var d
|
||||
}
|
||||
|
||||
fun uploadImage(path: String, name: String) {
|
||||
if (filePath != null) {
|
||||
val progressDialog: ProgressDialog = ProgressDialog(context)
|
||||
progressDialog.setTitle("Uploading...")
|
||||
progressDialog.show()
|
||||
val ref: StorageReference = MainActivity.storageReference!!.child(
|
||||
("images/" + MainActivity.auth!!.currentUser!!
|
||||
.uid + "/" + path
|
||||
+ "/" + name)
|
||||
)
|
||||
val uploadTask: UploadTask = ref.putFile(filePath!!)
|
||||
uploadTask.addOnProgressListener(object : OnProgressListener<UploadTask.TaskSnapshot> {
|
||||
override fun onProgress(taskSnapshot: UploadTask.TaskSnapshot) {
|
||||
val progress: Double =
|
||||
(100.0 * taskSnapshot.bytesTransferred / taskSnapshot
|
||||
.totalByteCount)
|
||||
progressDialog.setMessage("Uploaded " + progress.toInt() + "%")
|
||||
}
|
||||
}).continueWithTask(object : Continuation<UploadTask.TaskSnapshot?, Task<Uri>> {
|
||||
@Throws(Exception::class)
|
||||
override fun then(task: Task<UploadTask.TaskSnapshot?>): Task<Uri> {
|
||||
if (!task.isSuccessful) {
|
||||
throw (task.exception)!!
|
||||
}
|
||||
|
||||
// Continue with the task to get the download URL
|
||||
return ref.downloadUrl
|
||||
}
|
||||
}).addOnCompleteListener { task ->
|
||||
if (task.isSuccessful) {
|
||||
delegate.processFinish(task.result)
|
||||
progressDialog.dismiss()
|
||||
context?.displayToast("Uploaded Successfully")
|
||||
println("onComplete: uploaded Successful uri: " + task.result)
|
||||
} else {
|
||||
delegate.processFinish(null)
|
||||
progressDialog.dismiss()
|
||||
context?.displayToast("Uploaded Successfully")
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (filePath != null) {
|
||||
// val progressDialog: ProgressDialog = ProgressDialog(context)
|
||||
// progressDialog.setTitle("Uploading...")
|
||||
// progressDialog.show()
|
||||
// val ref: StorageReference = MainActivity.storageReference!!.child(
|
||||
// ("images/" + MainActivity.auth!!.currentUser!!
|
||||
// .uid + "/" + path
|
||||
// + "/" + name)
|
||||
// )
|
||||
// val uploadTask: UploadTask = ref.putFile(filePath!!)
|
||||
// uploadTask.addOnProgressListener { taskSnapshot ->
|
||||
// val progress: Double =
|
||||
// (100.0 * taskSnapshot.bytesTransferred / taskSnapshot
|
||||
// .totalByteCount)
|
||||
// progressDialog.setMessage("Uploaded " + progress.toInt() + "%")
|
||||
// }.continueWithTask { task ->
|
||||
// if (!task.isSuccessful) {
|
||||
// throw (task.exception)!!
|
||||
// }
|
||||
//
|
||||
// // Continue with the task to get the download URL
|
||||
// ref.downloadUrl
|
||||
// }.addOnCompleteListener { task ->
|
||||
// if (task.isSuccessful) {
|
||||
// delegate.processFinish(task.result)
|
||||
// progressDialog.dismiss()
|
||||
// context?.displayToast("Uploaded Successfully")
|
||||
// println("onComplete: uploaded Successful uri: " + task.result)
|
||||
// } else {
|
||||
// delegate.processFinish(null)
|
||||
// progressDialog.dismiss()
|
||||
// context?.displayToast("Uploaded Successfully")
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
||||
@@ -11,13 +11,11 @@ import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.Environment
|
||||
import android.provider.MediaStore
|
||||
import android.view.View
|
||||
import android.widget.Button
|
||||
import android.widget.Toast
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.FileProvider
|
||||
import androidx.fragment.app.Fragment
|
||||
import h_mal.appttude.com.driver.MainActivity
|
||||
import h_mal.appttude.com.driver.R
|
||||
import java.io.File
|
||||
import java.util.*
|
||||
@@ -55,49 +53,45 @@ class ImageSelectorDialog : Dialog {
|
||||
)
|
||||
val permissionCam: Int =
|
||||
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 takePic: Button = findViewById(R.id.take_pic)
|
||||
upload.setOnClickListener(object : View.OnClickListener {
|
||||
override fun onClick(v: View) {
|
||||
if (permissionPic == PackageManager.PERMISSION_GRANTED) {
|
||||
chooseImage()
|
||||
} else {
|
||||
Toast.makeText(context, "Storage permissions required", Toast.LENGTH_SHORT)
|
||||
.show()
|
||||
ActivityCompat.requestPermissions(
|
||||
(fragment.getActivity())!!,
|
||||
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
|
||||
STORAGE_PERMISSION_CODE
|
||||
)
|
||||
}
|
||||
dismiss()
|
||||
upload.setOnClickListener {
|
||||
if (permissionPic == PackageManager.PERMISSION_GRANTED) {
|
||||
chooseImage()
|
||||
} else {
|
||||
Toast.makeText(context, "Storage permissions required", Toast.LENGTH_SHORT)
|
||||
.show()
|
||||
ActivityCompat.requestPermissions(
|
||||
(fragment!!.requireActivity()),
|
||||
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
|
||||
STORAGE_PERMISSION_CODE
|
||||
)
|
||||
}
|
||||
})
|
||||
takePic.setOnClickListener(object : View.OnClickListener {
|
||||
override fun onClick(v: View) {
|
||||
if (permissionCam == PackageManager.PERMISSION_GRANTED) {
|
||||
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
|
||||
val file: File = createFile()
|
||||
photoURI = Uri.fromFile(file)
|
||||
val imageUri: Uri = FileProvider.getUriForFile(
|
||||
context,
|
||||
"h_mal.appttude.com.driver",
|
||||
file
|
||||
)
|
||||
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
|
||||
fragment.startActivityForResult(cameraIntent, CAMERA_REQUEST)
|
||||
} else {
|
||||
Toast.makeText(context, "Camera Permissions required", Toast.LENGTH_SHORT)
|
||||
.show()
|
||||
ActivityCompat.requestPermissions(
|
||||
(fragment.getActivity())!!, arrayOf(Manifest.permission.CAMERA),
|
||||
MY_CAMERA_PERMISSION_CODE
|
||||
)
|
||||
}
|
||||
dismiss()
|
||||
dismiss()
|
||||
}
|
||||
takePic.setOnClickListener {
|
||||
if (permissionCam == PackageManager.PERMISSION_GRANTED) {
|
||||
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
|
||||
val file: File = createFile()
|
||||
photoURI = Uri.fromFile(file)
|
||||
val imageUri: Uri = FileProvider.getUriForFile(
|
||||
context,
|
||||
"h_mal.appttude.com.driver",
|
||||
file
|
||||
)
|
||||
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
|
||||
fragment!!.startActivityForResult(cameraIntent, CAMERA_REQUEST)
|
||||
} else {
|
||||
Toast.makeText(context, "Camera Permissions required", Toast.LENGTH_SHORT)
|
||||
.show()
|
||||
ActivityCompat.requestPermissions(
|
||||
(fragment!!.requireActivity()), arrayOf(Manifest.permission.CAMERA),
|
||||
MY_CAMERA_PERMISSION_CODE
|
||||
)
|
||||
}
|
||||
})
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
fun setImageName(saveFileName: String) {
|
||||
|
||||
@@ -8,26 +8,26 @@ import android.graphics.Bitmap
|
||||
import android.net.Uri
|
||||
import android.os.Environment
|
||||
import android.provider.MediaStore
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.Toast
|
||||
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.FileOutputStream
|
||||
import java.io.IOException
|
||||
|
||||
class ImageSelectorResults // public FilepathResponse delegate;
|
||||
{
|
||||
var activity: Activity? = null
|
||||
lateinit var activity: Activity
|
||||
|
||||
open interface FilepathResponse {
|
||||
interface FilepathResponse {
|
||||
fun processFinish(output: Uri?)
|
||||
}
|
||||
|
||||
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
|
||||
) {
|
||||
var filePath: Uri? = filePath
|
||||
@@ -35,11 +35,11 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
||||
if ((requestCode == ImageSelectorDialog.PICK_IMAGE_REQUEST) && (resultCode == Activity.RESULT_OK
|
||||
) && (data != null) && (data.data != null)
|
||||
) {
|
||||
filePath = data.data
|
||||
val uri = data.data
|
||||
var bitmap: Bitmap? = null
|
||||
try {
|
||||
bitmap =
|
||||
MediaStore.Images.Media.getBitmap(activity!!.contentResolver, filePath)
|
||||
MediaStore.Images.Media.getBitmap(activity.contentResolver, uri)
|
||||
if (imageView!!.visibility != View.VISIBLE) {
|
||||
imageView.visibility = View.VISIBLE
|
||||
}
|
||||
@@ -48,8 +48,7 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
||||
e.printStackTrace()
|
||||
} finally {
|
||||
if (bitmap != null) {
|
||||
delegate.processFinish(filePath)
|
||||
Log.i(javaClass.simpleName, "Results: " + filePath)
|
||||
delegate.processFinish(uri)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -67,9 +66,9 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
||||
try {
|
||||
val f: File =
|
||||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
|
||||
val fname: String = "driver" + MainActivity.dateStamp + ".jpg"
|
||||
val image: File = File(f, fname)
|
||||
val fileOutputStream: FileOutputStream = FileOutputStream(image)
|
||||
val fname: String = "driver" + getDateStamp() + ".jpg"
|
||||
val image = File(f, fname)
|
||||
val fileOutputStream = FileOutputStream(image)
|
||||
filePath = ImageSelectorDialog.photoURI
|
||||
val bitmap: Bitmap = MediaStore.Images.Media
|
||||
.getBitmap(
|
||||
@@ -86,12 +85,11 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
||||
}
|
||||
}
|
||||
delegate.processFinish(filePath)
|
||||
Log.i(javaClass.simpleName, "Results: " + filePath)
|
||||
}
|
||||
}
|
||||
|
||||
fun Results(
|
||||
activity: Activity?,
|
||||
activity: Activity,
|
||||
requestCode: Int,
|
||||
resultCode: Int,
|
||||
data: Intent?,
|
||||
@@ -107,20 +105,19 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
||||
var bitmap: Bitmap? = null
|
||||
try {
|
||||
bitmap =
|
||||
MediaStore.Images.Media.getBitmap(activity!!.contentResolver, filePath)
|
||||
MediaStore.Images.Media.getBitmap(activity.contentResolver, filePath)
|
||||
} catch (e: IOException) {
|
||||
e.printStackTrace()
|
||||
} finally {
|
||||
if (bitmap != null) {
|
||||
delegate.processFinish(filePath)
|
||||
Log.i(javaClass.simpleName, "Results: " + filePath)
|
||||
}
|
||||
}
|
||||
}
|
||||
if (requestCode == ImageSelectorDialog.CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
|
||||
//check if we have we have storage rights
|
||||
val permission: Int = ActivityCompat.checkSelfPermission(
|
||||
(activity)!!,
|
||||
(activity),
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE
|
||||
)
|
||||
if (permission != PackageManager.PERMISSION_GRANTED) {
|
||||
@@ -131,7 +128,7 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
||||
try {
|
||||
val f: File =
|
||||
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 fileOutputStream: FileOutputStream = FileOutputStream(image)
|
||||
filePath = ImageSelectorDialog.photoURI
|
||||
@@ -149,7 +146,6 @@ class ImageSelectorResults // public FilepathResponse delegate;
|
||||
}
|
||||
}
|
||||
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 contentUri: Uri = Uri.fromFile(f)
|
||||
mediaScanIntent.data = contentUri
|
||||
activity!!.sendBroadcast(mediaScanIntent)
|
||||
activity.sendBroadcast(mediaScanIntent)
|
||||
}
|
||||
}
|
||||
@@ -1,195 +1,159 @@
|
||||
package h_mal.appttude.com.driver.Global
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.content.ContextWrapper
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.animation.AlphaAnimation
|
||||
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 java.util.*
|
||||
|
||||
|
||||
class ImageSwiperClass constructor(private val context: Context?, wholeView: View?) {
|
||||
private val left: ImageView
|
||||
private var mainImage: ImageView? = null
|
||||
private val right: ImageView
|
||||
var imageStrings: MutableList<String?>? = null
|
||||
private set
|
||||
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
|
||||
}
|
||||
class ImageSwiperClass(
|
||||
private val context: Context?,
|
||||
wholeView: View
|
||||
) : ContextWrapper(context) {
|
||||
private var left: ImageView = wholeView.findViewById(R.id.left)
|
||||
private var right: ImageView = wholeView.findViewById(R.id.right)
|
||||
|
||||
fun reinstantiateList(imageStrings: MutableList<String?>?) {
|
||||
this.imageStrings = imageStrings
|
||||
adapter = SlidingImageViewAdapter()
|
||||
viewPager.adapter = adapter
|
||||
setArrows()
|
||||
}
|
||||
var list: List<Any>? = null
|
||||
|
||||
fun hideDelete() {
|
||||
delete.visibility = View.INVISIBLE
|
||||
Log.i(TAG, "hideDelete: hides deleete?")
|
||||
}
|
||||
|
||||
private val leftClick: View.OnClickListener = object : View.OnClickListener {
|
||||
override fun onClick(v: View) {
|
||||
viewPager.currentItem = viewPager.currentItem - 1
|
||||
setArrows()
|
||||
}
|
||||
}
|
||||
private val rightClick: View.OnClickListener = object : View.OnClickListener {
|
||||
override fun onClick(v: View) {
|
||||
viewPager.currentItem = viewPager.currentItem + 1
|
||||
setArrows()
|
||||
}
|
||||
}
|
||||
|
||||
private fun deleteDialog(position: Int) {
|
||||
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
||||
builder.setMessage("Are you sure you want to delete?")
|
||||
.setPositiveButton(android.R.string.ok, object : DialogInterface.OnClickListener {
|
||||
override fun onClick(dialog: DialogInterface, which: Int) {
|
||||
imageStrings!!.removeAt(position)
|
||||
viewPager.adapter = adapter
|
||||
// adapter.notifyDataSetChanged();
|
||||
}
|
||||
})
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
.show()
|
||||
}
|
||||
|
||||
private fun setArrows() {
|
||||
if (imageStrings != null && imageStrings!!.size > 0) {
|
||||
//left arrow
|
||||
if (viewPager.currentItem > 0) {
|
||||
setAnimation(left, true)
|
||||
} else {
|
||||
setAnimation(left, false)
|
||||
}
|
||||
|
||||
//right
|
||||
if (viewPager.currentItem == imageStrings!!.size - 1) {
|
||||
setAnimation(right, false)
|
||||
} else {
|
||||
setAnimation(right, true)
|
||||
}
|
||||
}
|
||||
if (imageStrings == null) {
|
||||
setAnimation(left, false)
|
||||
setAnimation(right, false)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setAnimation(view: ImageView, up: Boolean) {
|
||||
val start: Float
|
||||
val finish: Float
|
||||
if (up) {
|
||||
start = 0.2f
|
||||
finish = 1.0f
|
||||
} else {
|
||||
start = 1.0f
|
||||
finish = 0.2f
|
||||
}
|
||||
// if (view.getAlpha() != start){
|
||||
val animation1: AlphaAnimation = AlphaAnimation(start, finish)
|
||||
animation1.duration = 500
|
||||
animation1.fillAfter = true
|
||||
// view.startAnimation(animation1);
|
||||
view.alpha = finish
|
||||
// }
|
||||
}
|
||||
|
||||
internal inner class SlidingImageViewAdapter : PagerAdapter() {
|
||||
override fun getCount(): Int {
|
||||
if (imageStrings == null || imageStrings!!.size < 1) {
|
||||
delete.visibility = View.GONE
|
||||
return 0
|
||||
} else {
|
||||
delete.visibility = View.VISIBLE
|
||||
return imageStrings!!.size
|
||||
}
|
||||
}
|
||||
|
||||
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
|
||||
if (`object` != null) {
|
||||
container.removeView(`object` as View?)
|
||||
} else {
|
||||
container.removeViewAt(position)
|
||||
}
|
||||
}
|
||||
|
||||
override fun isViewFromObject(view: View, o: Any): Boolean {
|
||||
return (view == o)
|
||||
}
|
||||
|
||||
override fun instantiateItem(container: ViewGroup, position: Int): Any {
|
||||
val pagerPic: View =
|
||||
LayoutInflater.from(context).inflate(R.layout.insurance_item, container, false)
|
||||
setArrows()
|
||||
if (imageStrings != null && imageStrings!!.size > 0) {
|
||||
mainImage = pagerPic.rootView.findViewById(R.id.main_image)
|
||||
Picasso.get().load(imageStrings!!.get(position))
|
||||
.placeholder(R.drawable.choice_img)
|
||||
.into(MainActivity.loadImage(mainImage))
|
||||
}
|
||||
container.addView(pagerPic, 0)
|
||||
return pagerPic
|
||||
}
|
||||
|
||||
override fun notifyDataSetChanged() {
|
||||
super.notifyDataSetChanged()
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TAG: String = "ImageSwiperClass"
|
||||
}
|
||||
|
||||
init {
|
||||
left = wholeView!!.findViewById(R.id.left)
|
||||
right = wholeView.findViewById(R.id.right)
|
||||
left.setOnClickListener(leftClick)
|
||||
right.setOnClickListener(rightClick)
|
||||
viewPager = wholeView.findViewById(R.id.view_pager)
|
||||
delete = wholeView.findViewById(R.id.delete)
|
||||
viewPager.addOnPageChangeListener(object : OnPageChangeListener {
|
||||
override fun onPageScrolled(i: Int, v: Float, i1: Int) {
|
||||
val animation1: AlphaAnimation = AlphaAnimation(0.2f, 1.0f)
|
||||
animation1.duration = 200
|
||||
animation1.fillAfter = true
|
||||
delete.startAnimation(animation1)
|
||||
}
|
||||
|
||||
override fun onPageSelected(i: Int) {
|
||||
Log.i(TAG, "onPageSelected: position = " + i)
|
||||
setArrows()
|
||||
delete.setOnClickListener(object : View.OnClickListener {
|
||||
override fun onClick(v: View) {
|
||||
deleteDialog(i)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
override fun onPageScrollStateChanged(i: Int) {}
|
||||
})
|
||||
Log.i(TAG, "ImageSwiperClass: viewpager = " + viewPager.id)
|
||||
}
|
||||
// fun addLocalString(uris: List<Uri>) {
|
||||
// list = uris
|
||||
// }
|
||||
//
|
||||
// fun addFirebaseStrings(uris: List<String>) {
|
||||
// list = uris
|
||||
// }
|
||||
//
|
||||
// private var adapter: SlidingImageViewAdapter? = null
|
||||
// lateinit var viewPager: ViewPager
|
||||
//
|
||||
//
|
||||
// fun reinstantiateList(imageStrings: MutableList<String?>?) {
|
||||
// this.imageStrings = imageStrings
|
||||
// adapter = SlidingImageViewAdapter()
|
||||
// viewPager.adapter = adapter
|
||||
// setArrows()
|
||||
// }
|
||||
//
|
||||
// fun hideDelete() {
|
||||
// delete.hide()
|
||||
// }
|
||||
//
|
||||
// private val leftClick: View.OnClickListener = View.OnClickListener {
|
||||
// viewPager.currentItem = viewPager.currentItem - 1
|
||||
// setArrows()
|
||||
// }
|
||||
// private val rightClick: View.OnClickListener = View.OnClickListener {
|
||||
// viewPager.currentItem = viewPager.currentItem + 1
|
||||
// setArrows()
|
||||
// }
|
||||
//
|
||||
// private fun deleteDialog(position: Int) {
|
||||
// val builder: AlertDialog.Builder = AlertDialog.Builder(context)
|
||||
// builder.setMessage("Are you sure you want to delete?")
|
||||
// .setPositiveButton(
|
||||
// android.R.string.ok
|
||||
// ) { _, _ ->
|
||||
// imageStrings!!.removeAt(position)
|
||||
// viewPager.adapter = adapter
|
||||
// // adapter.notifyDataSetChanged();
|
||||
// }
|
||||
// .setNegativeButton(android.R.string.cancel, null)
|
||||
// .create()
|
||||
// .show()
|
||||
// }
|
||||
//
|
||||
// private fun setArrows() {
|
||||
// with(list) {
|
||||
// when (list) {
|
||||
// isNullOrEmpty() -> { }
|
||||
// isNotEmpty() -> { }
|
||||
//
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if (list?.isNotEmpty()) {
|
||||
// //left arrow
|
||||
// if (viewPager.currentItem > 0) {
|
||||
// setAnimation(left, true)
|
||||
// } else {
|
||||
// setAnimation(left, false)
|
||||
// }
|
||||
//
|
||||
// //right
|
||||
// if (viewPager.currentItem == imageStrings!!.size - 1) {
|
||||
// setAnimation(right, false)
|
||||
// } else {
|
||||
// setAnimation(right, true)
|
||||
// }
|
||||
// }
|
||||
// if (imageStrings == null) {
|
||||
// setAnimation(left, false)
|
||||
// setAnimation(right, false)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// private fun setAnimation(view: ImageView, up: Boolean) {
|
||||
// val start: Float
|
||||
// val finish: Float
|
||||
// if (up) {
|
||||
// start = 0.2f
|
||||
// finish = 1.0f
|
||||
// } else {
|
||||
// start = 1.0f
|
||||
// finish = 0.2f
|
||||
// }
|
||||
// val animation1 = AlphaAnimation(start, finish)
|
||||
// animation1.duration = 500
|
||||
// animation1.fillAfter = true
|
||||
// view.alpha = finish
|
||||
// }
|
||||
//
|
||||
// internal inner class SlidingImageViewAdapter : PagerAdapter() {
|
||||
//
|
||||
// override fun getCount(): Int = list?.size ?: 0
|
||||
//
|
||||
// override fun destroyItem(container: ViewGroup, position: Int, item: Any) {
|
||||
// container.removeView(item as View?)
|
||||
// }
|
||||
//
|
||||
// override fun isViewFromObject(view: View, o: Any): Boolean = view == o
|
||||
//
|
||||
// override fun instantiateItem(container: ViewGroup, position: Int): Any {
|
||||
// val pagerPic: View =
|
||||
// LayoutInflater.from(context).inflate(R.layout.insurance_item, container, false)
|
||||
// setArrows()
|
||||
// if (imageStrings != null && imageStrings!!.size > 0) {
|
||||
// mainImage = pagerPic.rootView.findViewById(R.id.main_image)
|
||||
// Picasso.get().load(imageStrings!!.get(position))
|
||||
// .placeholder(R.drawable.choice_img)
|
||||
// .into(MainActivity.loadImage(mainImage))
|
||||
// }
|
||||
// container.addView(pagerPic, 0)
|
||||
// return pagerPic
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//
|
||||
// init {
|
||||
// left.setOnClickListener(leftClick)
|
||||
// right.setOnClickListener(rightClick)
|
||||
// viewPager = wholeView.findViewById(R.id.view_pager)
|
||||
// delete = wholeView.findViewById(R.id.delete)
|
||||
// viewPager.addOnPageChangeListener(object : OnPageChangeListener {
|
||||
// override fun onPageScrolled(i: Int, v: Float, i1: Int) {
|
||||
// val animation1: AlphaAnimation = AlphaAnimation(0.2f, 1.0f)
|
||||
// animation1.duration = 200
|
||||
// animation1.fillAfter = true
|
||||
// delete.startAnimation(animation1)
|
||||
// }
|
||||
//
|
||||
// override fun onPageSelected(i: Int) {
|
||||
// setArrows()
|
||||
// delete.setOnClickListener { deleteDialog(i) }
|
||||
// }
|
||||
//
|
||||
// override fun onPageScrollStateChanged(i: Int) {}
|
||||
// })
|
||||
// }
|
||||
}
|
||||
@@ -13,8 +13,8 @@ import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.github.chrisbanes.photoview.PhotoView
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
import h_mal.appttude.com.driver.MainActivity
|
||||
import h_mal.appttude.com.driver.R
|
||||
import h_mal.appttude.com.driver.utils.DateUtils
|
||||
import java.io.File
|
||||
import java.io.FileNotFoundException
|
||||
import java.io.FileOutputStream
|
||||
@@ -24,11 +24,12 @@ import java.io.IOException
|
||||
class ImageViewClass {
|
||||
fun open(bitmap: Bitmap?) {
|
||||
Companion.bitmap = bitmap
|
||||
ExecuteFragment.executeFragment(ImageViewerFragment())
|
||||
// executeFragment(ImageViewerFragment())
|
||||
}
|
||||
|
||||
class ImageViewerFragment : Fragment() {
|
||||
private var view: View? = null
|
||||
private lateinit var viewer: View
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
}
|
||||
@@ -38,10 +39,10 @@ class ImageViewClass {
|
||||
savedInstanceState: Bundle?
|
||||
): View? {
|
||||
// Inflate the layout for this fragment
|
||||
view = inflater.inflate(R.layout.fragment_image_viewer, container, false)
|
||||
val fab: FloatingActionButton = view.findViewById(R.id.download_pic)
|
||||
viewer = inflater.inflate(R.layout.fragment_image_viewer, container, false)
|
||||
val fab: FloatingActionButton = viewer.findViewById(R.id.download_pic)
|
||||
if (bitmap != null) {
|
||||
val photoView: PhotoView = view.findViewById(R.id.photo_view)
|
||||
val photoView: PhotoView = viewer.findViewById(R.id.photo_view)
|
||||
photoView.setImageBitmap(bitmap)
|
||||
fab.setOnClickListener(object : View.OnClickListener {
|
||||
override fun onClick(v: View) {
|
||||
@@ -53,26 +54,26 @@ class ImageViewClass {
|
||||
}
|
||||
})
|
||||
}
|
||||
return view
|
||||
return viewer
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
(activity as AppCompatActivity?)!!.supportActionBar!!.hide()
|
||||
activity!!.window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
||||
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
(activity as AppCompatActivity?)!!.supportActionBar!!.show()
|
||||
activity!!.window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
||||
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
|
||||
}
|
||||
|
||||
@Throws(FileNotFoundException::class)
|
||||
private fun downloadPic() {
|
||||
val f: File =
|
||||
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
|
||||
val fname: String = "driver" + MainActivity.Companion.dateStamp + ".jpg"
|
||||
val fname: String = "driver" + DateUtils.getDateTimeStamp() + ".jpg"
|
||||
val image: File = File(f, fname)
|
||||
val fileOutputStream: FileOutputStream = FileOutputStream(image)
|
||||
bitmap!!.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream)
|
||||
@@ -82,7 +83,7 @@ class ImageViewClass {
|
||||
val mediaScanIntent: Intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
|
||||
val contentUri: Uri = Uri.fromFile(image)
|
||||
mediaScanIntent.data = contentUri
|
||||
activity!!.sendBroadcast(mediaScanIntent)
|
||||
requireActivity().sendBroadcast(mediaScanIntent)
|
||||
} catch (e: IOException) {
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
@@ -3,12 +3,7 @@ package h_mal.appttude.com.driver.Global
|
||||
import android.app.Activity
|
||||
import android.app.AlertDialog
|
||||
import android.content.DialogInterface
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import android.widget.Toast
|
||||
import com.google.android.gms.tasks.OnCompleteListener
|
||||
import com.google.android.gms.tasks.Task
|
||||
import h_mal.appttude.com.driver.MainActivity
|
||||
|
||||
|
||||
class SetApprovalDialog constructor(
|
||||
@@ -61,35 +56,33 @@ class SetApprovalDialog constructor(
|
||||
}
|
||||
|
||||
private fun publishStatuscode(status: Int, dialog: DialogInterface) {
|
||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
||||
if (!(approvalNameString == "")) {
|
||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
||||
(userId)!!
|
||||
).child(FirebaseClass.USER_APPROVALS).child(approvalNameString)
|
||||
.setValue(status).addOnCompleteListener(object : OnCompleteListener<Void?> {
|
||||
override fun onComplete(task: Task<Void?>) {
|
||||
if (task.isSuccessful) {
|
||||
Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT)
|
||||
.show()
|
||||
imageView.setImageResource(
|
||||
MainActivity.approvalsClass!!.setImageResource(
|
||||
status
|
||||
)
|
||||
)
|
||||
dialog.dismiss()
|
||||
} else {
|
||||
Toast.makeText(
|
||||
activity,
|
||||
"Status change unsuccessful",
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
MainActivity.viewController!!.progress(View.GONE)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
|
||||
// if (!(approvalNameString == "")) {
|
||||
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
|
||||
// (userId)!!
|
||||
// ).child(FirebaseClass.USER_APPROVALS).child(approvalNameString)
|
||||
// .setValue(status).addOnCompleteListener { task ->
|
||||
// if (task.isSuccessful) {
|
||||
// Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT)
|
||||
// .show()
|
||||
// imageView.setImageResource(
|
||||
// MainActivity.approvalsClass!!.setImageResource(
|
||||
// status
|
||||
// )
|
||||
// )
|
||||
// dialog.dismiss()
|
||||
// } else {
|
||||
// Toast.makeText(
|
||||
// activity,
|
||||
// "Status change unsuccessful",
|
||||
// Toast.LENGTH_SHORT
|
||||
// ).show()
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// } else {
|
||||
// Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show()
|
||||
// }
|
||||
}
|
||||
|
||||
private fun getElement(i: Int): String {
|
||||
|
||||
@@ -1,206 +1,106 @@
|
||||
package h_mal.appttude.com.driver
|
||||
|
||||
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.drawable.Drawable
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
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.drawerlayout.widget.DrawerLayout
|
||||
import androidx.fragment.app.FragmentManager
|
||||
import androidx.navigation.NavController
|
||||
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.firebase.auth.FirebaseAuth
|
||||
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.Target
|
||||
import h_mal.appttude.com.driver.Driver.DriverOverallFragment
|
||||
import h_mal.appttude.com.driver.Driver.VehicleOverallFragment
|
||||
import h_mal.appttude.com.driver.Driver.homeDriverFragment
|
||||
import h_mal.appttude.com.driver.Global.*
|
||||
import h_mal.appttude.com.driver.Global.ViewController.ViewControllerInterface
|
||||
import h_mal.appttude.com.driver.SuperUser.homeSuperUserFragment
|
||||
import h_mal.appttude.com.driver.Global.ApprovalsClass
|
||||
import h_mal.appttude.com.driver.Global.ArchiveClass
|
||||
import h_mal.appttude.com.driver.Global.ImageViewClass
|
||||
import h_mal.appttude.com.driver.base.BaseActivity
|
||||
import h_mal.appttude.com.driver.dialogs.ExitDialog.displayExitDialog
|
||||
import h_mal.appttude.com.driver.user.LoginActivity
|
||||
import h_mal.appttude.com.driver.user.profileFragment
|
||||
import java.text.ParseException
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
import h_mal.appttude.com.driver.utils.ActivityIntentBuilder.createIntent
|
||||
import h_mal.appttude.com.driver.utils.setPicassoImage
|
||||
import h_mal.appttude.com.driver.viewmodels.MainViewModel
|
||||
import kotlinx.android.synthetic.main.activity_main.*
|
||||
import kotlinx.android.synthetic.main.app_bar_main.*
|
||||
import kotlinx.android.synthetic.main.nav_header_main.view.*
|
||||
|
||||
|
||||
class MainActivity : AppCompatActivity(),
|
||||
NavigationView.OnNavigationItemSelectedListener, ViewControllerInterface {
|
||||
var navigationView: NavigationView? = null
|
||||
var progressBar: ProgressBar? = null
|
||||
var toolbar: Toolbar? = null
|
||||
class MainActivity : BaseActivity<MainViewModel>(),
|
||||
NavigationView.OnNavigationItemSelectedListener {
|
||||
|
||||
private val vm by createLazyViewModel<MainViewModel>()
|
||||
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?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_main)
|
||||
viewController = ViewController(this)
|
||||
|
||||
imageViewClass = ImageViewClass()
|
||||
approvalsClass = ApprovalsClass()
|
||||
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)
|
||||
val drawer: DrawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout
|
||||
val toggle: ActionBarDrawerToggle = ActionBarDrawerToggle(
|
||||
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close
|
||||
)
|
||||
drawer.addDrawerListener(toggle)
|
||||
toggle.syncState()
|
||||
navigationView = findViewById<View>(R.id.nav_view) as NavigationView?
|
||||
navigationView!!.setNavigationItemSelectedListener(this)
|
||||
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) {
|
||||
progressBar.setVisibility(View.GONE)
|
||||
}
|
||||
})
|
||||
setSupportActionBar(toolbar)
|
||||
navController = findNavController(R.id.container)
|
||||
|
||||
appBarConfiguration = AppBarConfiguration(navController.graph, drawer_layout)
|
||||
nav_view.setupWithNavController(navController)
|
||||
setupActionBarWithNavController(navController, appBarConfiguration)
|
||||
|
||||
getViewModel().getUserDetails()
|
||||
setupLogoutInDrawer()
|
||||
}
|
||||
|
||||
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 onSupportNavigateUp(): Boolean {
|
||||
return navController.navigateUp(appBarConfiguration) || super.onSupportNavigateUp()
|
||||
}
|
||||
|
||||
override fun setTitle(title: CharSequence) {
|
||||
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()
|
||||
}
|
||||
})
|
||||
toolbar.title = title
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
val drawer: DrawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout
|
||||
if (drawer.isDrawerOpen(GravityCompat.START)) {
|
||||
drawer.closeDrawer(GravityCompat.START)
|
||||
if (drawer_layout.isDrawerOpen(GravityCompat.START)) {
|
||||
drawer_layout.closeDrawer(GravityCompat.START)
|
||||
} else {
|
||||
if (fragmentManager!!.backStackEntryCount > 1) {
|
||||
if ((fragmentManager!!.fragments.get(0).javaClass
|
||||
.simpleName == "InsuranceFragment")
|
||||
) {
|
||||
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()
|
||||
} else {
|
||||
fragmentManager!!.popBackStack()
|
||||
}
|
||||
} else {
|
||||
AlertDialog.Builder(this)
|
||||
.setTitle("Leave?")
|
||||
.setMessage("Are you sure you want to exit?")
|
||||
.setNegativeButton(android.R.string.no, null)
|
||||
.setPositiveButton(
|
||||
android.R.string.yes,
|
||||
object : DialogInterface.OnClickListener {
|
||||
override fun onClick(arg0: DialogInterface, arg1: Int) {
|
||||
finish()
|
||||
System.exit(0)
|
||||
}
|
||||
}).create().show()
|
||||
val navHostFragment = supportFragmentManager.findFragmentById(R.id.container)
|
||||
navHostFragment?.childFragmentManager?.backStackEntryCount?.takeIf { it > 1 }?.let {
|
||||
return super.onBackPressed()
|
||||
}
|
||||
displayExitDialog()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onSuccess(data: Any?) {
|
||||
super.onSuccess(data)
|
||||
when(data){
|
||||
is FirebaseUser -> {
|
||||
setupDrawer(data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -208,8 +108,7 @@ class MainActivity : AppCompatActivity(),
|
||||
// Handle action bar item clicks here. The action bar will
|
||||
// automatically handle clicks on the Home/Up button, so long
|
||||
// as you specify a parent activity in AndroidManifest.xml.
|
||||
val id: Int = item.itemId
|
||||
if (id == R.id.action_settings) {
|
||||
if (item.itemId == R.id.action_settings) {
|
||||
return true
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
@@ -217,66 +116,29 @@ class MainActivity : AppCompatActivity(),
|
||||
|
||||
override fun onNavigationItemSelected(item: MenuItem): Boolean {
|
||||
// Handle navigation view item clicks here.
|
||||
val id: Int = item.itemId
|
||||
if (id == R.id.nav_camera) {
|
||||
// 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())
|
||||
when (item.itemId) {
|
||||
R.id.nav_user_settings -> { }
|
||||
}
|
||||
val drawer: DrawerLayout = findViewById<View>(R.id.drawer_layout) as DrawerLayout
|
||||
drawer.closeDrawer(GravityCompat.START)
|
||||
drawer_layout.closeDrawer(GravityCompat.START)
|
||||
return true
|
||||
}
|
||||
|
||||
override fun progressVisibility(vis: Int) {
|
||||
progressBar!!.visibility = vis
|
||||
}
|
||||
|
||||
override fun updateDrawer() {
|
||||
setupDrawer()
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TAG: String = MainActivity::class.java.simpleName
|
||||
var fragmentManager: FragmentManager? = null
|
||||
var auth: FirebaseAuth? = null
|
||||
var storage: FirebaseStorage? = null
|
||||
var storageReference: StorageReference? = null
|
||||
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
|
||||
|
||||
lateinit var imageViewClass: ImageViewClass
|
||||
lateinit var approvalsClass: ApprovalsClass
|
||||
lateinit var archiveClass: ArchiveClass
|
||||
private const val REQUEST_EXTERNAL_STORAGE: Int = 1
|
||||
private val PERMISSIONS_STORAGE: Array<String> = arrayOf(
|
||||
Manifest.permission.READ_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 {
|
||||
val target: Target = object : Target {
|
||||
override fun onBitmapLoaded(bitmap: Bitmap, from: LoadedFrom) {
|
||||
mainImage!!.setImageBitmap(bitmap)
|
||||
mainImage.setOnClickListener(View.OnClickListener { imageViewClass!!.open(bitmap) })
|
||||
mainImage.setOnClickListener{ imageViewClass.open(bitmap) }
|
||||
}
|
||||
|
||||
override fun onBitmapFailed(e: Exception, errorDrawable: Drawable) {}
|
||||
@@ -288,31 +150,5 @@ class MainActivity : AppCompatActivity(),
|
||||
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
|
||||
|
||||
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.*
|
||||
|
||||
class ArchiveObject {
|
||||
@@ -27,6 +31,6 @@ class ArchiveObject {
|
||||
this.insurance_details = insurance_details
|
||||
this.mot_details = mot_details
|
||||
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 {
|
||||
var photoStrings: MutableList<String?>? = null
|
||||
var insurerName: String? = null
|
||||
data class InsuranceObject (
|
||||
var photoStrings: MutableList<String?>? = null,
|
||||
var insurerName: 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 {
|
||||
var phCarImageString: String? = null
|
||||
var phCarNumber: String? = null
|
||||
class PrivateHireVehicleObject(
|
||||
var phCarImageString: String? = null,
|
||||
var phCarNumber: 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
|
||||
|
||||
import h_mal.appttude.com.driver.Objects.DriverProfileObject
|
||||
import h_mal.appttude.com.driver.Objects.DriversLicenseObject
|
||||
import h_mal.appttude.com.driver.Objects.PrivateHireObject
|
||||
import h_mal.appttude.com.driver.model.DriverProfileObject
|
||||
import h_mal.appttude.com.driver.model.DriversLicenseObject
|
||||
import h_mal.appttude.com.driver.model.PrivateHireObject
|
||||
|
||||
|
||||
class DriverProfile {
|
||||
|
||||
@@ -28,7 +28,7 @@ class MappedObject : Parcelable {
|
||||
}
|
||||
|
||||
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? {
|
||||
return MappedObject(`in`)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
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 {
|
||||
|
||||
@@ -3,7 +3,6 @@ package h_mal.appttude.com.driver.SuperUser
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.util.DisplayMetrics
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
@@ -11,22 +10,29 @@ import android.widget.ArrayAdapter
|
||||
import android.widget.ImageView
|
||||
import android.widget.TextView
|
||||
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.SetApprovalDialog
|
||||
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.WholeDriverObject
|
||||
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
|
||||
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>) :
|
||||
ArrayAdapter<MappedObject?>(activity, 0, objects) {
|
||||
private val TAG: String = "ApprovalListAdapter"
|
||||
class ApprovalListAdapter(
|
||||
val activity: Activity,
|
||||
objects: Array<MappedObject>
|
||||
): ArrayAdapter<MappedObject?>(activity, 0, objects) {
|
||||
|
||||
var mappedObject: MappedObject = objects[0]
|
||||
|
||||
var names: Array<String> = arrayOf(
|
||||
"Driver Profile",
|
||||
"Driver License",
|
||||
@@ -37,8 +43,8 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
|
||||
"Logbook",
|
||||
"P/H Vehicle"
|
||||
)
|
||||
var mappedObject: MappedObject
|
||||
var activity: Activity
|
||||
|
||||
|
||||
var approvalCode: Int = 0
|
||||
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
|
||||
var listItemView: View? = convertView
|
||||
@@ -56,51 +62,38 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
|
||||
approvalCode
|
||||
)
|
||||
)
|
||||
imageView.setOnClickListener(object : View.OnClickListener {
|
||||
override fun onClick(v: View) {
|
||||
SetApprovalDialog(
|
||||
approvalCode,
|
||||
activity,
|
||||
mappedObject.getUserId(),
|
||||
position,
|
||||
imageView
|
||||
)
|
||||
}
|
||||
})
|
||||
val archiveImage: ImageView = listItemView.findViewById(R.id.archive_icon)
|
||||
if (mappedObject.getWholeDriverObject().archive != null) {
|
||||
Log.i(
|
||||
TAG,
|
||||
"getView: archive = " + getArchive(
|
||||
position,
|
||||
mappedObject.getWholeDriverObject().getArchive()
|
||||
)
|
||||
imageView.setOnClickListener {
|
||||
SetApprovalDialog(
|
||||
approvalCode,
|
||||
activity,
|
||||
mappedObject.userId,
|
||||
position,
|
||||
imageView
|
||||
)
|
||||
}
|
||||
val archiveImage: ImageView = listItemView.findViewById(R.id.archive_icon)
|
||||
mappedObject.wholeDriverObject?.archive?.let {
|
||||
|
||||
|
||||
archiveImage.visibility = getArchive(
|
||||
position,
|
||||
mappedObject.getWholeDriverObject().getArchive()
|
||||
it
|
||||
)
|
||||
archiveImage.setOnClickListener(object : View.OnClickListener {
|
||||
override fun onClick(v: View) {
|
||||
var s: String? = null
|
||||
when (position) {
|
||||
1 -> s = FirebaseClass.DRIVERS_LICENSE_FIREBASE
|
||||
2 -> s = FirebaseClass.PRIVATE_HIRE_FIREBASE
|
||||
3 -> s = FirebaseClass.VEHICLE_DETAILS_FIREBASE
|
||||
4 -> s = FirebaseClass.INSURANCE_FIREBASE
|
||||
5 -> s = FirebaseClass.MOT_FIREBASE
|
||||
6 -> s = FirebaseClass.LOG_BOOK_FIREBASE
|
||||
7 -> s = FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE
|
||||
}
|
||||
ExecuteFragment.executeFragment(ArchiveFragment(), mappedObject.getUserId(), s)
|
||||
archiveImage.setOnClickListener {
|
||||
var s: String? = null
|
||||
when (position) {
|
||||
1 -> s = FirebaseClass.DRIVERS_LICENSE_FIREBASE
|
||||
2 -> s = FirebaseClass.PRIVATE_HIRE_FIREBASE
|
||||
3 -> s = FirebaseClass.VEHICLE_DETAILS_FIREBASE
|
||||
4 -> s = FirebaseClass.INSURANCE_FIREBASE
|
||||
5 -> s = FirebaseClass.MOT_FIREBASE
|
||||
6 -> s = FirebaseClass.LOG_BOOK_FIREBASE
|
||||
7 -> s = FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE
|
||||
}
|
||||
})
|
||||
}
|
||||
listItemView.setOnClickListener(object : View.OnClickListener {
|
||||
override fun onClick(v: View) {
|
||||
getFragment(position)
|
||||
// executeFragment(ArchiveFragment(), mappedObject.userId, s)
|
||||
}
|
||||
})
|
||||
}
|
||||
listItemView.setOnClickListener(View.OnClickListener { getFragment(position) })
|
||||
listItemView.minimumHeight = parent.height / 4
|
||||
listItemView.setPadding(
|
||||
convertDpToPixel(9f, context).toInt(),
|
||||
@@ -119,15 +112,14 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
|
||||
var o: Any? = null
|
||||
val visible: Int
|
||||
when (i) {
|
||||
0 -> {
|
||||
}
|
||||
0 -> { }
|
||||
1 -> o = archiveObject!!.driver_license
|
||||
2 -> o = archiveObject!!.private_hire
|
||||
3 -> o = archiveObject!!.vehicle_details
|
||||
4 -> o = archiveObject!!.insurance_details
|
||||
5 -> o = archiveObject!!.mot_details
|
||||
6 -> o = archiveObject!!.log_book
|
||||
7 -> o = archiveObject.private_hire_vehicle
|
||||
7 -> o = archiveObject!!.ph_car
|
||||
}
|
||||
if (o != null) {
|
||||
visible = View.VISIBLE
|
||||
@@ -138,101 +130,68 @@ class ApprovalListAdapter constructor(activity: Activity, objects: Array<MappedO
|
||||
}
|
||||
|
||||
private fun getFragment(i: Int) {
|
||||
var f: Fragment? = null
|
||||
val wholeDriverObject: WholeDriverObject? = mappedObject.getWholeDriverObject()
|
||||
var o: Any? = null
|
||||
when (i) {
|
||||
lateinit var f: Fragment
|
||||
val driverProfile by lazy { mappedObject.wholeDriverObject?.driver_profile }
|
||||
val vehicleProfile by lazy { mappedObject.wholeDriverObject?.vehicle_profile }
|
||||
val o: Any? = when (i) {
|
||||
0 -> {
|
||||
f = DriverProfileFragment()
|
||||
if (wholeDriverObject!!.driver_profile != null && wholeDriverObject.getDriver_profile().driver_profile != null) {
|
||||
o = wholeDriverObject.getDriver_profile().getDriver_profile()
|
||||
}
|
||||
driverProfile?.driver_profile
|
||||
}
|
||||
1 -> {
|
||||
f = DriverLicenseFragment()
|
||||
if (wholeDriverObject!!.driver_profile != null && wholeDriverObject.getDriver_profile().driver_license != null) {
|
||||
o = wholeDriverObject.getDriver_profile().driver_license
|
||||
}
|
||||
driverProfile?.driver_license
|
||||
}
|
||||
2 -> {
|
||||
f = PrivateHireLicenseFragment()
|
||||
if (wholeDriverObject!!.driver_profile != null && wholeDriverObject.getDriver_profile().private_hire != null) {
|
||||
o = wholeDriverObject.getDriver_profile().private_hire
|
||||
}
|
||||
driverProfile?.private_hire
|
||||
}
|
||||
3 -> {
|
||||
f = VehicleSetupFragment()
|
||||
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().vehicle_details != null) {
|
||||
o = wholeDriverObject.getVehicle_profile().getVehicle_details()
|
||||
}
|
||||
f = VehicleProfileFragment()
|
||||
vehicleProfile?.vehicle_details
|
||||
}
|
||||
4 -> {
|
||||
f = InsuranceFragment()
|
||||
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().insurance_details != null) {
|
||||
o = wholeDriverObject.getVehicle_profile().getInsurance_details()
|
||||
}
|
||||
vehicleProfile?.insurance_details
|
||||
}
|
||||
5 -> {
|
||||
f = MotFragment()
|
||||
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().mot_details != null) {
|
||||
o = wholeDriverObject.getVehicle_profile().getMot_details()
|
||||
}
|
||||
vehicleProfile?.insurance_details
|
||||
}
|
||||
6 -> {
|
||||
f = logbookFragment()
|
||||
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().log_book != null) {
|
||||
o = wholeDriverObject.getVehicle_profile().getLog_book()
|
||||
}
|
||||
f = LogbookFragment()
|
||||
vehicleProfile?.log_book
|
||||
}
|
||||
7 -> {
|
||||
f = PrivateHireVehicleFragment()
|
||||
if (wholeDriverObject!!.vehicle_profile != null && wholeDriverObject.getVehicle_profile().private_hire_vehicle != null) {
|
||||
o = wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject()
|
||||
}
|
||||
vehicleProfile?.privateHireVehicleObject
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
if (o == null) {
|
||||
ExecuteFragment.executeFragment(f, mappedObject.getUserId())
|
||||
// executeFragment(f, mappedObject.userId)
|
||||
} else {
|
||||
MainActivity.archiveClass!!.openDialogArchive(
|
||||
context, o, mappedObject.getUserId(), f
|
||||
MainActivity.archiveClass.openDialogArchive(
|
||||
context, o, mappedObject.userId, f
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun getApprovalStatusCode(i: Int): Int {
|
||||
var statusCode: Int = FirebaseClass.NO_DATE_PRESENT
|
||||
if (mappedObject.getWholeDriverObject().approvalsObject != null) {
|
||||
val approvalsObject: ApprovalsObject? =
|
||||
mappedObject.getWholeDriverObject().approvalsObject
|
||||
when (i) {
|
||||
0 -> if (approvalsObject!!.driver_details_approval != 0) {
|
||||
statusCode = approvalsObject.getDriver_details_approval()
|
||||
}
|
||||
1 -> if (approvalsObject!!.driver_license_approval != 0) {
|
||||
statusCode = approvalsObject.driver_license_approval
|
||||
}
|
||||
2 -> if (approvalsObject!!.private_hire_approval != 0) {
|
||||
statusCode = approvalsObject.private_hire_approval
|
||||
}
|
||||
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()
|
||||
}
|
||||
val statusCode = mappedObject.wholeDriverObject?.approvalsObject?.let{
|
||||
when (i) {
|
||||
0 -> it.driver_details_approval
|
||||
1 -> it.driver_license_approval
|
||||
2 -> it.private_hire_approval
|
||||
3 -> it.vehicle_details_approval
|
||||
4 -> it.insurance_details_approval
|
||||
5 -> it.mot_details_approval
|
||||
6 -> it.log_book_approval
|
||||
7 -> it.ph_car_approval
|
||||
else -> FirebaseClass.NO_DATE_PRESENT
|
||||
}
|
||||
}
|
||||
return statusCode
|
||||
return statusCode ?: FirebaseClass.NO_DATE_PRESENT
|
||||
}
|
||||
|
||||
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.content.Context
|
||||
import android.content.DialogInterface
|
||||
import android.view.View
|
||||
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 {
|
||||
@@ -27,24 +22,20 @@ class DriverStatusClass : View.OnClickListener {
|
||||
}
|
||||
alertDialog.setSingleChoiceItems(
|
||||
choices,
|
||||
selection,
|
||||
object : DialogInterface.OnClickListener {
|
||||
override fun onClick(dialog: DialogInterface, which: Int) {}
|
||||
})
|
||||
selection
|
||||
) { dialog, which -> }
|
||||
alertDialog.create().show()
|
||||
}
|
||||
|
||||
private fun SetStatus(status: Boolean) {
|
||||
MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
||||
.child((userId)!!).child(FirebaseClass.DRIVER_STATUS).setValue(status)
|
||||
.addOnCompleteListener(object : OnCompleteListener<Void?> {
|
||||
override fun onComplete(task: Task<Void?>) {
|
||||
if (task.isSuccessful) {
|
||||
cardView!!.setBackgroundColor(setStatusColour(status))
|
||||
} else {
|
||||
}
|
||||
}
|
||||
})
|
||||
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
||||
// .child((userId)!!).child(FirebaseClass.DRIVER_STATUS).setValue(status)
|
||||
// .addOnCompleteListener { task ->
|
||||
// if (task.isSuccessful) {
|
||||
// cardView!!.setBackgroundColor(setStatusColour(status))
|
||||
// } else {
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
private fun setStatusColour(b: Boolean): Int {
|
||||
@@ -63,9 +54,9 @@ class DriverStatusClass : View.OnClickListener {
|
||||
// approvalsObject.private_hire_approval,
|
||||
// approvalsObject.vehicle_details_approval,
|
||||
// approvalsObject.insurance_details_approval,
|
||||
// approvalsObject.getMot_details_approval(),
|
||||
// approvalsObject.getLog_book_approval(),
|
||||
// approvalsObject.getPh_car_approval()};
|
||||
// approvalsObject.mot_details_approval,
|
||||
// approvalsObject.log_book_approval,
|
||||
// approvalsObject.ph_car_approval};
|
||||
//
|
||||
//
|
||||
// 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() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater, container: ViewGroup?,
|
||||
@@ -23,14 +20,11 @@ class UserMainFragment : Fragment() {
|
||||
// Inflate the layout for this fragment
|
||||
val view: View = inflater.inflate(R.layout.fragment_user_main, container, false)
|
||||
Log.i("UserMain", "onCreateView: height = " + view.height)
|
||||
val mappedObject: MappedObject = arguments!!.getParcelable("mapped")
|
||||
activity.setTitle(
|
||||
mappedObject.getWholeDriverObject().getUser_details().getProfileName()
|
||||
)
|
||||
val mappedObject: MappedObject = requireArguments().getParcelable<MappedObject>("mapped")
|
||||
activity?.title = mappedObject.wholeDriverObject?.user_details?.profileName
|
||||
|
||||
// ListView listView = 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
|
||||
}
|
||||
}
|
||||
@@ -8,36 +8,31 @@ import android.util.Log
|
||||
import android.view.*
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
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.MainActivity
|
||||
import h_mal.appttude.com.driver.Objects.WholeDriverObject
|
||||
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
|
||||
import h_mal.appttude.com.driver.R
|
||||
import kotlinx.android.synthetic.main.fragment_home_super_user.*
|
||||
import java.util.*
|
||||
|
||||
|
||||
class homeSuperUserFragment : Fragment() {
|
||||
var users: DatabaseReference? = null
|
||||
var listViewSuperAdapter: ListViewSuperAdapter? = null
|
||||
var mappedObjectList: MutableList<MappedObject>? = null
|
||||
private var sharedPreferences: SharedPreferences? = null
|
||||
private var sortOrder: Int = 0
|
||||
private val sortDesc: Boolean = false
|
||||
private var recyclerView: RecyclerView? = null
|
||||
private var recyclerViewAdapter: RecyclerViewAdapter? = null
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setHasOptionsMenu(true)
|
||||
users = MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
|
||||
mappedObjectList = ArrayList()
|
||||
MainActivity.viewController!!.progress(View.VISIBLE)
|
||||
users!!.addValueEventListener(valueEventListener)
|
||||
sharedPreferences = activity!!.getSharedPreferences("PREFS", 0)
|
||||
sharedPreferences = requireActivity().getSharedPreferences("PREFS", 0)
|
||||
}
|
||||
|
||||
override fun onCreateView(
|
||||
@@ -47,14 +42,12 @@ class homeSuperUserFragment : Fragment() {
|
||||
// Inflate the layout for this fragment
|
||||
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)
|
||||
recyclerViewAdapter = RecyclerViewAdapter(context, mappedObjectList)
|
||||
adapter = recyclerViewAdapter
|
||||
}
|
||||
|
||||
// listViewSuperAdapter = new ListViewSuperAdapter(getContext(),mappedObjectList);
|
||||
// list.setAdapter(listViewSuperAdapter);
|
||||
recyclerView = view.findViewById(R.id.recycler_view)
|
||||
recyclerView.setLayoutManager(LinearLayoutManager(context))
|
||||
recyclerViewAdapter = RecyclerViewAdapter(context, mappedObjectList)
|
||||
recyclerView.setAdapter(recyclerViewAdapter)
|
||||
return view
|
||||
}
|
||||
|
||||
@@ -64,7 +57,6 @@ class homeSuperUserFragment : Fragment() {
|
||||
Log.i("Count ", "" + snapshot.childrenCount)
|
||||
for (postSnapshot: DataSnapshot in snapshot.children) {
|
||||
if ((postSnapshot.child("role").value.toString() == "driver")) {
|
||||
MainActivity.printObjectAsJson("object", postSnapshot.toString())
|
||||
mappedObjectList!!.add(
|
||||
MappedObject(
|
||||
postSnapshot.key, postSnapshot.getValue(
|
||||
@@ -75,11 +67,11 @@ class homeSuperUserFragment : Fragment() {
|
||||
}
|
||||
}
|
||||
sortDate(sortOrder, sortDesc)
|
||||
MainActivity.viewController!!.progress(View.GONE)
|
||||
|
||||
}
|
||||
|
||||
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")
|
||||
sortOrder = sharedPreferences!!.getInt(SORT, 0)
|
||||
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)
|
||||
builder.setTitle("Sort by:")
|
||||
.setSingleChoiceItems(
|
||||
grpname,
|
||||
checkedItem,
|
||||
object : DialogInterface.OnClickListener {
|
||||
override fun onClick(dialog: DialogInterface, item: Int) {
|
||||
when (item) {
|
||||
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()
|
||||
}
|
||||
})
|
||||
checkedItem
|
||||
) { _, pos -> compareInt = pos }
|
||||
.setPositiveButton("Ascending", click)
|
||||
.setNegativeButton("Descending", click)
|
||||
.create().show()
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
private fun sortDate(compareInt: Int, reversed: Boolean) {
|
||||
Log.i(TAG, "sortDate: " + compareInt + " - " + reversed)
|
||||
val comparator: Comparator<MappedObject> = object : Comparator<MappedObject> {
|
||||
override fun compare(o1: MappedObject, o2: MappedObject): Int {
|
||||
when (compareInt) {
|
||||
0 -> return o1.getWholeDriverObject().getUser_details().getProfileName()
|
||||
.compareTo(
|
||||
o2.getWholeDriverObject().getUser_details().getProfileName()
|
||||
)
|
||||
0 -> return o1.wholeDriverObject?.user_details?.profileName!!.compareTo(
|
||||
o2.wholeDriverObject?.user_details?.profileName!!
|
||||
)
|
||||
1 -> {
|
||||
var s1: String? = o1.getWholeDriverObject().getDriver_number()
|
||||
var s2: String? = o2.getWholeDriverObject().getDriver_number()
|
||||
if (o1.getWholeDriverObject().driver_number == null || (o1.getWholeDriverObject()
|
||||
.getDriver_number() == "0")
|
||||
var s1: String? = o1.wholeDriverObject?.driver_number
|
||||
var s2: String? = o2.wholeDriverObject?.driver_number
|
||||
if (o1.wholeDriverObject?.driver_number == null || (o1.wholeDriverObject!!
|
||||
.driver_number == "0")
|
||||
) {
|
||||
s1 = ";"
|
||||
}
|
||||
if (o2.getWholeDriverObject().driver_number == null || (o2.getWholeDriverObject()
|
||||
.getDriver_number() == "0")
|
||||
if (o2.wholeDriverObject?.driver_number == null || (o2.wholeDriverObject!!
|
||||
.driver_number == "0")
|
||||
) {
|
||||
s2 = ";"
|
||||
}
|
||||
return s1!!.compareTo((s2)!!)
|
||||
}
|
||||
2 -> return MainActivity.approvalsClass!!.getOverApprovalStatusCode(o1.wholeDriverObject) -
|
||||
MainActivity.approvalsClass!!.getOverApprovalStatusCode(o2.wholeDriverObject)
|
||||
else -> return MainActivity.approvalsClass!!.getOverApprovalStatusCode(
|
||||
2 -> return MainActivity.approvalsClass.getOverApprovalStatusCode(o1.wholeDriverObject) -
|
||||
MainActivity.approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject)
|
||||
else -> return MainActivity.approvalsClass.getOverApprovalStatusCode(
|
||||
o1.wholeDriverObject
|
||||
) -
|
||||
MainActivity.approvalsClass!!.getOverApprovalStatusCode(o2.wholeDriverObject)
|
||||
) - MainActivity.approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -170,12 +141,10 @@ class homeSuperUserFragment : Fragment() {
|
||||
Collections.sort(mappedObjectList, comparator)
|
||||
}
|
||||
recyclerViewAdapter!!.notifyDataSetChanged()
|
||||
// listViewSuperAdapter.notifyDataSetChanged();
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val SORT: String = "SORT"
|
||||
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