Merge pull request #1 from hmalik144/kotlin

Migration to kotlin
This commit is contained in:
2021-07-09 23:38:18 +01:00
committed by GitHub
223 changed files with 7552 additions and 7985 deletions

2
.gitignore vendored
View File

@@ -3,8 +3,10 @@
/local.properties
/.idea/caches/build_file_checksums.ser
/.idea/libraries
/.idea/dictionaries
/.idea/modules.xml
/.idea/workspace.xml
/.idea/navEditor.xml
.DS_Store
/build
/captures

View File

@@ -1,29 +1,138 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<Objective-C-extensions>
<file>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Import" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Macro" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Typedef" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Enum" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Constant" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Global" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Struct" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="FunctionPredecl" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Function" />
</file>
<class>
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Property" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="Synthesize" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InitMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="StaticMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="InstanceMethod" />
<option name="com.jetbrains.cidr.lang.util.OCDeclarationKind" value="DeallocMethod" />
</class>
<extensions>
<pair source="cpp" header="h" fileNamingConvention="NONE" />
<pair source="c" header="h" fileNamingConvention="NONE" />
</extensions>
</Objective-C-extensions>
<JetCodeStyleSettings>
<option name="PACKAGES_TO_USE_STAR_IMPORTS">
<value>
<package name="java.util" alias="false" withSubpackages="false" />
<package name="kotlinx.android.synthetic" alias="false" withSubpackages="true" />
<package name="io.ktor" alias="false" withSubpackages="true" />
</value>
</option>
<option name="PACKAGES_IMPORT_LAYOUT">
<value>
<package name="" alias="false" withSubpackages="true" />
<package name="java" alias="false" withSubpackages="true" />
<package name="javax" alias="false" withSubpackages="true" />
<package name="kotlin" alias="false" withSubpackages="true" />
<package name="" alias="true" withSubpackages="true" />
</value>
</option>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<codeStyleSettings language="XML">
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</codeStyleSettings>
</code_scheme>
</component>

5
.idea/codeStyles/codeStyleConfig.xml generated Normal file
View File

@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

2
.idea/gradle.xml generated
View File

@@ -1,8 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleMigrationSettings" migrationVersion="1" />
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="PLATFORM" />
<option name="distributionType" value="DEFAULT_WRAPPED" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">

50
.idea/jarRepositories.xml generated Normal file
View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
<remote-repository>
<option name="id" value="BintrayJCenter" />
<option name="name" value="BintrayJCenter" />
<option name="url" value="https://jcenter.bintray.com/" />
</remote-repository>
<remote-repository>
<option name="id" value="maven" />
<option name="name" value="maven" />
<option name="url" value="https://jitpack.io" />
</remote-repository>
<remote-repository>
<option name="id" value="Google" />
<option name="name" value="Google" />
<option name="url" value="https://dl.google.com/dl/android/maven2/" />
</remote-repository>
<remote-repository>
<option name="id" value="MavenRepo" />
<option name="name" value="MavenRepo" />
<option name="url" value="https://repo.maven.apache.org/maven2/" />
</remote-repository>
<remote-repository>
<option name="id" value="C:\Users\h_mal\AppData\Local\Android\Sdk\extras\android\m2repository" />
<option name="name" value="C:\Users\h_mal\AppData\Local\Android\Sdk\extras\android\m2repository" />
<option name="url" value="file:/$USER_HOME$/AppData/Local/Android/Sdk/extras/android/m2repository/" />
</remote-repository>
<remote-repository>
<option name="id" value="C:\Users\h_mal\AppData\Local\Android\Sdk\extras\google\m2repository" />
<option name="name" value="C:\Users\h_mal\AppData\Local\Android\Sdk\extras\google\m2repository" />
<option name="url" value="file:/$USER_HOME$/AppData/Local/Android/Sdk/extras/google/m2repository/" />
</remote-repository>
<remote-repository>
<option name="id" value="C:\Users\h_mal\AppData\Local\Android\Sdk\extras\m2repository" />
<option name="name" value="C:\Users\h_mal\AppData\Local\Android\Sdk\extras\m2repository" />
<option name="url" value="file:/$USER_HOME$/AppData/Local/Android/Sdk/extras/m2repository/" />
</remote-repository>
</component>
</project>

16
.idea/misc.xml generated
View File

@@ -5,7 +5,7 @@
<option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
<option name="myNullables">
<value>
<list size="7">
<list size="12">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="2" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
@@ -13,23 +13,33 @@
<item index="4" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
<item index="5" class="java.lang.String" itemvalue="androidx.annotation.Nullable" />
<item index="6" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNullable" />
<item index="7" class="java.lang.String" itemvalue="android.annotation.Nullable" />
<item index="8" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.Nullable" />
<item index="9" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableDecl" />
<item index="10" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableType" />
<item index="11" class="java.lang.String" itemvalue="com.android.annotations.Nullable" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="6">
<list size="11">
<item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
<item index="4" class="java.lang.String" itemvalue="androidx.annotation.NonNull" />
<item index="5" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNonNull" />
<item index="6" class="java.lang.String" itemvalue="android.annotation.NonNull" />
<item index="7" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.NonNull" />
<item index="8" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullDecl" />
<item index="9" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullType" />
<item index="10" class="java.lang.String" itemvalue="com.android.annotations.NonNull" />
</list>
</value>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">

2
app/.gitignore vendored
View File

@@ -1 +1,3 @@
/build
/release
google-services.json

View File

@@ -1,5 +1,17 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'com.google.gms.google-services'
// kotlin kapt
apply plugin: 'kotlin-kapt'
// Android navigation
apply plugin: 'androidx.navigation.safeargs'
repositories {
mavenCentral()
}
android {
compileSdkVersion 28
@@ -7,9 +19,9 @@ android {
applicationId "h_mal.appttude.com.driver"
minSdkVersion 24
targetSdkVersion 28
versionCode 5
versionName "1.5"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
versionCode 6
versionName "1.6"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
buildTypes {
release {
@@ -17,30 +29,64 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.android.support:support-v4:28.0.0'
implementation 'com.android.support:exifinterface:28.0.0'
implementation 'com.google.android.gms:play-services-auth:15.0.1'
implementation 'com.google.firebase:firebase-core:16.0.1'
implementation 'com.google.firebase:firebase-auth:16.0.1'
implementation 'com.google.firebase:firebase-storage:16.0.1'
implementation 'com.google.firebase:firebase-database:16.0.1'
implementation 'com.github.chrisbanes:PhotoView:2.1.0'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation 'com.google.code.gson:gson:2.3.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation 'com.android.support.test:rules:1.0.2'
}
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"
apply plugin: 'com.google.gms.google-services'
repositories {
mavenCentral()
implementation "androidx.legacy:legacy-support-v4:1.0.0"
// Google play services
implementation "com.google.android.gms:play-services-auth:15.0.1"
// Google firebase
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"
/* 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 'com.synnapps:carouselview:0.1.5'
}

View File

@@ -3,14 +3,11 @@ package h_mal.appttude.com.driver;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import android.view.View;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
/**
* Instrumented test, which will execute on an Android device.

View File

@@ -0,0 +1,54 @@
package h_mal.appttude.com.driver;
import android.view.View;
import androidx.test.rule.ActivityTestRule;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import h_mal.appttude.com.driver.ui.driver.HomeFragment;
import h_mal.appttude.com.driver.ui.driver.MainActivity;
import static org.junit.Assert.assertNotNull;
public class MainActivityTest {
@Rule
public ActivityTestRule<MainActivity> activityActivityTestRule = new ActivityTestRule<MainActivity>(MainActivity.class);
private MainActivity mainActivity = null;
private HomeFragment hdf;
@Before
public void setUp() throws Exception {
mainActivity = activityActivityTestRule.getActivity();
hdf = new HomeFragment();
mainActivity.getSupportFragmentManager().beginTransaction().replace(R.id.container, hdf).commit();
}
@Test
public void testViews(){
View view = hdf.getView().findViewById(R.id.driver);
assertNotNull(view);
// Bundle bundle = new Bundle();
// bundle.putInt("selectedListItem", 0);
// FragmentFactory factory = new FragmentFactory();
// homeDriverFragment hdf = new homeDriverFragment();
//
// launchInContainer(hdf.getClass(), bundle, factory);
// Espresso.onView(ViewMatchers.withId(2131231038)).check(ViewAssertions.matches(ViewMatchers.withText("Hello World!")));
}
@After
public void TearDown() throws Exception{
mainActivity = null;
}
}

View File

@@ -0,0 +1,8 @@
package h_mal.appttude.com.driver.base
import org.junit.Assert.*
class BaseActivityTest{
}

View File

@@ -0,0 +1,199 @@
package h_mal.appttude.com.driver.user;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import androidx.test.espresso.ViewInteraction;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.rule.ActivityTestRule;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import h_mal.appttude.com.driver.R;
import h_mal.appttude.com.driver.ui.user.LoginActivity;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.*;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.*;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.is;
@LargeTest
@RunWith(AndroidJUnit4.class)
public class EspressoTestTwo {
@Rule
public ActivityTestRule<LoginActivity> mActivityTestRule = new ActivityTestRule<>(LoginActivity.class);
@Test
public void espressoTestTwo() {
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ViewInteraction appCompatEditText = onView(
allOf(withId(R.id.email),
childAtPosition(
childAtPosition(
withId(R.id.fields_holder),
0),
0),
isDisplayed()));
appCompatEditText.perform(replaceText("h.malik144.au@gmail.com"), closeSoftKeyboard());
ViewInteraction appCompatEditText2 = onView(
allOf(withId(R.id.password),
childAtPosition(
childAtPosition(
withId(R.id.fields_holder),
1),
0),
isDisplayed()));
appCompatEditText2.perform(replaceText("crack167"), closeSoftKeyboard());
ViewInteraction appCompatEditText3 = onView(
allOf(withId(R.id.password), withText("crack167"),
childAtPosition(
childAtPosition(
withId(R.id.fields_holder),
1),
0),
isDisplayed()));
appCompatEditText3.perform(pressImeActionButton());
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ViewInteraction button = onView(
allOf(withId(R.id.driver),
childAtPosition(
childAtPosition(
withId(R.id.container),
0),
0),
isDisplayed()));
button.check(matches(isDisplayed()));
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ViewInteraction appCompatImageButton = onView(
allOf(withContentDescription("Open navigation drawer"),
childAtPosition(
allOf(withId(R.id.toolbar),
childAtPosition(
withClassName(is("android.support.design.widget.AppBarLayout")),
0)),
1),
isDisplayed()));
appCompatImageButton.perform(click());
ViewInteraction cardView = onView(
allOf(withId(R.id.car),
childAtPosition(
childAtPosition(
withId(R.id.container),
1),
1),
isDisplayed()));
cardView.perform(click());
ViewInteraction cardView2 = onView(
allOf(withId(R.id.vehicle_prof),
childAtPosition(
childAtPosition(
withId(R.id.container),
1),
0),
isDisplayed()));
cardView2.perform(click());
pressBack();
ViewInteraction appCompatButton = onView(
allOf(withId(R.id.driver), withText("Driver Profile"),
childAtPosition(
childAtPosition(
withId(R.id.container),
1),
0),
isDisplayed()));
appCompatButton.perform(click());
ViewInteraction cardView3 = onView(
allOf(withId(R.id.driver_prof),
childAtPosition(
childAtPosition(
withId(R.id.container),
1),
0),
isDisplayed()));
cardView3.perform(click());
pressBack();
ViewInteraction cardView4 = onView(
allOf(withId(R.id.private_hire),
childAtPosition(
childAtPosition(
withId(R.id.container),
1),
1),
isDisplayed()));
cardView4.perform(click());
ViewInteraction appCompatButton2 = onView(
allOf(withId(android.R.id.button1), withText("View/Edit"),
childAtPosition(
childAtPosition(
withClassName(is("android.widget.ScrollView")),
0),
3)));
appCompatButton2.perform(scrollTo(), click());
}
private static Matcher<View> childAtPosition(
final Matcher<View> parentMatcher, final int position) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("Child at position " + position + " in parent ");
parentMatcher.describeTo(description);
}
@Override
public boolean matchesSafely(View view) {
ViewParent parent = view.getParent();
return parent instanceof ViewGroup && parentMatcher.matches(parent)
&& view.equals(((ViewGroup) parent).getChildAt(position));
}
};
}
}

View File

@@ -0,0 +1,147 @@
package h_mal.appttude.com.driver.user;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
import androidx.test.espresso.ViewInteraction;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.rule.ActivityTestRule;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import h_mal.appttude.com.driver.R;
import h_mal.appttude.com.driver.ui.user.LoginActivity;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.*;
import static androidx.test.espresso.matcher.ViewMatchers.*;
import static org.hamcrest.Matchers.allOf;
import static org.hamcrest.Matchers.is;
@LargeTest
@RunWith(AndroidJUnit4.class)
public class LoginActivityTest {
@Rule
public ActivityTestRule<LoginActivity> mActivityTestRule = new ActivityTestRule<>(LoginActivity.class);
@Test
public void loginActivityTest() {
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ViewInteraction appCompatEditText = onView(
allOf(withId(R.id.email),
childAtPosition(
childAtPosition(
withId(R.id.fields_holder),
0),
0),
isDisplayed()));
appCompatEditText.perform(replaceText("h.malik144.au@gmail.com"), closeSoftKeyboard());
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ViewInteraction appCompatEditText2 = onView(
allOf(withId(R.id.password),
childAtPosition(
childAtPosition(
withId(R.id.fields_holder),
1),
0),
isDisplayed()));
appCompatEditText2.perform(replaceText("crack167"), closeSoftKeyboard());
// ViewInteraction appCompatButton = onView(
// allOf(withId(R.id.email_sign_in_button), withText("Sign in"),
// childAtPosition(
// allOf(withId(R.id.email_login_form),
// childAtPosition(
// withClassName(is("android.widget.RelativeLayout")),
// 0)),
// 1),
// isDisplayed()));
// appCompatButton.perform(click());
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// ViewInteraction textView = onView(
// allOf(withText("Choice Minicabs"),
// childAtPosition(
// allOf(withId(R.id.toolbar),
// childAtPosition(
// IsInstanceOf.<View>instanceOf(android.widget.LinearLayout.class),
// 0)),
// 1),
// isDisplayed()));
// textView.check(matches(isDisplayed()));
// Added a sleep statement to match the app's execution delay.
// The recommended way to handle such scenarios is to use Espresso idling resources:
// https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/index.html
try {
Thread.sleep(7000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ViewInteraction appCompatButton2 = onView(
allOf(withId(R.id.driver), withText("Driver Profile"),
childAtPosition(
childAtPosition(
withId(R.id.container),
1),
0),
isDisplayed()));
appCompatButton2.perform(click());
}
private static Matcher<View> childAtPosition(
final Matcher<View> parentMatcher, final int position) {
return new TypeSafeMatcher<View>() {
@Override
public void describeTo(Description description) {
description.appendText("Child at position " + position + " in parent ");
parentMatcher.describeTo(description);
}
@Override
public boolean matchesSafely(View view) {
ViewParent parent = view.getParent();
return parent instanceof ViewGroup && parentMatcher.matches(parent)
&& view.equals(((ViewGroup) parent).getChildAt(position));
}
};
}
}

View File

@@ -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,35 +11,33 @@
<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:name=".ui.user.LoginActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Design.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:name=".ui.driver.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="android.support.v4.content.FileProvider"
android:name="androidx.core.content.FileProvider"
android:authorities="h_mal.appttude.com.driver"
android:exported="false"
android:grantUriPermissions="true">
@@ -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>

View File

@@ -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) {}
}
}

View File

@@ -1,293 +0,0 @@
package h_mal.appttude.com.driver.Archive;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import h_mal.appttude.com.driver.Global.ImageSwiperClass;
import h_mal.appttude.com.driver.Objects.ArchiveObject;
import h_mal.appttude.com.driver.Objects.DriverProfileObject;
import h_mal.appttude.com.driver.Objects.DriversLicenseObject;
import h_mal.appttude.com.driver.Objects.InsuranceObject;
import h_mal.appttude.com.driver.Objects.LogbookObject;
import h_mal.appttude.com.driver.Objects.MotObject;
import h_mal.appttude.com.driver.Objects.PrivateHireObject;
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject;
import h_mal.appttude.com.driver.Objects.VehicleProfileObject;
import h_mal.appttude.com.driver.Objects.WholeObject.VehicleProfile;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.FirebaseClass.*;
import static h_mal.appttude.com.driver.MainActivity.loadImage;
import static h_mal.appttude.com.driver.MainActivity.printObjectAsJson;
import static h_mal.appttude.com.driver.MainActivity.setAsDateTime;
public class ArchiveObjectListAdapter extends BaseAdapter {
private static String TAG = "ArchiveObjectListAdapte";
ArchiveObject archiveObject;
Context context;
String archiveString;
int size;
String[] mKeys;
private TextView dateArchivedText;
public ArchiveObjectListAdapter(ArchiveObject archiveObject, Context context, String archiveString) {
this.archiveObject = archiveObject;
this.context = context;
this.archiveString = archiveString;
switch (archiveString){
case PRIVATE_HIRE_FIREBASE:
size = archiveObject.getPrivate_hire().size();
mKeys = archiveObject.getPrivate_hire().keySet().toArray(new String[archiveObject.getPrivate_hire().size()]);
break;
case DRIVERS_LICENSE_FIREBASE:
size = archiveObject.getDriver_license().size();
mKeys = archiveObject.getDriver_license().keySet().toArray(new String[archiveObject.getDriver_license().size()]);
break;
case VEHICLE_DETAILS_FIREBASE:
size = archiveObject.getVehicle_details().size();
mKeys = archiveObject.getVehicle_details().keySet().toArray(new String[archiveObject.getVehicle_details().size()]);
break;
case MOT_FIREBASE:
size = archiveObject.getMot_details().size();
mKeys = archiveObject.getMot_details().keySet().toArray(new String[archiveObject.getMot_details().size()]);
break;
case INSURANCE_FIREBASE:
size = archiveObject.getInsurance_details().size();
mKeys = archiveObject.getInsurance_details().keySet().toArray(new String[archiveObject.getInsurance_details().size()]);
break;
case LOG_BOOK_FIREBASE:
size = archiveObject.getLog_book().size();
mKeys = archiveObject.getLog_book().keySet().toArray(new String[archiveObject.getLog_book().size()]);
break;
case PRIVATE_HIRE_VEHICLE_LICENSE:
size = archiveObject.getPh_car().size();
mKeys = archiveObject.getPh_car().keySet().toArray(new String[archiveObject.getPh_car().size()]);
break;
}
}
@Override
public int getCount() {
return size;
}
@Override
public Object getItem(int position) {
switch (archiveString){
case PRIVATE_HIRE_FIREBASE:
return archiveObject.getPrivate_hire().get(mKeys[position]);
case DRIVERS_LICENSE_FIREBASE:
return archiveObject.getDriver_license().get(mKeys[position]);
case VEHICLE_DETAILS_FIREBASE:
return archiveObject.getVehicle_details().get(mKeys[position]);
case MOT_FIREBASE:
return archiveObject.getMot_details().get(mKeys[position]);
case INSURANCE_FIREBASE:
return archiveObject.getInsurance_details().get(mKeys[position]);
case LOG_BOOK_FIREBASE:
return archiveObject.getLog_book().get(mKeys[position]);
case PRIVATE_HIRE_VEHICLE_LICENSE:
return archiveObject.getPh_car().get(mKeys[position]);
default:
return mKeys[position];
}
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View listItemView = convertView;
if (listItemView == null) {
if (archiveString.equals(PRIVATE_HIRE_FIREBASE) ||
archiveString.equals(DRIVERS_LICENSE_FIREBASE) ||
archiveString.equals(MOT_FIREBASE) ||
archiveString.equals(LOG_BOOK_FIREBASE) ||
archiveString.equals(PRIVATE_HIRE_VEHICLE_LICENSE)){
listItemView = LayoutInflater.from(context).inflate(
R.layout.archive_license_item, parent, false);
ImageView imageView = listItemView.findViewById(R.id.image_archive);
ProgressBar progressBar = listItemView.findViewById(R.id.prog_archive);
dateArchivedText = listItemView.findViewById(R.id.date_archived);
LinearLayout expiryHolder = listItemView.findViewById(R.id.expiry_view);
LinearLayout fieldTwo = listItemView.findViewById(R.id.field_two_view);
TextView expiryText = listItemView.findViewById(R.id.exp_text);
TextView fiewTwoLable = listItemView.findViewById(R.id.field_two);
TextView fieldTwoText = listItemView.findViewById(R.id.field_two_text);
switch (archiveString){
case PRIVATE_HIRE_FIREBASE:
expiryHolder.setVisibility(View.VISIBLE);
fieldTwo.setVisibility(View.VISIBLE);
PrivateHireObject privateHireObject = (PrivateHireObject) getItem(position);
Picasso.get().load(privateHireObject.getPhImageString())
.into(loadImage(progressBar,imageView));
dateString(position);
expiryText.setText(privateHireObject.getPhExpiry());
fiewTwoLable.setText("Private Hire License No.:");
fieldTwoText.setText(privateHireObject.getPhNumber());
break;
case DRIVERS_LICENSE_FIREBASE:
expiryHolder.setVisibility(View.VISIBLE);
fieldTwo.setVisibility(View.VISIBLE);
DriversLicenseObject driversLicenseObject = (DriversLicenseObject) getItem(position);
Picasso.get().load(driversLicenseObject.getLicenseImageString())
.into(loadImage(progressBar,imageView));
dateString(position);
expiryText.setText(driversLicenseObject.getLicenseExpiry());
fiewTwoLable.setText("License No.:");
fieldTwoText.setText(driversLicenseObject.getLicenseNumber());
break;
case MOT_FIREBASE:
Log.i(TAG, "getView: MOT OBJECT");
expiryHolder.setVisibility(View.VISIBLE);
fieldTwo.setVisibility(View.GONE);
MotObject motObject = (MotObject) getItem(position);
Picasso.get().load(motObject.getMotImageString())
.into(loadImage(progressBar,imageView));
dateString(position);
expiryText.setText(motObject.getMotExpiry());
break;
case LOG_BOOK_FIREBASE:
expiryHolder.setVisibility(View.GONE);
fieldTwo.setVisibility(View.VISIBLE);
LogbookObject logbookObject = (LogbookObject) getItem(position);
Picasso.get().load(logbookObject.getPhotoString())
.into(loadImage(progressBar,imageView));
dateString(position);
fiewTwoLable.setText("V5C No.:");
fieldTwoText.setText(logbookObject.getV5cnumber());
break;
case PRIVATE_HIRE_VEHICLE_LICENSE:
expiryHolder.setVisibility(View.VISIBLE);
fieldTwo.setVisibility(View.VISIBLE);
PrivateHireVehicleObject privateHireVehicleObject = (PrivateHireVehicleObject) getItem(position);
Picasso.get().load(privateHireVehicleObject.getPhCarImageString())
.into(loadImage(progressBar,imageView));
dateString(position);
expiryText.setText(privateHireVehicleObject.getPhCarExpiry());
fiewTwoLable.setText("Private Hire Vehicle License No.:");
fieldTwoText.setText(privateHireVehicleObject.getPhCarNumber());
break;
}
}else if (archiveString.equals(INSURANCE_FIREBASE)){
listItemView = LayoutInflater.from(context).inflate(
R.layout.archive_insurance_item, parent, false);
View holder = listItemView.findViewById(R.id.image_pager);
ImageSwiperClass swiperClass = new ImageSwiperClass(context,holder);
// swiperClass.hideDelete();
listItemView.findViewById(R.id.delete).setVisibility(View.GONE);
// holder.findViewById(R.id.delete).setVisibility(View.INVISIBLE);
dateArchivedText = listItemView.findViewById(R.id.date_archived);
dateString(position);
TextView expiryText = listItemView.findViewById(R.id.exp_text);
TextView fieldTwoText = listItemView.findViewById(R.id.archive_insurer);
InsuranceObject insuranceObject = (InsuranceObject) getItem(position);
swiperClass.reinstantiateList(insuranceObject.getPhotoStrings());
expiryText.setText(insuranceObject.getExpiryDate());
fieldTwoText.setText(insuranceObject.getInsurerName());
}else if(archiveString.equals(VEHICLE_DETAILS_FIREBASE)){
listItemView = LayoutInflater.from(context).inflate(
R.layout.archive_vehicle_item, parent, false);
dateArchivedText = listItemView.findViewById(R.id.date_archived);
dateString(position);
TextView numberPlate = listItemView.findViewById(R.id.number_plate);
TextView keeperName = listItemView.findViewById(R.id.keeper_name);
TextView keeperAddress = listItemView.findViewById(R.id.keeper_address);
TextView carText = listItemView.findViewById(R.id.car_text_arch);
TextView carColour = listItemView.findViewById(R.id.car_colour);
TextView carSeized = listItemView.findViewById(R.id.seized);
TextView startDate = listItemView.findViewById(R.id.first_date);
VehicleProfileObject vehicleProfileObject = (VehicleProfileObject) getItem(position);
numberPlate.setText(vehicleProfileObject.getReg());
keeperName.setText(vehicleProfileObject.getKeeperName());
keeperAddress.setText(vehicleProfileObject.getKeeperAddress() + "\n" +vehicleProfileObject.getKeeperPostCode());
carText.setText(vehicleProfileObject.getMake() + " " + vehicleProfileObject.getModel());
carColour.setText(vehicleProfileObject.getColour());
String s;
if (vehicleProfileObject.isSeized()){
s = "Yes";
}else {
s = "No";
}
carSeized.setText(s);
startDate.setText(vehicleProfileObject.getStartDate());
}
}
return listItemView;
}
private void dateString(int position){
boolean success = true;
try {
dateArchivedText.setText(setAsDateTime(mKeys[position]));
} catch (ParseException e) {
e.printStackTrace();
success = false;
}finally {
if (!success){
dateArchivedText.setText(mKeys[position].substring(0,8));
}
}
}
}

View File

@@ -0,0 +1,227 @@
package h_mal.appttude.com.driver.Archive
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.BaseAdapter
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import com.squareup.picasso.Picasso
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.Global.ImageSwiperClass
import h_mal.appttude.com.driver.ui.driver.MainActivity
import h_mal.appttude.com.driver.Objects.ArchiveObject
import h_mal.appttude.com.driver.Objects.InsuranceObject
import h_mal.appttude.com.driver.Objects.LogbookObject
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.model.DriversLicenseObject
import h_mal.appttude.com.driver.model.MotObject
import h_mal.appttude.com.driver.model.PrivateHireObject
import h_mal.appttude.com.driver.model.VehicleProfileObject
import h_mal.appttude.com.driver.utils.DateUtils.convertDateStringDatePattern
import java.text.ParseException
class ArchiveObjectListAdapter(
var archiveObject: ArchiveObject?,
var context: Context?,
var archiveString: String?
) : BaseAdapter() {
var size: Int = 0
lateinit var mKeys: Array<String>
private var dateArchivedText: TextView? = null
override fun getCount(): Int {
return size
}
override fun getItem(position: Int): Any? {
when (archiveString) {
FirebaseClass.PRIVATE_HIRE_FIREBASE -> return archiveObject?.private_hire
?.get(mKeys[position])
FirebaseClass.DRIVERS_LICENSE_FIREBASE -> return archiveObject?.driver_license
?.get(mKeys[position])
FirebaseClass.VEHICLE_DETAILS_FIREBASE -> return archiveObject?.vehicle_details
?.get(mKeys[position])
FirebaseClass.MOT_FIREBASE -> return archiveObject?.mot_details?.get(mKeys[position])
FirebaseClass.INSURANCE_FIREBASE -> return archiveObject?.insurance_details?.get(
mKeys[position]
)
FirebaseClass.LOG_BOOK_FIREBASE -> return archiveObject?.log_book
?.get(mKeys.get(position))
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> return archiveObject?.ph_car?.get(mKeys[position])
else -> return mKeys[position]
}
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getView(position: Int, convertView: View, parent: ViewGroup): View {
var listItemView: View = convertView
if (listItemView == null) {
if (((archiveString == FirebaseClass.PRIVATE_HIRE_FIREBASE) || (archiveString == FirebaseClass.DRIVERS_LICENSE_FIREBASE) || (archiveString == FirebaseClass.MOT_FIREBASE) || (archiveString == FirebaseClass.LOG_BOOK_FIREBASE) || (archiveString == FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE))) {
listItemView = LayoutInflater.from(context).inflate(
R.layout.archive_license_item, parent, false
)
val imageView: ImageView = listItemView.findViewById(R.id.image_archive)
dateArchivedText = listItemView.findViewById(R.id.date_archived)
val expiryHolder: LinearLayout = listItemView.findViewById(R.id.expiry_view)
val fieldTwo: LinearLayout = listItemView.findViewById(R.id.field_two_view)
val expiryText: TextView = listItemView.findViewById(R.id.exp_text)
val fiewTwoLable: TextView = listItemView.findViewById(R.id.field_two)
val fieldTwoText: TextView = listItemView.findViewById(R.id.field_two_text)
when (archiveString) {
// FirebaseClass.PRIVATE_HIRE_FIREBASE -> {
// expiryHolder.visibility = View.VISIBLE
// fieldTwo.visibility = View.VISIBLE
// val privateHireObject: PrivateHireObject =
// getItem(position) as PrivateHireObject
// Picasso.get().load(privateHireObject.phImageString)
// .placeholder(R.drawable.choice_img)
// .into(imageView)
// dateString(position)
// expiryText.text = privateHireObject.phExpiry
// fiewTwoLable.text = "Private Hire License No.:"
// fieldTwoText.text = privateHireObject.phNumber
// }
// FirebaseClass.DRIVERS_LICENSE_FIREBASE -> {
// expiryHolder.visibility = View.VISIBLE
// fieldTwo.visibility = View.VISIBLE
// val driversLicenseObject: DriversLicenseObject =
// getItem(position) as DriversLicenseObject
// Picasso.get().load(driversLicenseObject.licenseImageString)
// .placeholder(R.drawable.choice_img)
// .into(imageView)
// dateString(position)
// expiryText.text = driversLicenseObject.licenseExpiry
// fiewTwoLable.text = "License No.:"
// fieldTwoText.text = driversLicenseObject.licenseNumber
// }
// FirebaseClass.MOT_FIREBASE -> {
// expiryHolder.visibility = View.VISIBLE
// fieldTwo.visibility = View.GONE
// val motObject: MotObject = getItem(position) as MotObject
// Picasso.get().load(motObject.motImageString)
// .placeholder(R.drawable.choice_img)
// .into(imageView)
// dateString(position)
// expiryText.text = motObject.motExpiry
// }
// FirebaseClass.LOG_BOOK_FIREBASE -> {
// expiryHolder.visibility = View.GONE
// fieldTwo.visibility = View.VISIBLE
// val logbookObject: LogbookObject = getItem(position) as LogbookObject
// Picasso.get().load(logbookObject.photoString)
// .into(MainActivity.loadImage(imageView))
// dateString(position)
// fiewTwoLable.text = "V5C No.:"
// fieldTwoText.text = logbookObject.v5cnumber
// }
// FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> {
// expiryHolder.visibility = View.VISIBLE
// fieldTwo.visibility = View.VISIBLE
// val privateHireVehicleObject: PrivateHireVehicleObject =
// getItem(position) as PrivateHireVehicleObject
// Picasso.get().load(privateHireVehicleObject.phCarImageString)
// .into(MainActivity.loadImage(imageView))
// dateString(position)
// expiryText.text = privateHireVehicleObject.phCarExpiry
// fiewTwoLable.text = "Private Hire Vehicle License No.:"
// fieldTwoText.text = privateHireVehicleObject.phCarNumber
// }
}
} else if ((archiveString == FirebaseClass.INSURANCE_FIREBASE)) {
listItemView = LayoutInflater.from(context).inflate(
R.layout.archive_insurance_item, parent, false
)
val holder: View = listItemView.findViewById(R.id.image_pager)
val swiperClass: ImageSwiperClass = ImageSwiperClass(context, holder)
// swiperClass.hideDelete();
listItemView.findViewById<View>(R.id.delete).visibility = View.GONE
// holder.findViewById(R.id.delete).setVisibility(View.INVISIBLE);
dateArchivedText = listItemView.findViewById(R.id.date_archived)
dateString(position)
val expiryText: TextView = listItemView.findViewById(R.id.exp_text)
val fieldTwoText: TextView = listItemView.findViewById(R.id.archive_insurer)
val insuranceObject: InsuranceObject = getItem(position) as InsuranceObject
// swiperClass.reinstantiateList(insuranceObject.photoStrings)
expiryText.text = insuranceObject.expiryDate
fieldTwoText.text = insuranceObject.insurerName
} else if ((archiveString == FirebaseClass.VEHICLE_DETAILS_FIREBASE)) {
listItemView = LayoutInflater.from(context).inflate(
R.layout.archive_vehicle_item, parent, false
)
dateArchivedText = listItemView.findViewById(R.id.date_archived)
dateString(position)
val numberPlate: TextView = listItemView.findViewById(R.id.number_plate)
val keeperName: TextView = listItemView.findViewById(R.id.keeper_name)
val keeperAddress: TextView = listItemView.findViewById(R.id.keeper_address)
val carText: TextView = listItemView.findViewById(R.id.car_text_arch)
val carColour: TextView = listItemView.findViewById(R.id.car_colour)
val carSeized: TextView = listItemView.findViewById(R.id.seized_checkbox)
val startDate: TextView = listItemView.findViewById(R.id.first_date)
val vehicleProfileObject: VehicleProfileObject =
getItem(position) as VehicleProfileObject
numberPlate.text = vehicleProfileObject.reg
keeperName.text = vehicleProfileObject.keeperName
keeperAddress.text = vehicleProfileObject.keeperAddress + "\n" + vehicleProfileObject.keeperPostCode
carText.text = vehicleProfileObject.make + " " + vehicleProfileObject.model
carColour.text = vehicleProfileObject.colour
val s: String
if (vehicleProfileObject.isSeized) {
s = "Yes"
} else {
s = "No"
}
carSeized.text = s
startDate.text = vehicleProfileObject.startDate
}
}
return listItemView
}
private fun dateString(position: Int) {
var success: Boolean = true
try {
dateArchivedText!!.text = mKeys[position].convertDateStringDatePattern("yyyyMMdd_HHmmss", "dd/MM/yyyy")
} catch (e: ParseException) {
e.printStackTrace()
success = false
} finally {
if (!success) {
dateArchivedText!!.text = mKeys.get(position).substring(0, 8)
}
}
}
companion object {
private val TAG: String = "ArchiveObjectListAdapte"
}
init {
archiveObject?.apply {
val map = when (archiveString) {
FirebaseClass.PRIVATE_HIRE_FIREBASE -> private_hire
FirebaseClass.DRIVERS_LICENSE_FIREBASE -> driver_license
FirebaseClass.VEHICLE_DETAILS_FIREBASE -> vehicle_details
FirebaseClass.MOT_FIREBASE -> mot_details
FirebaseClass.INSURANCE_FIREBASE -> insurance_details
FirebaseClass.LOG_BOOK_FIREBASE -> log_book
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE -> ph_car
else -> null
}
setUp(map)
}
}
private fun setUp(map: HashMap<String,*>?){
size = map?.size ?: 0
map?.keys?.toTypedArray()?.let{
mKeys = it
}
}
}

View File

@@ -1,290 +0,0 @@
package h_mal.appttude.com.driver.Driver;
import android.app.DatePickerDialog;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;
import java.util.Calendar;
import h_mal.appttude.com.driver.Global.DateDialog;
import h_mal.appttude.com.driver.Global.FirebaseClass;
import h_mal.appttude.com.driver.Global.ImageSelectorDialog;
import h_mal.appttude.com.driver.Global.ImageSelectorResults;
import h_mal.appttude.com.driver.Objects.DriversLicenseObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.archiveClass;
import static h_mal.appttude.com.driver.MainActivity.auth;
import static h_mal.appttude.com.driver.MainActivity.fragmentManager;
import static h_mal.appttude.com.driver.MainActivity.getDateStamp;
import static h_mal.appttude.com.driver.MainActivity.loadImage;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.viewController;
public class DriverLicenseFragment extends Fragment {
private String TAG = this.getClass().getSimpleName();
private ImageView imageView;
private ProgressBar progressBar;
EditText licenseNo;
EditText expiry;
public Uri filePath;
public Uri picUri;
String li_numberString;
String li_exprString;
DatabaseReference reference;
DriversLicenseObject driversLicenseObject;
Boolean uploadNew;
String UID;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uploadNew = false;
if (getArguments() != null){
Log.i(TAG, "onCreate: args = args exist");
if (getArguments().containsKey("user_id")){
UID = getArguments().getString("user_id");
}else {
UID = auth.getCurrentUser().getUid();
}
if (getArguments().containsKey(UPLOAD_NEW)){
uploadNew = true;
}
}else{
UID = auth.getCurrentUser().getUid();
}
reference = mDatabase.child(USER_FIREBASE).child(UID)
.child(DRIVER_FIREBASE).child(DRIVERS_LICENSE_FIREBASE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_driver_license, container, false);
imageView = view.findViewById(R.id.driversli_img);
progressBar = view.findViewById(R.id.pb_dl);
viewController.progress(View.VISIBLE);
reference.addListenerForSingleValueEvent(valueEventListener);
TextView uploadLic = view.findViewById(R.id.upload_lic);
licenseNo = view.findViewById(R.id.lic_no);
expiry = view.findViewById(R.id.lic_expiry);
expiry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DateDialog dateDialog = new DateDialog(getContext());
dateDialog.init(expiry);
}
});
Button submit = view.findViewById(R.id.submit);
submit.setOnClickListener(submitOnClickListener);
uploadLic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext());
imageSelectorDialog.setImageName("drivers_license");
imageSelectorDialog.show();
}
});
return view;
}
View.OnClickListener submitOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
li_numberString = licenseNo.getText().toString().trim();
li_exprString = expiry.getText().toString().trim();
if (!TextUtils.isEmpty(li_numberString) &&
!TextUtils.isEmpty(li_exprString)){
viewController.progress(View.VISIBLE);
if (filePath == null && picUri == null){
Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show();
viewController.progress(View.GONE);
}else {
if (filePath != null){
Log.i(TAG, "onClick: new Image uploaded");
new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){
@Override
public void processFinish(Uri output) {
Log.i(TAG, "processFinish: ");
if (output != null){
picUri = output;
publishObject();
}else {
Toast.makeText(getContext(), getString(R.string.failed_upload), Toast.LENGTH_SHORT).show();
viewController.progress(View.GONE);
}
}
}).uploadImage(DRIVERS_LICENSE_FIREBASE,DRIVERS_LICENSE_FIREBASE + getDateStamp());
}else{
Log.i(TAG, "onClick: pushing with same image");
publishObject();
}
}
}else {
if (TextUtils.isEmpty(li_numberString)){
licenseNo.setError("Field required");
}
if (TextUtils.isEmpty(li_exprString)){
expiry.setError("Field required");
}
if (picUri == null && filePath == null){
Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show();
}
}
}
};
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
viewController.progress(View.GONE);
try{
driversLicenseObject = dataSnapshot.getValue(DriversLicenseObject.class);
}catch (Exception e){
Log.e(TAG, "onDataChange: ", e);
}finally {
if (driversLicenseObject != null){
picUri = Uri.parse(driversLicenseObject.getLicenseImageString());
li_numberString = driversLicenseObject.getLicenseNumber();
li_exprString = driversLicenseObject.getLicenseExpiry();
if(!uploadNew){
licenseNo.setText(li_numberString);
expiry.setText(li_exprString);
Picasso.get()
.load(picUri)
.into(loadImage(progressBar,imageView));
}
}else{
Toast.makeText(getContext(), getString(R.string.failed_retrieve), Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
viewController.progress(View.GONE);
Toast.makeText(getContext(), databaseError.getMessage(), Toast.LENGTH_SHORT).show();
Log.e(TAG, "onCancelled: " + databaseError.getMessage());
}
};
private void publishObject(){
if (uploadNew){
archiveClass.archiveRecord(UID,DRIVERS_LICENSE_FIREBASE,driversLicenseObject);
}
DriversLicenseObject driversLicenseObjectNew = new DriversLicenseObject(picUri.toString(),li_numberString,li_exprString);
reference.setValue(driversLicenseObjectNew).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Log.i(TAG, "onComplete: publish = " + task.isSuccessful());
approvalsClass.setStatusCode(UID,DRIVERS_LICENSE_FIREBASE+APPROVAL_CONSTANT,APPROVAL_PENDING);
fragmentManager.popBackStack();
}else {
Toast.makeText(getContext(),R.string.unsuccessful, Toast.LENGTH_SHORT).show();
}
viewController.progress(View.GONE);
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == MY_CAMERA_PERMISSION_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show();
Intent cameraIntent = new
Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
} else {
Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data,
filePath,imageView,new ImageSelectorResults.FilepathResponse() {
@Override
public void processFinish(Uri output) {
filePath = output;
}
});
}
}

View File

@@ -1,147 +0,0 @@
package h_mal.appttude.com.driver.Driver;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v7.widget.CardView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import h_mal.appttude.com.driver.Objects.ApprovalsObject;
import h_mal.appttude.com.driver.Objects.WholeDriverObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.archiveClass;
import static h_mal.appttude.com.driver.MainActivity.auth;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.viewController;
public class DriverOverallFragment extends Fragment {
CardView driverProfile;
CardView privateHire;
CardView driversLicense;
ImageView driverApr;
ImageView privateApr ;
ImageView driversLiApr;
TextView privExp;
TextView drivLiExp;
DatabaseReference reference;
WholeDriverObject driverProfileObject;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
reference = mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_driver_overall, container, false);
driverProfile = view.findViewById(R.id.driver_prof);
privateHire = view.findViewById(R.id.private_hire);
driversLicense = view.findViewById(R.id.drivers_license);
driverApr = view.findViewById(R.id.approval_dp);
privateApr = view.findViewById(R.id.approval_ph);
driversLiApr = view.findViewById(R.id.approval_dl);
privExp = view.findViewById(R.id.ph_button_exp);
drivLiExp = view.findViewById(R.id.dl_button_exp);
privExp.setVisibility(View.GONE);
drivLiExp.setVisibility(View.GONE);
viewController.progress(View.VISIBLE);
reference.addListenerForSingleValueEvent(valueEventListener);
return view;
}
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
driverProfileObject = dataSnapshot.getValue(WholeDriverObject.class);
if (driverProfileObject.approvalsObject != null){
ApprovalsObject approvalsObject = driverProfileObject.getApprovalsObject();
driverApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getDriver_details_approval()));
privateApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getPrivate_hire_approval()));
driversLiApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getDriver_license_approval()));
}
if (driverProfileObject.driver_profile != null){
if (driverProfileObject.getDriver_profile().private_hire != null){
privExp.setVisibility(View.VISIBLE);
privExp.setText("Expiry: " + driverProfileObject.getDriver_profile().getPrivate_hire().getPhExpiry());
}
if (driverProfileObject.getDriver_profile().driver_license != null){
drivLiExp.setVisibility(View.VISIBLE);
drivLiExp.setText("Expiry: " + driverProfileObject.getDriver_profile().getDriver_license().getLicenseExpiry());
}
}
driverProfile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
executeFragment(new DriverProfileFragment());
}
});
privateHire.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (driverProfileObject.driver_profile == null){
executeFragment(new PrivateHireLicenseFragment());
}else {
archiveClass.openDialogArchive(getContext(),driverProfileObject.getDriver_profile().getPrivate_hire()
,new PrivateHireLicenseFragment());
}
}
});
driversLicense.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (driverProfileObject.driver_profile == null){
executeFragment(new DriverLicenseFragment());
}else {
archiveClass.openDialogArchive(getContext(),driverProfileObject.getDriver_profile().getDriver_license()
,new DriverLicenseFragment());
}
}
});
viewController.progress(View.GONE);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
viewController.progress(View.GONE);
}
};
}

View File

@@ -1,310 +0,0 @@
package h_mal.appttude.com.driver.Driver;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.UserProfileChangeRequest;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;
import h_mal.appttude.com.driver.Global.DateDialog;
import h_mal.appttude.com.driver.Global.FirebaseClass;
import h_mal.appttude.com.driver.Global.ImageSelectorDialog;
import h_mal.appttude.com.driver.Global.ImageSelectorResults;
import h_mal.appttude.com.driver.Global.ViewController;
import h_mal.appttude.com.driver.Objects.DriverProfileObject;
import h_mal.appttude.com.driver.Objects.DriversLicenseObject;
import h_mal.appttude.com.driver.Objects.PrivateHireObject;
import h_mal.appttude.com.driver.Objects.UserObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment;
import static h_mal.appttude.com.driver.Global.FirebaseClass.*;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.auth;
import static h_mal.appttude.com.driver.MainActivity.fragmentManager;
import static h_mal.appttude.com.driver.MainActivity.getDateStamp;
import static h_mal.appttude.com.driver.MainActivity.loadImage;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.viewController;
public class DriverProfileFragment extends Fragment {
private String TAG = this.getClass().getSimpleName();
ImageView driverPic;
ProgressBar pb;
TextView addPic;
EditText forenames;
EditText address;
EditText postcode;
EditText dob;
EditText ni;
EditText dateFirst;
Button submit_driver;
Uri filePath;
Uri picUri;
DatabaseReference driverProfileReference;
String UID;
DriverProfileObject driverProfileObject;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null){
UID = getArguments().getString("user_id");
}else{
UID = auth.getCurrentUser().getUid();
}
driverProfileReference = mDatabase.child(USER_FIREBASE).child(UID)
.child(DRIVER_FIREBASE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_driver_profile, container, false);
driverPic = view.findViewById(R.id.driver_pic);
pb = view.findViewById(R.id.pb_dp);
addPic = view.findViewById(R.id.add_driver_pic);
forenames = view.findViewById(R.id.names);
address = view.findViewById(R.id.address);
postcode = view.findViewById(R.id.postcode);
dob = view.findViewById(R.id.dob);
ni = view.findViewById(R.id.ni_number);
dateFirst = view.findViewById(R.id.date_first);
submit_driver = view.findViewById(R.id.submit_driver);
viewController.progress(View.VISIBLE);
driverProfileReference.addListenerForSingleValueEvent(valueEventListener);
addPic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext());
imageSelectorDialog.setImageName("driver_pic"+getDateStamp());
imageSelectorDialog.show();
}
});
dob.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DateDialog dateDialog = new DateDialog(getContext());
dateDialog.init(dob);
}
});
dateFirst.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DateDialog dateDialog = new DateDialog(getContext());
dateDialog.init(dateFirst);
}
});
submit_driver.setOnClickListener(submitOnClickListener);
return view;
}
ValueEventListener valueEventListener = new ValueEventListener(){
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
viewController.progress(View.GONE);
try {
driverProfileObject = dataSnapshot.child(DRIVER_DETAILS_FIREBASE).getValue(DriverProfileObject.class);
}catch (Exception e){
Log.e(TAG, "onDataChange: ", e);
}finally {
if (driverProfileObject != null){
forenames.setText(driverProfileObject.getForenames());
address.setText(driverProfileObject.getAddress());
postcode.setText(driverProfileObject.getPostcode());
dob.setText(driverProfileObject.getDob());
dateFirst.setText(driverProfileObject.getDateFirst());
ni.setText(driverProfileObject.getNi());
Picasso.get().load(driverProfileObject.getDriverPic())
.into(loadImage(pb,driverPic));
picUri = Uri.parse(driverProfileObject.getDriverPic());
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
viewController.progress(View.GONE);
}
};
View.OnClickListener submitOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
String driverForename = forenames.getText().toString().trim();
String AddressString = address.getText().toString().trim();
String postCodeString = postcode.getText().toString().trim();
String dobString = dob.getText().toString().trim();
String niString = ni.getText().toString().trim();
String dateFirstString = dateFirst.getText().toString().trim();
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(getContext(), "No Driver image", Toast.LENGTH_SHORT).show();
viewController.progress(View.GONE);
}else {
viewController.progress(View.VISIBLE);
if (filePath != null){
new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){
@Override
public void processFinish(Uri output) {
Log.i(TAG, "processFinish: ");
if (output != null){
picUri = output;
writeDriverToDb();
}else {
viewController.progress(View.GONE);
}
}
}).uploadImage(DRIVERS_LICENSE_FIREBASE,DRIVERS_LICENSE_FIREBASE + getDateStamp());
}else{
Log.i(TAG, "onClick: pushing with same image");
writeDriverToDb();
}
}
}else {
if (TextUtils.isEmpty(driverForename)){
forenames.setError("Field required");
}
if (TextUtils.isEmpty(AddressString)){
address.setError("Field required");
}
if (TextUtils.isEmpty(postCodeString)){
postcode.setError("Field required");
}
if (TextUtils.isEmpty(dobString)){
dob.setError("Field required");
}
if (TextUtils.isEmpty(niString)){
ni.setError("Field required");
}
if (TextUtils.isEmpty(dateFirstString)){
dateFirst.setError("Field required");
}
}
}
};
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data,
filePath,driverPic,new ImageSelectorResults.FilepathResponse() {
@Override
public void processFinish(Uri output) {
filePath = output;
}
});
}
private void writeDriverToDb(){
String forenameText = forenames.getText().toString().trim();
String addressText = address.getText().toString().trim();
String postcodeText = postcode.getText().toString().trim();
String dobText = dob.getText().toString().trim();
String niText = ni.getText().toString().trim();
String datefirstText = dateFirst.getText().toString().trim();
DriverProfileObject driverProfileObject = new DriverProfileObject(picUri.toString(),forenameText,
addressText,postcodeText,dobText,niText,datefirstText);
if (UID.equals(auth.getCurrentUser().getUid())){
UserProfileChangeRequest.Builder profileUpdatesBuilder = new UserProfileChangeRequest.Builder();
profileUpdatesBuilder.setPhotoUri(picUri);
UserProfileChangeRequest profileUpdates = profileUpdatesBuilder.build();
auth.getCurrentUser().updateProfile(profileUpdates)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User profile updated.");
viewController.reloadDrawer();
mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()).child("user_details")
.setValue(new UserObject(auth.getCurrentUser().getDisplayName(),auth.getCurrentUser().getEmail(),picUri.toString()));
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.e(TAG, "onFailure: ", e);
}
});
}
driverProfileReference.child(DRIVER_DETAILS_FIREBASE).setValue(driverProfileObject)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
approvalsClass.setStatusCode(UID,DRIVER_DETAILS_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING);
}
viewController.progress(View.GONE);
fragmentManager.popBackStack();
}
});
}
}

View File

@@ -1,300 +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.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.text.Layout;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;
import java.util.ArrayList;
import java.util.List;
import h_mal.appttude.com.driver.Global.DateDialog;
import h_mal.appttude.com.driver.Global.FirebaseClass;
import h_mal.appttude.com.driver.Global.ImageSelectorDialog;
import h_mal.appttude.com.driver.Global.ImageSelectorResults;
import h_mal.appttude.com.driver.Global.ImageSwiperClass;
import h_mal.appttude.com.driver.Objects.InsuranceObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.archiveClass;
import static h_mal.appttude.com.driver.MainActivity.auth;
import static h_mal.appttude.com.driver.MainActivity.fragmentManager;
import static h_mal.appttude.com.driver.MainActivity.getDateStamp;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.printObjectAsJson;
import static h_mal.appttude.com.driver.MainActivity.viewController;
public class InsuranceFragment extends Fragment {
private String TAG = this.getClass().getSimpleName();
DatabaseReference reference;
TextView uploadIns;
EditText insName;
EditText insExpiry;
View holder;
public Uri filePath;
public Uri picUri;
public List<String> photoStrings;
String insNameString;
String insExpiryString;
InsuranceObject insuranceObject;
ImageSwiperClass swiperClass;
Boolean uploadNew;
String UID;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uploadNew = false;
photoStrings = new ArrayList<>();
if (getArguments() != null){
Log.i(TAG, "onCreate: args = args exist");
if (getArguments().containsKey("user_id")){
UID = getArguments().getString("user_id");
}else {
UID = auth.getCurrentUser().getUid();
}
if (getArguments().containsKey(UPLOAD_NEW)){
uploadNew = true;
}
}else{
UID = auth.getCurrentUser().getUid();
}
reference = mDatabase.child(USER_FIREBASE).child(UID).child(VEHICLE_FIREBASE).child(INSURANCE_FIREBASE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_insurance, container, false);
uploadIns = view.findViewById(R.id.uploadInsurance);
insName = view.findViewById(R.id.insurer);
insExpiry = view.findViewById(R.id.insurance_exp);
Button submit = view.findViewById(R.id.submit_ins);
holder = view.findViewById(R.id.image_pager);
swiperClass = new ImageSwiperClass(getContext(),holder);
viewController.progress(View.VISIBLE);
reference.addListenerForSingleValueEvent(valueEventListener);
uploadIns.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext());
imageSelectorDialog.setImageName("insurance"+getDateStamp());
imageSelectorDialog.show();
}
});
insExpiry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DateDialog dateDialog = new DateDialog(getContext());
dateDialog.init(insExpiry);
}
});
submit.setOnClickListener(submitOnClickListener);
return view;
}
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
viewController.progress(View.GONE);
try{
insuranceObject = dataSnapshot.getValue(InsuranceObject.class);
}catch (Exception e){
Log.e(TAG, "onDataChange: ", e);
}finally {
if (insuranceObject != null){
if (!uploadNew){
photoStrings = insuranceObject.getPhotoStrings();
swiperClass.reinstantiateList(photoStrings);
if (insuranceObject.insurerName != null){
insNameString = insuranceObject.getInsurerName();
insName.setText(insNameString);
}
if (insuranceObject.expiryDate != null){
insExpiryString = insuranceObject.getExpiryDate();
insExpiry.setText(insExpiryString);
}
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
viewController.progress(View.GONE);
}
};
View.OnClickListener submitOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
insNameString = insName.getText().toString().trim();
insExpiryString = insExpiry.getText().toString().trim();
if (!TextUtils.isEmpty(insNameString)
&& !TextUtils.isEmpty(insExpiryString)){
viewController.progress(View.VISIBLE);
if (filePath == null && picUri == null){
Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show();
viewController.progress(View.GONE);
}else {
if (filePath != null){
Log.i(TAG, "onClick: new Image uploaded");
new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){
@Override
public void processFinish(Uri output) {
Log.i(TAG, "processFinish: ");
if (output != null){
picUri = output;
publishObject();
}else {
Toast.makeText(getContext(), "Could not upload", Toast.LENGTH_SHORT).show();
viewController.progress(View.GONE);
}
}
}).uploadImage(INSURANCE_FIREBASE,INSURANCE_FIREBASE + getDateStamp());
}else{
Log.i(TAG, "onClick: pushing with same image");
publishObject();
}
}
}else {
if (TextUtils.isEmpty(insNameString)){
insName.setError("Field required");
}
if (TextUtils.isEmpty(insExpiryString)){
insExpiry.setError("Field required");
}
if (picUri == null){
Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show();
}
}
}
};
private void publishObject(){
if (uploadNew){
archiveClass.archiveRecord(UID,INSURANCE_FIREBASE,insuranceObject);
}
photoStrings = swiperClass.getImageStrings();
InsuranceObject insuranceObject = new InsuranceObject(photoStrings, insNameString, insExpiryString);
reference.setValue(insuranceObject).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
approvalsClass.setStatusCode(UID,INSURANCE_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING);
fragmentManager.popBackStack();
}else{
Toast.makeText(getContext(), "Upload Unsuccessful", Toast.LENGTH_SHORT).show();
}
viewController.progress(View.GONE);
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == MY_CAMERA_PERMISSION_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show();
Intent cameraIntent = new
Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
} else {
Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data,
filePath,new ImageSelectorResults.FilepathResponse() {
@Override
public void processFinish(Uri output) {
filePath = output;
new FirebaseClass(getContext(), output, new FirebaseClass.Response() {
@Override
public void processFinish(Uri output) {
if (output != null){
photoStrings.add(output.toString());
swiperClass.addPhotoString(output.toString());
//notify data change
reference.setValue(new InsuranceObject(photoStrings,null,null));
}
}
}).uploadImage(INSURANCE_FIREBASE,INSURANCE_FIREBASE + getDateStamp());
}
});
}
@Override
public void onResume() {
super.onResume();
printObjectAsJson(TAG,photoStrings);
}
}

View File

@@ -1,262 +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.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;
import h_mal.appttude.com.driver.Global.DateDialog;
import h_mal.appttude.com.driver.Global.FirebaseClass;
import h_mal.appttude.com.driver.Global.ImageSelectorDialog;
import h_mal.appttude.com.driver.Global.ImageSelectorResults;
import h_mal.appttude.com.driver.Objects.MotObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.archiveClass;
import static h_mal.appttude.com.driver.MainActivity.auth;
import static h_mal.appttude.com.driver.MainActivity.fragmentManager;
import static h_mal.appttude.com.driver.MainActivity.getDateStamp;
import static h_mal.appttude.com.driver.MainActivity.loadImage;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.viewController;
public class MotFragment extends Fragment {
private String TAG = this.getClass().getSimpleName();
DatabaseReference reference;
TextView uploadMot;
ImageView motImage;
ProgressBar progressBar;
EditText motExpiryEditText;
public Uri filePath;
public Uri picUri;
MotObject motObject;
String motExpText;
Boolean uploadNew;
String UID;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uploadNew = false;
if (getArguments() != null){
Log.i(TAG, "onCreate: args = args exist");
if (getArguments().containsKey("user_id")){
UID = getArguments().getString("user_id");
}else {
UID = auth.getCurrentUser().getUid();
}
if (getArguments().containsKey(UPLOAD_NEW)){
uploadNew = true;
}
}else{
UID = auth.getCurrentUser().getUid();
}
reference = mDatabase.child(USER_FIREBASE).child(UID)
.child(VEHICLE_FIREBASE).child(MOT_FIREBASE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_mot, container, false);
motImage = view.findViewById(R.id.mot_img);
progressBar = view.findViewById(R.id.pb_mot);
uploadMot = view.findViewById(R.id.uploadmot);
motExpiryEditText = view.findViewById(R.id.mot_expiry);
Button submit = view.findViewById(R.id.submit_mot);
viewController.progress(View.VISIBLE);
reference.addListenerForSingleValueEvent(valueEventListener);
uploadMot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext());
imageSelectorDialog.setImageName("mot_certificate");
imageSelectorDialog.show();
}
});
motExpiryEditText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DateDialog dateDialog = new DateDialog(getContext());
dateDialog.init(motExpiryEditText);
}
});
submit.setOnClickListener(submitOnClickListener);
return view;
}
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
viewController.progress(View.GONE);
try{
motObject = dataSnapshot.getValue(MotObject.class);
}catch (Exception e){
Log.e(TAG, "onDataChange: ", e);
}finally {
if (motObject != null){
if (!uploadNew){
picUri = Uri.parse(motObject.getMotImageString());
motExpText = motObject.getMotExpiry();
motExpiryEditText.setText(motExpText);
Picasso.get()
.load(picUri)
.into(loadImage(progressBar,motImage));
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
viewController.progress(View.GONE);
}
};
View.OnClickListener submitOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
motExpText = motExpiryEditText.getText().toString().trim();
if (!TextUtils.isEmpty(motExpText)){
viewController.progress(View.VISIBLE);
if (filePath == null && picUri == null){
Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show();
viewController.progress(View.GONE);
}else {
if (filePath != null){
Log.i(TAG, "onClick: new Image uploaded");
new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){
@Override
public void processFinish(Uri output) {
Log.i(TAG, "processFinish: ");
if (output != null){
picUri = output;
publishObject();
}else {
Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show();
}
}
}).uploadImage(MOT_FIREBASE,MOT_FIREBASE + getDateStamp());
}else{
Log.i(TAG, "onClick: pushing with same image");
publishObject();
}
}
}else {
if (TextUtils.isEmpty(motExpText)){
motExpiryEditText.setError("Field required");
}
if (picUri == null){
Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show();
}
}
}
};
private void publishObject(){
if (uploadNew){
archiveClass.archiveRecord(UID,MOT_FIREBASE,motObject);
}
MotObject motObject = new MotObject(picUri.toString(), motExpText);
reference.setValue(motObject).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Log.i(TAG, "onComplete: publish = " + task.isSuccessful());
approvalsClass.setStatusCode(UID,MOT_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING);
fragmentManager.popBackStack();
}else {
Toast.makeText(getContext(), "Unable to upload", Toast.LENGTH_SHORT).show();
}
viewController.progress(View.GONE);
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == MY_CAMERA_PERMISSION_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show();
Intent cameraIntent = new
Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
} else {
Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data,
filePath,motImage,new ImageSelectorResults.FilepathResponse() {
@Override
public void processFinish(Uri output) {
filePath = output;
}
});
}
}

View File

@@ -1,278 +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.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseError;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;
import java.util.UUID;
import h_mal.appttude.com.driver.Global.DateDialog;
import h_mal.appttude.com.driver.Global.FirebaseClass;
import h_mal.appttude.com.driver.Global.ImageSelectorDialog;
import h_mal.appttude.com.driver.Global.ImageSelectorResults;
import h_mal.appttude.com.driver.Objects.PrivateHireObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW;
import static h_mal.appttude.com.driver.Global.FirebaseClass.*;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.archiveClass;
import static h_mal.appttude.com.driver.MainActivity.fragmentManager;
import static h_mal.appttude.com.driver.MainActivity.getDateStamp;
import static h_mal.appttude.com.driver.MainActivity.loadImage;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.auth;
import static h_mal.appttude.com.driver.MainActivity.viewController;
public class PrivateHireLicenseFragment extends Fragment {
private String TAG = this.getClass().getSimpleName();
private ImageView imageView;
ProgressBar pb;
EditText phNo;
EditText phExpiry;
public Uri filePath;
public Uri picUri;
String Ph_numberString;
String Ph_exprString;
DatabaseReference reference;
PrivateHireObject privateHireObject;
Boolean uploadNew;
String UID;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uploadNew = false;
if (getArguments() != null){
Log.i(TAG, "onCreate: args = args exist");
if (getArguments().containsKey("user_id")){
UID = getArguments().getString("user_id");
}else {
UID = auth.getCurrentUser().getUid();
}
if (getArguments().containsKey(UPLOAD_NEW)){
uploadNew = true;
}
}else{
UID = auth.getCurrentUser().getUid();
}
reference = mDatabase.child(USER_FIREBASE).child(UID)
.child(DRIVER_FIREBASE).child(PRIVATE_HIRE_FIREBASE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_private_hire_license, container, false);
viewController.progress(View.VISIBLE);
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
viewController.progress(View.GONE);
try{
privateHireObject = dataSnapshot.getValue(PrivateHireObject.class);
}catch (Exception e){
Log.e(TAG, "onDataChange: ", e);
}finally {
if (privateHireObject != null){
picUri = Uri.parse(privateHireObject.getPhImageString());
Ph_numberString = privateHireObject.getPhNumber();
Ph_exprString = privateHireObject.getPhExpiry();
Log.i(TAG, "onDataChange: uploadNew = " + uploadNew);
if (!uploadNew){
phNo.setText(Ph_numberString);
phExpiry.setText(Ph_exprString);
Picasso.get()
.load(picUri)
.into(loadImage(pb,imageView));
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
viewController.progress(View.GONE);
}
});
TextView uploadPH = view.findViewById(R.id.uploadphlic);
imageView = view.findViewById(R.id.imageView2);
pb = view.findViewById(R.id.pb_priv);
phNo = view.findViewById(R.id.ph_no);
phExpiry = view.findViewById(R.id.ph_expiry);
phExpiry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DateDialog dateDialog = new DateDialog(getContext());
dateDialog.init(phExpiry);
dateDialog.show();
}
});
Button submit = view.findViewById(R.id.submit);
uploadPH.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext());
imageSelectorDialog.setImageName("private_hire");
imageSelectorDialog.show();
}
});
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Ph_numberString = phNo.getText().toString().trim();
Ph_exprString = phExpiry.getText().toString().trim();
//validation for data then submit
if (!TextUtils.isEmpty(Ph_numberString) &&
!TextUtils.isEmpty(Ph_exprString)){
viewController.progress(View.VISIBLE);
if (filePath == null && picUri == null){
Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show();
viewController.progress(View.GONE);
}else {
if (filePath != null){
Log.i(TAG, "onClick: new Image uploaded");
new FirebaseClass(getContext(),filePath,new Response(){
@Override
public void processFinish(Uri output) {
Log.i(TAG, "processFinish: ");
if (output != null){
picUri = output;
publishObject();
}else {
Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show();
viewController.progress(View.GONE);
}
}
}).uploadImage(PRIVATE_HIRE_FIREBASE,PRIVATE_HIRE_FIREBASE + getDateStamp());
}else{
Log.i(TAG, "onClick: pushing with same image");
publishObject();
}
}
}else {
if (TextUtils.isEmpty(Ph_numberString)){
phNo.setError("Field required");
}
if (TextUtils.isEmpty(Ph_exprString)){
phExpiry.setError("Field required");
}
if (picUri == null){
Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show();
}
}
}
});
return view;
}
private void publishObject(){
if (uploadNew){
archiveClass.archiveRecord(UID,PRIVATE_HIRE_FIREBASE,privateHireObject);
}
PrivateHireObject privateHireObjectNew = new PrivateHireObject(picUri.toString(),Ph_numberString,Ph_exprString);
mDatabase.child(USER_FIREBASE).child(UID).child(DRIVER_FIREBASE).child(PRIVATE_HIRE_FIREBASE)
.setValue(privateHireObjectNew).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Log.i(TAG, "onComplete: publish = " + task.isSuccessful());
approvalsClass.setStatusCode(UID,PRIVATE_HIRE_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING);
fragmentManager.popBackStack();
}else {
Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show();
}
viewController.progress(View.GONE);
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == MY_CAMERA_PERMISSION_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show();
Intent cameraIntent = new
Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
} else {
Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data,
filePath,imageView,new ImageSelectorResults.FilepathResponse() {
@Override
public void processFinish(Uri output) {
filePath = output;
}
});
}
}

View File

@@ -1,285 +0,0 @@
package h_mal.appttude.com.driver.Driver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;
import h_mal.appttude.com.driver.Global.DateDialog;
import h_mal.appttude.com.driver.Global.FirebaseClass;
import h_mal.appttude.com.driver.Global.ImageSelectorDialog;
import h_mal.appttude.com.driver.Global.ImageSelectorResults;
import h_mal.appttude.com.driver.Objects.PrivateHireObject;
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.archiveClass;
import static h_mal.appttude.com.driver.MainActivity.auth;
import static h_mal.appttude.com.driver.MainActivity.fragmentManager;
import static h_mal.appttude.com.driver.MainActivity.getDateStamp;
import static h_mal.appttude.com.driver.MainActivity.loadImage;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.viewController;
public class PrivateHireVehicleFragment extends Fragment {
private String TAG = this.getClass().getSimpleName();
private ImageView imageView;
ProgressBar pb;
EditText phNo;
EditText phExpiry;
public Uri filePath;
public Uri picUri;
String Ph_numberString;
String Ph_exprString;
DatabaseReference reference;
PrivateHireVehicleObject privateHireObject;
Boolean uploadNew;
String UID;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uploadNew = false;
if (getArguments() != null){
Log.i(TAG, "onCreate: args = args exist");
if (getArguments().containsKey("user_id")){
UID = getArguments().getString("user_id");
}else {
UID = auth.getCurrentUser().getUid();
}
if (getArguments().containsKey(UPLOAD_NEW)){
uploadNew = true;
}
}else{
UID = auth.getCurrentUser().getUid();
}
reference = mDatabase.child(USER_FIREBASE).child(UID)
.child(VEHICLE_FIREBASE).child(PRIVATE_HIRE_VEHICLE_LICENSE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_private_hire_vehicle, container, false);
viewController.progress(View.VISIBLE);
reference.addListenerForSingleValueEvent(valueEventListener);
TextView uploadPH = view.findViewById(R.id.uploadphlic);
imageView = view.findViewById(R.id.imageView2);
pb = view.findViewById(R.id.pb_priv);
phNo = view.findViewById(R.id.ph_no);
phExpiry = view.findViewById(R.id.ph_expiry);
phExpiry.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DateDialog dateDialog = new DateDialog(getContext());
dateDialog.init(phExpiry);
dateDialog.show();
}
});
Button submit = view.findViewById(R.id.submit);
submit.setOnClickListener(submitClick);
uploadPH.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext());
imageSelectorDialog.setImageName("private_hire");
imageSelectorDialog.show();
}
});
return view;
}
private View.OnClickListener submitClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
Ph_numberString = phNo.getText().toString().trim();
Ph_exprString = phExpiry.getText().toString().trim();
//validation for data then submit
if (!TextUtils.isEmpty(Ph_numberString) &&
!TextUtils.isEmpty(Ph_exprString)){
viewController.progress(View.VISIBLE);
if (filePath == null && picUri == null){
Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show();
viewController.progress(View.GONE);
}else {
if (filePath != null){
Log.i(TAG, "onClick: new Image uploaded");
new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){
@Override
public void processFinish(Uri output) {
Log.i(TAG, "processFinish: ");
if (output != null){
picUri = output;
publishObject();
}else {
Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show();
viewController.progress(View.GONE);
}
}
}).uploadImage(PRIVATE_HIRE_FIREBASE,PRIVATE_HIRE_FIREBASE + getDateStamp());
}else{
Log.i(TAG, "onClick: pushing with same image");
publishObject();
}
}
}else {
if (TextUtils.isEmpty(Ph_numberString)){
phNo.setError("Field required");
}
if (TextUtils.isEmpty(Ph_exprString)){
phExpiry.setError("Field required");
}
if (picUri == null){
Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show();
}
}
}
};
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
viewController.progress(View.GONE);
try{
privateHireObject = dataSnapshot.getValue(PrivateHireVehicleObject.class);
}catch (Exception e){
Log.e(TAG, "onDataChange: ", e);
}finally {
if (privateHireObject != null){
picUri = Uri.parse(privateHireObject.getPhCarImageString());
Ph_numberString = privateHireObject.getPhCarNumber();
Ph_exprString = privateHireObject.getPhCarExpiry();
Log.i(TAG, "onDataChange: uploadNew = " + uploadNew);
if (!uploadNew){
phNo.setText(Ph_numberString);
phExpiry.setText(Ph_exprString);
Picasso.get()
.load(picUri)
.into(loadImage(pb,imageView));
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
viewController.progress(View.GONE);
}
};
private void publishObject(){
if (uploadNew){
archiveClass.archiveRecord(UID,PRIVATE_HIRE_VEHICLE_LICENSE,privateHireObject);
}
PrivateHireVehicleObject privateHireObjectNew = new PrivateHireVehicleObject(picUri.toString(),Ph_numberString,Ph_exprString);
reference.setValue(privateHireObjectNew).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Log.i(TAG, "onComplete: publish = " + task.isSuccessful());
approvalsClass.setStatusCode(UID,PRIVATE_HIRE_VEHICLE_LICENSE + APPROVAL_CONSTANT,APPROVAL_PENDING);
fragmentManager.popBackStack();
}else {
Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show();
}
viewController.progress(View.GONE);
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == MY_CAMERA_PERMISSION_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show();
Intent cameraIntent = new
Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
} else {
Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
new ImageSelectorResults().Results(getActivity(), requestCode, resultCode, data,
filePath, imageView, new ImageSelectorResults.FilepathResponse() {
@Override
public void processFinish(Uri output) {
filePath = output;
}
});
}
}

View File

@@ -1,188 +0,0 @@
package h_mal.appttude.com.driver.Driver;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v7.widget.CardView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import h_mal.appttude.com.driver.Objects.ApprovalsObject;
import h_mal.appttude.com.driver.Objects.WholeDriverObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.archiveClass;
import static h_mal.appttude.com.driver.MainActivity.auth;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.viewController;
public class VehicleOverallFragment extends Fragment {
ImageView vehicleApr;
ImageView insuranceApr;
ImageView motApr;
ImageView logbookApr;
private ImageView privateHireCarApr;
TextView insuranceExp;
TextView motExp;
private TextView privateHireExp;
private CardView vehicleProfile;
private CardView insurance;
private CardView mot;
private CardView logbook;
private CardView privateHireCar;
private DatabaseReference reference;
private WholeDriverObject wholeDriverObject;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
reference = mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_vehicle_overall, container, false);
vehicleProfile = view.findViewById(R.id.vehicle_prof);
insurance = view.findViewById(R.id.insurance);
mot = view.findViewById(R.id.mot);
logbook = view.findViewById(R.id.logbook);
privateHireCar = view.findViewById(R.id.private_hire_vehicle_license);
vehicleApr = view.findViewById(R.id.approval_vehicle);
insuranceApr = view.findViewById(R.id.approval_insurance);
motApr = view.findViewById(R.id.approval_mot);
logbookApr = view.findViewById(R.id.approval_lb);
privateHireCarApr = view.findViewById(R.id.approval_ph_car);
insuranceExp = view.findViewById(R.id.ins_exp);
motExp = view.findViewById(R.id.mot_exp);
privateHireExp = view.findViewById(R.id.ph_car_exp);
insuranceExp.setVisibility(View.GONE);
motExp.setVisibility(View.GONE);
privateHireExp.setVisibility(View.GONE);
viewController.progress(View.VISIBLE);
reference.addListenerForSingleValueEvent(valueEventListener);
return view;
}
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
wholeDriverObject = dataSnapshot.getValue(WholeDriverObject.class);
if (wholeDriverObject.approvalsObject != null) {
ApprovalsObject approvalsObject = wholeDriverObject.getApprovalsObject();
vehicleApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getVehicle_details_approval()));
insuranceApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getInsurance_details_approval()));
motApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getMot_details_approval()));
logbookApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getLog_book_approval()));
privateHireCarApr.setImageResource(approvalsClass.setImageResource(approvalsObject.getPh_car_approval()));
}
if (wholeDriverObject.vehicle_profile != null){
if (wholeDriverObject.getVehicle_profile().insurance_details != null){
insuranceExp.setVisibility(View.VISIBLE);
insuranceExp.setText("Expiry: " + wholeDriverObject.getVehicle_profile().getInsurance_details().getExpiryDate());
}
if (wholeDriverObject.getVehicle_profile().mot_details != null){
motExp.setVisibility(View.VISIBLE);
motExp.setText("Expiry: " + wholeDriverObject.getVehicle_profile().getMot_details().getMotExpiry());
}
if (wholeDriverObject.getVehicle_profile().private_hire_vehicle != null){
privateHireExp.setVisibility(View.VISIBLE);
privateHireExp.setText("Expiry: " + wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject().getPhCarExpiry());
}
}
vehicleProfile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (wholeDriverObject.vehicle_profile == null){
executeFragment(new VehicleSetupFragment());
}else {
archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getVehicle_details()
,new VehicleSetupFragment());
}
}
});
insurance.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (wholeDriverObject.vehicle_profile == null){
executeFragment(new InsuranceFragment());
}else {
archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getInsurance_details()
,new InsuranceFragment());
}
}
});
mot.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (wholeDriverObject.vehicle_profile == null){
executeFragment(new MotFragment());
}else {
archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getMot_details()
,new MotFragment());
}
}
});
logbook.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (wholeDriverObject.vehicle_profile == null){
executeFragment(new logbookFragment());
}else {
archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getLog_book()
,new logbookFragment());
}
}
});
privateHireCar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (wholeDriverObject.vehicle_profile == null){
executeFragment(new PrivateHireVehicleFragment());
}else {
archiveClass.openDialogArchive(getContext(),wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject()
,new PrivateHireVehicleFragment());
}
}
});
viewController.progress(View.GONE);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
viewController.progress(View.GONE);
}
};
}

View File

@@ -1,223 +0,0 @@
package h_mal.appttude.com.driver.Driver;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import h_mal.appttude.com.driver.Global.DateDialog;
import h_mal.appttude.com.driver.Objects.DriversLicenseObject;
import h_mal.appttude.com.driver.Objects.InsuranceObject;
import h_mal.appttude.com.driver.Objects.LogbookObject;
import h_mal.appttude.com.driver.Objects.MotObject;
import h_mal.appttude.com.driver.Objects.VehicleProfileObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_DETAILS_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.archiveClass;
import static h_mal.appttude.com.driver.MainActivity.auth;
import static h_mal.appttude.com.driver.MainActivity.fragmentManager;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.viewController;
public class VehicleSetupFragment extends Fragment {
private String TAG = this.getClass().getSimpleName();
EditText reg;
EditText make;
EditText model;
EditText color;
EditText keeperName;
EditText address;
EditText postcode;
EditText startDate;
CheckBox seized;
Button Submit;
DatabaseReference ref;
VehicleProfileObject vehicleProfileObject;
Boolean uploadNew;
String UID;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uploadNew = false;
if (getArguments() != null){
Log.i(TAG, "onCreate: args = args exist");
if (getArguments().containsKey("user_id")){
UID = getArguments().getString("user_id");
}else {
UID = auth.getCurrentUser().getUid();
}
if (getArguments().containsKey(UPLOAD_NEW)){
uploadNew = true;
}
}else{
UID = auth.getCurrentUser().getUid();
}
ref = mDatabase.child(USER_FIREBASE).child(UID).child(VEHICLE_FIREBASE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_vehicle_setup, container, false);
reg = view.findViewById(R.id.reg);
make = view.findViewById(R.id.make);
model = view.findViewById(R.id.model);
color = view.findViewById(R.id.colour);
keeperName = view.findViewById(R.id.keeper_name);
address = view.findViewById(R.id.address);
postcode = view.findViewById(R.id.postcode);
startDate = view.findViewById(R.id.start_date);
seized = view.findViewById(R.id.seized);
Submit = view.findViewById(R.id.submit_vehicle);
startDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DateDialog dateDialog = new DateDialog(getContext());
dateDialog.init(startDate);
}
});
viewController.progress(View.VISIBLE);
ref.addListenerForSingleValueEvent(valueEventListener);
Submit.setOnClickListener(submitOnClickListener);
return view;
}
ValueEventListener valueEventListener = new ValueEventListener(){
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
viewController.progress(View.GONE);
try{
vehicleProfileObject = dataSnapshot.child(VEHICLE_DETAILS_FIREBASE).getValue(VehicleProfileObject.class);
}catch (Exception e){
Log.e(TAG, "onDataChange: ", e);
}finally {
if (vehicleProfileObject != null){
if(!uploadNew) {
reg.setText(vehicleProfileObject.getReg());
make.setText(vehicleProfileObject.getMake());
model.setText(vehicleProfileObject.getModel());
color.setText(vehicleProfileObject.getColour());
keeperName.setText(vehicleProfileObject.getKeeperName());
address.setText(vehicleProfileObject.getKeeperAddress());
postcode.setText(vehicleProfileObject.getKeeperPostCode());
startDate.setText(vehicleProfileObject.getStartDate());
seized.setChecked(vehicleProfileObject.isSeized());
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
viewController.progress(View.GONE);
}
};
View.OnClickListener submitOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
String regString = reg.getText().toString().trim();
String makeString = make.getText().toString().trim();
String modelString = model.getText().toString().trim();
String colourString = color.getText().toString().trim();
String keeperNameStrin = keeperName.getText().toString().trim();
String addressString = address.getText().toString().trim();
String postcodeString = postcode.getText().toString().trim();
String driverForename = startDate.getText().toString().trim();
if (!TextUtils.isEmpty(regString)
&&!TextUtils.isEmpty(makeString)
&&!TextUtils.isEmpty(modelString)
&&!TextUtils.isEmpty(colourString)
&&!TextUtils.isEmpty(keeperNameStrin)
&&!TextUtils.isEmpty(addressString)
&&!TextUtils.isEmpty(postcodeString)
&&!TextUtils.isEmpty(driverForename)) {
if (uploadNew){
archiveClass.archiveRecord(UID,VEHICLE_DETAILS_FIREBASE,vehicleProfileObject);
}
VehicleProfileObject vehicleProfileObject = new VehicleProfileObject(
regString ,makeString ,modelString ,colourString ,keeperNameStrin ,addressString ,postcodeString ,driverForename,
seized.isChecked()
);
viewController.progress(View.VISIBLE);
ref.child(VEHICLE_DETAILS_FIREBASE).setValue(vehicleProfileObject).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
approvalsClass.setStatusCode(UID,VEHICLE_DETAILS_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING);
approvalsClass.setStatusCode(UID,MOT_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING);
approvalsClass.setStatusCode(UID,INSURANCE_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING);
approvalsClass.setStatusCode(UID,LOG_BOOK_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING);
fragmentManager.popBackStack();
}else{
Toast.makeText(getContext(), "Upload Unsuccessful", Toast.LENGTH_SHORT).show();
}
viewController.progress(View.GONE);
}
});
}else {
if (TextUtils.isEmpty(regString)){reg.setError("Field required");}
if (TextUtils.isEmpty(makeString)){make.setError("Field required");}
if (TextUtils.isEmpty(modelString)){model.setError("Field required");}
if (TextUtils.isEmpty(colourString)){color.setError("Field required");}
if (TextUtils.isEmpty(keeperNameStrin)){keeperName.setError("Field required");}
if (TextUtils.isEmpty(addressString)){address.setError("Field required");}
if (TextUtils.isEmpty(postcodeString)){postcode.setError("Field required");}
if (TextUtils.isEmpty(driverForename)){startDate.setError("Field required");}
}
}
};
}

View File

@@ -1,53 +0,0 @@
package h_mal.appttude.com.driver.Driver;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.widget.CardView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import h_mal.appttude.com.driver.Global.ExecuteFragment;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment;
public class homeDriverFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_home, container, false);
Button button = view.findViewById(R.id.driver);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
executeFragment(new DriverOverallFragment());
}
});
CardView second= view.findViewById(R.id.car);
second.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
executeFragment(new VehicleOverallFragment());
}
});
return view;
}
}

View File

@@ -1,255 +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.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import com.squareup.picasso.Picasso;
import h_mal.appttude.com.driver.Global.FirebaseClass;
import h_mal.appttude.com.driver.Global.ImageSelectorDialog;
import h_mal.appttude.com.driver.Global.ImageSelectorResults;
import h_mal.appttude.com.driver.Objects.LogbookObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_FIREBASE;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.archiveClass;
import static h_mal.appttude.com.driver.MainActivity.auth;
import static h_mal.appttude.com.driver.MainActivity.fragmentManager;
import static h_mal.appttude.com.driver.MainActivity.getDateStamp;
import static h_mal.appttude.com.driver.MainActivity.loadImage;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.viewController;
public class logbookFragment extends Fragment {
private String TAG = this.getClass().getSimpleName();
DatabaseReference reference;
TextView uploadlb;
ImageView lbImage;
ProgressBar progressBar;
EditText v5cNumber;
public Uri filePath;
public Uri picUri;
String v5cString;
LogbookObject logbookObject;
Boolean uploadNew;
String UID;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uploadNew = false;
if (getArguments() != null){
Log.i(TAG, "onCreate: args = args exist");
if (getArguments().containsKey("user_id")){
UID = getArguments().getString("user_id");
}else {
UID = auth.getCurrentUser().getUid();
}
if (getArguments().containsKey(UPLOAD_NEW)){
uploadNew = true;
}
}else{
UID = auth.getCurrentUser().getUid();
}
reference = mDatabase.child(USER_FIREBASE).child(UID).child(VEHICLE_FIREBASE).child(LOG_BOOK_FIREBASE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_logbook, container, false);
uploadlb = view.findViewById(R.id.upload_lb);
lbImage = view.findViewById(R.id.log_book_img);
progressBar = view.findViewById(R.id.pb_lb);
v5cNumber = view.findViewById(R.id.v5c_no);
Button submit = view.findViewById(R.id.submit_lb);
viewController.progress(View.VISIBLE);
reference.addListenerForSingleValueEvent(valueEventListener);
uploadlb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ImageSelectorDialog imageSelectorDialog = new ImageSelectorDialog(getContext());
imageSelectorDialog.setImageName("logbook_pic"+getDateStamp());
imageSelectorDialog.show();
}
});
submit.setOnClickListener(submitOnClickListener);
return view;
}
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
viewController.progress(View.GONE);
try{
logbookObject = dataSnapshot.getValue(LogbookObject.class);
}catch (Exception e){
Log.e(TAG, "onDataChange: ", e);
}finally {
if (logbookObject != null){
picUri = Uri.parse(logbookObject.getPhotoString());
v5cString = logbookObject.getV5cnumber();
if(!uploadNew) {
v5cNumber.setText(v5cString);
Picasso.get()
.load(picUri)
.into(loadImage(progressBar, lbImage));
}
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
viewController.progress(View.GONE);
}
};
View.OnClickListener submitOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
v5cString = v5cNumber.getText().toString().trim();
if (!TextUtils.isEmpty(v5cString)){
viewController.progress(View.VISIBLE);
if (filePath == null && picUri == null){
Toast.makeText(getContext(), "No Driver image", Toast.LENGTH_SHORT).show();
viewController.progress(View.GONE);
}else {
if (filePath != null){
Log.i(TAG, "onClick: new Image uploaded");
new FirebaseClass(getContext(),filePath,new FirebaseClass.Response(){
@Override
public void processFinish(Uri output) {
Log.i(TAG, "processFinish: ");
if (output != null){
picUri = output;
publishObject();
}else {
Toast.makeText(getContext(), R.string.unsuccessful, Toast.LENGTH_SHORT).show();
viewController.progress(View.GONE);
}
}
}).uploadImage(LOG_BOOK_FIREBASE,LOG_BOOK_FIREBASE + getDateStamp());
}else{
Log.i(TAG, "onClick: pushing with same image");
publishObject();
}
}
}else {
if (TextUtils.isEmpty(v5cString)){
v5cNumber.setError("Field required");
}
if (picUri == null){
Toast.makeText(getContext(), getString(R.string.image_required), Toast.LENGTH_SHORT).show();
}
}
}
};
private void publishObject(){
if (uploadNew){
archiveClass.archiveRecord(UID,LOG_BOOK_FIREBASE,logbookObject);
}
LogbookObject logbookObjectNew = new LogbookObject(picUri.toString(), v5cString);
reference.setValue(logbookObjectNew).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
approvalsClass.setStatusCode(UID,LOG_BOOK_FIREBASE + APPROVAL_CONSTANT,APPROVAL_PENDING);
fragmentManager.popBackStack();
}else{
Toast.makeText(getContext(), "Upload Unsuccessful", Toast.LENGTH_SHORT).show();
}
viewController.progress(View.VISIBLE);
}
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == MY_CAMERA_PERMISSION_CODE) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getContext(), "camera permission granted", Toast.LENGTH_LONG).show();
Intent cameraIntent = new
Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
} else {
Toast.makeText(getContext(), "camera permission denied", Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
new ImageSelectorResults().Results(getActivity(),requestCode, resultCode, data,
filePath,lbImage,new ImageSelectorResults.FilepathResponse() {
@Override
public void processFinish(Uri output) {
filePath = output;
}
});
}
}

View File

@@ -1,123 +0,0 @@
package h_mal.appttude.com.driver.Global;
import android.support.annotation.NonNull;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import h_mal.appttude.com.driver.Objects.ApprovalsObject;
import h_mal.appttude.com.driver.Objects.WholeDriverObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_DENIED;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVED;
import static h_mal.appttude.com.driver.Global.FirebaseClass.NO_DATE_PRESENT;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_APPROVALS;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.printObjectAsJson;
public class ApprovalsClass {
public ApprovalsClass() {
}
public static int mode(int[] array) {
printObjectAsJson("modeArrays",array);
int mode = array[0];
int maxCount = 0;
if (matchedArray(array,3)){
return 3;
}else if (matchedArray(array,0)){
return 0;
}else {
for (int i = 0; i < array.length; i++) {
int value = array[i];
int count = 1;
for (int j = 0; j < array.length; j++) {
if (array[j] == value) count++;
if (count > maxCount) {
mode = value;
maxCount = count;
}
}
}
if (mode == 3){
return 1;
}
}
return mode;
}
private static boolean matchedArray (int [] array, int match){
for (int i : array){
if (i != match){
return false;
}
}
return true;
}
public int getOverApprovalStatusCode(WholeDriverObject wholeDriverObject){
if (wholeDriverObject.approvalsObject != null){
ApprovalsObject approvalsObject = wholeDriverObject.getApprovalsObject();
int[] ints = new int[]{approvalsObject.getDriver_details_approval(),
approvalsObject.getDriver_license_approval(),
approvalsObject.getPrivate_hire_approval(),
approvalsObject.getVehicle_details_approval(),
approvalsObject.getInsurance_details_approval(),
approvalsObject.getMot_details_approval(),
approvalsObject.getLog_book_approval(),
approvalsObject.getPh_car_approval()};
return setImageResource(mode(ints));
}
return setImageResource(NO_DATE_PRESENT);
}
public void setStatusCode(String userId,String approvalNameString,int status){
if (!approvalNameString.equals("")) {
mDatabase.child(USER_FIREBASE).child(userId).child(USER_APPROVALS).child(approvalNameString)
.setValue(status).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
} else {
}
}
});
}
}
public int setImageResource(int statusCode){
int imageResource;
switch (statusCode){
case APPROVAL_PENDING:
imageResource = R.drawable.pending;
break;
case APPROVAL_DENIED:
imageResource = R.drawable.denied;
break;
case APPROVED:
imageResource = R.drawable.approved;
break;
default:
imageResource = R.drawable.zero;
break;
}
return imageResource;
}
}

View File

@@ -0,0 +1,87 @@
package h_mal.appttude.com.driver.Global
import h_mal.appttude.com.driver.Objects.ApprovalsObject
import h_mal.appttude.com.driver.Objects.WholeDriverObject
import h_mal.appttude.com.driver.R
class ApprovalsClass {
fun getOverApprovalStatusCode(wholeDriverObject: WholeDriverObject?): Int {
if (wholeDriverObject!!.approvalsObject != null) {
val approvalsObject: ApprovalsObject = wholeDriverObject!!.approvalsObject!!
val ints: IntArray = intArrayOf(
approvalsObject.driver_details_approval,
approvalsObject.driver_license_approval,
approvalsObject.private_hire_approval,
approvalsObject.vehicle_details_approval,
approvalsObject.insurance_details_approval,
approvalsObject.mot_details_approval,
approvalsObject.log_book_approval,
approvalsObject.ph_car_approval
)
return setImageResource(mode(ints))
}
return setImageResource(FirebaseClass.NO_DATE_PRESENT)
}
fun setStatusCode(userId: String?, approvalNameString: String, status: Int) {
// if (!(approvalNameString == "")) {
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE)
// .child((userId)!!).child(FirebaseClass.USER_APPROVALS)
// .child(approvalNameString)
// .setValue(status).addOnCompleteListener { task ->
// if (task.isSuccessful) {
// } else {
// }
// }
// }
}
fun setImageResource(statusCode: Int): Int {
val imageResource: Int
when (statusCode) {
FirebaseClass.APPROVAL_PENDING -> imageResource = R.drawable.pending
FirebaseClass.APPROVAL_DENIED -> imageResource = R.drawable.denied
FirebaseClass.APPROVED -> imageResource = R.drawable.approved
else -> imageResource = R.drawable.zero
}
return imageResource
}
companion object {
fun mode(array: IntArray): Int {
var mode: Int = array.get(0)
var maxCount: Int = 0
if (matchedArray(array, 3)) {
return 3
} else if (matchedArray(array, 0)) {
return 0
} else {
for (i in array.indices) {
val value: Int = array.get(i)
var count: Int = 1
for (j in array.indices) {
if (array.get(j) == value) count++
if (count > maxCount) {
mode = value
maxCount = count
}
}
}
if (mode == 3) {
return 1
}
}
return mode
}
private fun matchedArray(array: IntArray, match: Int): Boolean {
for (i: Int in array) {
if (i != match) {
return false
}
}
return true
}
}
}

View File

@@ -1,99 +0,0 @@
package h_mal.appttude.com.driver.Global;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.util.Log;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DatabaseReference;
import java.util.UUID;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.UPLOAD_NEW;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment;
import static h_mal.appttude.com.driver.Global.FirebaseClass.ARCHIVE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.MainActivity.getDateTimeStamp;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
public class ArchiveClass {
private static final String TAG = "ArchiveClass";
public ArchiveClass() {
}
public void archiveRecord(String UID, String item, Object object) {
final DatabaseReference toPath = mDatabase.child(USER_FIREBASE).child(UID)
.child(ARCHIVE_FIREBASE).child(item);
toPath.child(getDateTimeStamp()).setValue(object).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Log.i(TAG, "onComplete: archive successful");
}else {
Log.i(TAG, "onComplete: archive unsuccessful");
}
}
});
}
public void openDialogArchive(Context context,Object object, final Fragment fragment){
if (object == null){
executeFragment(fragment);
}else {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Do you want to View/Edit or Upload new?")
.setPositiveButton("View/Edit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
executeFragment(fragment);
}
})
.setNegativeButton("Upload New", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Bundle bundle = new Bundle();
bundle.putString(UPLOAD_NEW,"Yes");
fragment.setArguments(bundle);
executeFragment(fragment);
}
})
.create().show();
}
}
public void openDialogArchive(Context context,Object object, String user,final Fragment fragment){
final Bundle bundle = new Bundle();
bundle.putString("user_id",user);
fragment.setArguments(bundle);
if (object == null){
executeFragment(fragment);
}else {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Do you want to View/Edit or Upload new?")
.setPositiveButton("View/Edit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
executeFragment(fragment);
}
})
.setNegativeButton("Upload New", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
bundle.putString(UPLOAD_NEW,"Yes");
executeFragment(fragment);
}
})
.create().show();
}
}
}

View File

@@ -0,0 +1,70 @@
package h_mal.appttude.com.driver.Global
import android.app.AlertDialog
import android.content.Context
import android.os.Bundle
import androidx.fragment.app.Fragment
import h_mal.appttude.com.driver.utils.UPLOAD_NEW
class ArchiveClass {
fun archiveRecord(UID: String?, item: String?, `object`: Any?) {
// val toPath: DatabaseReference =
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
// (UID)!!
// )
// .child(FirebaseClass.ARCHIVE_FIREBASE).child((item)!!)
// toPath.child(MainActivity.dateTimeStamp).setValue(`object`)
// .addOnCompleteListener { task ->
// if (task.isSuccessful) {
// Log.i(TAG, "onComplete: archive successful")
// } else {
// Log.i(TAG, "onComplete: archive unsuccessful")
// }
// }
}
fun openDialogArchive(context: Context?, `object`: Any?, fragment: Fragment) {
if (`object` == null) {
// executeFragment(fragment)
} else {
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
builder.setMessage("Do you want to View/Edit or Upload new?")
.setPositiveButton("View/Edit"
) { _, _ ->
// executeFragment(fragment)
}
.setNegativeButton("Upload New"
) { _, _ ->
val bundle = Bundle()
bundle.putString(UPLOAD_NEW, "Yes")
fragment.arguments = bundle
// executeFragment(fragment)
}
.create().show()
}
}
fun openDialogArchive(context: Context?, `object`: Any?, user: String?, fragment: Fragment?) {
val bundle: Bundle = Bundle()
bundle.putString("user_id", user)
fragment!!.arguments = bundle
if (`object` == null) {
// executeFragment(fragment)
} else {
val builder: AlertDialog.Builder = AlertDialog.Builder(context)
builder.setMessage("Do you want to View/Edit or Upload new?")
.setPositiveButton("View/Edit"
) { _, _ ->
// executeFragment(fragment)
}
.setNegativeButton("Upload New"
) { _, _ ->
bundle.putString(UPLOAD_NEW, "Yes")
// executeFragment(fragment)
}
.create().show()
}
}
}

View File

@@ -1,127 +0,0 @@
package h_mal.appttude.com.driver.Global;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.RequiresApi;
import android.text.TextUtils;
import android.util.Log;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import h_mal.appttude.com.driver.R;
public class DateDialog extends DatePickerDialog {
int mYear;
int mMonth;
int mDay;
EditText editText;
@RequiresApi(api = Build.VERSION_CODES.N)
public DateDialog(@NonNull Context context) {
super(context);
}
@RequiresApi(api = Build.VERSION_CODES.N)
public DateDialog(@NonNull Context context, int themeResId) {
super(context, themeResId);
}
public DateDialog(@NonNull Context context,
@Nullable DatePickerDialog.OnDateSetListener listener,
int year, int month, int dayOfMonth) {
super(context, listener, year, month, dayOfMonth);
}
public DateDialog(@NonNull Context context, int themeResId, @Nullable DatePickerDialog.OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth) {
super(context, themeResId, listener, year, monthOfYear, dayOfMonth);
}
@Override
public void setTitle(CharSequence title) {
super.setTitle(title);
}
@Override
public void setOnDateSetListener(@Nullable DatePickerDialog.OnDateSetListener listener) {
super.setOnDateSetListener(dateSetListener);
}
public void init(EditText editText){
this.editText = editText;
String dateString = editText.getText().toString();
Date javaDate = null;
if(TextUtils.isEmpty(dateString)){
Calendar calendar = Calendar.getInstance();
mYear = calendar.get(Calendar.YEAR);
mMonth = calendar.get(Calendar.MONTH);
mDay = calendar.get(Calendar.DAY_OF_MONTH);
}else {
try {
SimpleDateFormat sdfrmt = new SimpleDateFormat("dd/MM/yyyy");
sdfrmt.setLenient(false);
javaDate = sdfrmt.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}finally {
if (javaDate != null) {
mYear = Integer.parseInt(dateString.substring(6, dateString.length()));
mMonth = Integer.parseInt(dateString.substring(3, 5))-1;
mDay = Integer.parseInt(dateString.substring(0, 2));
}else {
Calendar calendar = Calendar.getInstance();
mYear = calendar.get(Calendar.YEAR);
mMonth = calendar.get(Calendar.MONTH);
mDay = calendar.get(Calendar.DAY_OF_MONTH);
}
}
}
Log.i(this.getClass().getSimpleName(), "init: year =" + mYear +
"month = " + mMonth +
"day = " + mDay);
updateDate(mYear,mMonth,mDay);
setOnDateSetListener(null);
this.setTitle(getContext().getString(R.string.set_date));
this.show();
}
DatePickerDialog.OnDateSetListener dateSetListener = new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
mYear = year;
mMonth = month + 1;
mDay = dayOfMonth;
editText.setText(String.format("%02d", mDay) + "/" +
String.format("%02d", (mMonth)) +"/" +
mYear
);
}
};
}

View File

@@ -0,0 +1,55 @@
package h_mal.appttude.com.driver.Global
import android.app.AlertDialog
import android.app.DatePickerDialog
import android.app.DatePickerDialog.OnDateSetListener
import android.content.Context
import android.icu.util.Calendar
import android.os.Build
import android.widget.EditText
import androidx.annotation.RequiresApi
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.utils.DateUtils
private const val DATE_FORMAT = "dd/MM/yyyy"
@RequiresApi(api = Build.VERSION_CODES.N)
class DateDialog(
private val editText: EditText
) : DatePickerDialog(editText.context, AlertDialog.THEME_HOLO_LIGHT) {
var dateSetListener: OnDateSetListener =
OnDateSetListener { _, year, month, dayOfMonth ->
val cal = Calendar.getInstance()
cal.set(year, month + 1, dayOfMonth)
editText.setText(DateUtils.parseCalenderIntoDateString(cal, DATE_FORMAT))
}
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()
}
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)
}
}

View File

@@ -1,65 +0,0 @@
package h_mal.appttude.com.driver.Global;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.MainActivity.fragmentManager;
public class ExecuteFragment {
public static final String UPLOAD_NEW = "upload_new";
public static void executeFragment(Fragment fragment, Bundle bundle) {
executeFragmentMethod(fragment,bundle);
}
public static void executeFragment(Fragment fragment) {
executeFragmentMethod(fragment);
}
public static void executeFragment(Fragment fragment, String userId) {
executeFragmentMethod(fragment,userId);
}
public static void executeFragment(Fragment fragment, String userId, String archive) {
executeFragmentMethod(fragment,userId,archive);
}
private static void executeFragmentMethod(Fragment f){
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit();
}
private static void executeFragmentMethod(Fragment f,String user_id){
Bundle bundle = new Bundle();
bundle.putString("user_id",user_id);
f.setArguments(bundle);
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit();
}
private static void executeFragmentMethod(Fragment f,String user_id,String archive){
Bundle bundle = new Bundle();
bundle.putString("user_id",user_id);
bundle.putString("archive",archive);
f.setArguments(bundle);
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit();
}
private static void executeFragmentMethod(Fragment f, Bundle b){
if (b != null){
f.setArguments(b);
}
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container,f).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).addToBackStack(f.getClass().getSimpleName()).commit();
}
}

View File

@@ -1,111 +0,0 @@
package h_mal.appttude.com.driver.Global;
import android.app.ProgressDialog;
import android.content.Context;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.util.Log;
import android.widget.Toast;
import com.google.android.gms.tasks.Continuation;
import com.google.android.gms.tasks.OnCompleteListener;
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 static h_mal.appttude.com.driver.MainActivity.auth;
import static h_mal.appttude.com.driver.MainActivity.storageReference;
public class FirebaseClass {
public static final String USER_FIREBASE = "user";
public static final String DRIVER_FIREBASE = "driver_profile";
public static final String DRIVER_DETAILS_FIREBASE = "driver_details";
public static final String PRIVATE_HIRE_FIREBASE = "private_hire";
public static final String DRIVERS_LICENSE_FIREBASE = "driver_license";
public static final String USER_APPROVALS = "approvalsObject";
public static final String APPROVAL_CONSTANT = "_approval";
public static final String ARCHIVE_FIREBASE = "archive";
public static final String DRIVER_NUMBER = "driver_number";
public static final String VEHICLE_FIREBASE = "vehicle_profile";
public static final String MOT_FIREBASE = "mot_details";
public static final String VEHICLE_DETAILS_FIREBASE = "vehicle_details";
public static final String INSURANCE_FIREBASE = "insurance_details";
public static final String LOG_BOOK_FIREBASE = "log_book";
public static final String PRIVATE_HIRE_VEHICLE_LICENSE = "private_hire_vehicle";
public static final int NO_DATE_PRESENT = 0;
public static final int APPROVAL_PENDING = 1;
public static final int APPROVAL_DENIED = 2;
public static final int APPROVED = 3;
Context context;
Uri filePath;
public interface Response {
void processFinish(Uri output);
}
public Response delegate;
public FirebaseClass(Context context, Uri filePath, Response delegate) {
this.context = context;
this.filePath = filePath;
this.delegate = delegate;
}
public void uploadImage(String path, String name) {
if(filePath != null) {
final ProgressDialog progressDialog = new ProgressDialog(context);
progressDialog.setTitle("Uploading...");
progressDialog.show();
final StorageReference ref = storageReference.child("images/"+ auth.getCurrentUser().getUid() + "/" + path
+ "/" + name);
UploadTask uploadTask = ref.putFile(filePath);
uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = (100.0*taskSnapshot.getBytesTransferred()/taskSnapshot
.getTotalByteCount());
progressDialog.setMessage("Uploaded "+(int)progress+"%");
}
}).continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
@Override
public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
if (!task.isSuccessful()) {
throw task.getException();
}
// Continue with the task to get the download URL
return ref.getDownloadUrl();
}
}).addOnCompleteListener(new OnCompleteListener<Uri>() {
@Override
public void onComplete(@NonNull Task<Uri> task) {
if (task.isSuccessful()) {
delegate.processFinish(task.getResult());
progressDialog.dismiss();
Toast.makeText(context, "Uploaded Successfully", Toast.LENGTH_SHORT).show();
Log.i(context.getClass().getSimpleName(), "onComplete: uploaded Successful uri: " + task.getResult());
} else {
delegate.processFinish(null);
progressDialog.dismiss();
Toast.makeText(context, "Failed to upload", Toast.LENGTH_SHORT).show();
Log.i(context.getClass().getSimpleName(), "onComplete: failed to get url");
}
}
});
}
}
}

View File

@@ -0,0 +1,71 @@
package h_mal.appttude.com.driver.Global
import android.content.Context
import android.net.Uri
class FirebaseClass constructor(var context: Context?, var filePath: Uri?, var delegate: Response) {
open interface Response {
fun processFinish(output: Uri?)
}
fun uploadImage(path: String, name: String) {
// if (filePath != null) {
// val progressDialog: ProgressDialog = ProgressDialog(context)
// progressDialog.setTitle("Uploading...")
// progressDialog.show()
// val ref: StorageReference = MainActivity.storageReference!!.child(
// ("images/" + MainActivity.auth!!.currentUser!!
// .uid + "/" + path
// + "/" + name)
// )
// val uploadTask: UploadTask = ref.putFile(filePath!!)
// uploadTask.addOnProgressListener { taskSnapshot ->
// val progress: Double =
// (100.0 * taskSnapshot.bytesTransferred / taskSnapshot
// .totalByteCount)
// progressDialog.setMessage("Uploaded " + progress.toInt() + "%")
// }.continueWithTask { task ->
// if (!task.isSuccessful) {
// throw (task.exception)!!
// }
//
// // Continue with the task to get the download URL
// ref.downloadUrl
// }.addOnCompleteListener { task ->
// if (task.isSuccessful) {
// delegate.processFinish(task.result)
// progressDialog.dismiss()
// context?.displayToast("Uploaded Successfully")
// println("onComplete: uploaded Successful uri: " + task.result)
// } else {
// delegate.processFinish(null)
// progressDialog.dismiss()
// context?.displayToast("Uploaded Successfully")
// }
// }
// }
}
companion object {
val USER_FIREBASE: String = "user"
val DRIVER_FIREBASE: String = "driver_profile"
val DRIVER_DETAILS_FIREBASE: String = "driver_details"
val PRIVATE_HIRE_FIREBASE: String = "private_hire"
val DRIVERS_LICENSE_FIREBASE: String = "driver_license"
val DRIVER_STATUS: String = "driver_status"
val USER_APPROVALS: String = "approvalsObject"
val APPROVAL_CONSTANT: String = "_approval"
val ARCHIVE_FIREBASE: String = "archive"
val DRIVER_NUMBER: String = "driver_number"
val VEHICLE_FIREBASE: String = "vehicle_profile"
val MOT_FIREBASE: String = "mot_details"
val VEHICLE_DETAILS_FIREBASE: String = "vehicle_details"
val INSURANCE_FIREBASE: String = "insurance_details"
val LOG_BOOK_FIREBASE: String = "log_book"
val PRIVATE_HIRE_VEHICLE_LICENSE: String = "private_hire_vehicle"
val NO_DATE_PRESENT: Int = 0
val APPROVAL_PENDING: Int = 1
val APPROVAL_DENIED: Int = 2
val APPROVED: Int = 3
}
}

View File

@@ -1,154 +0,0 @@
package h_mal.appttude.com.driver.Global;
import android.Manifest;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import h_mal.appttude.com.driver.R;
import static android.support.v4.app.ActivityCompat.getPermissionCompatDelegate;
import static android.support.v4.app.ActivityCompat.requestPermissions;
import static android.support.v4.app.ActivityCompat.startActivityForResult;
import static android.support.v4.content.PermissionChecker.checkSelfPermission;
import static h_mal.appttude.com.driver.MainActivity.fragmentManager;
import static h_mal.appttude.com.driver.MainActivity.verifyStoragePermissions;
public class ImageSelectorDialog extends Dialog{
private String TAG = this.getClass().getSimpleName();
public static final int PICK_IMAGE_REQUEST = 71;
public static final int CAMERA_REQUEST = 1888;
public static final int MY_CAMERA_PERMISSION_CODE = 100;
public static final int STORAGE_PERMISSION_CODE = 101;
private String saveFileName;
public static Uri photoURI;
Fragment fragment;
public ImageSelectorDialog(@NonNull Context context) {
super(context);
this.saveFileName = "default_name";
}
public ImageSelectorDialog(@NonNull Context context, int themeResId) {
super(context, themeResId);
this.saveFileName = "default_name";
}
protected ImageSelectorDialog(@NonNull Context context, boolean cancelable, @Nullable DialogInterface.OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
this.saveFileName = "default_name";
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.address_dialog);
//check if we have we have storage rights
final int permissionPic = ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE);
final int permissionCam = ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.CAMERA);
fragment = fragmentManager.getFragments().get(0);
Button upload = findViewById(R.id.upload);
Button takePic = findViewById(R.id.take_pic);
upload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (permissionPic == PackageManager.PERMISSION_GRANTED){
chooseImage();
}else {
Toast.makeText(getContext(), "Storage permissions required", Toast.LENGTH_SHORT).show();
requestPermissions(fragment.getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
STORAGE_PERMISSION_CODE);
}
dismiss();
}
});
takePic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (permissionCam == PackageManager.PERMISSION_GRANTED){
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
File file = createFile();
photoURI = Uri.fromFile(file);
Uri imageUri = FileProvider.getUriForFile(
getContext(),
"h_mal.appttude.com.driver",
file);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
fragment.startActivityForResult(cameraIntent, CAMERA_REQUEST);
}else {
Toast.makeText(getContext(), "Camera Permissions required", Toast.LENGTH_SHORT).show();
requestPermissions(fragment.getActivity(), new String[]{Manifest.permission.CAMERA},
MY_CAMERA_PERMISSION_CODE);
}
dismiss();
}
});
}
public void setImageName(String saveFileName){
this.saveFileName = saveFileName;
}
private File createFile(){
//create directory
File root = getContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES);
//create file
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmm");
String currentDateandTime = sdf.format(new Date());
String fname = saveFileName+ currentDateandTime;
File image = new File(root,fname);
return image;
}
private void chooseImage() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
fragment.startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}
}

View File

@@ -0,0 +1,129 @@
package h_mal.appttude.com.driver.Global
import android.Manifest
import android.app.Dialog
import android.content.Context
import android.content.DialogInterface
import android.content.Intent
import android.content.pm.PackageManager
import android.icu.text.SimpleDateFormat
import android.net.Uri
import android.os.Bundle
import android.os.Environment
import android.provider.MediaStore
import android.widget.Button
import android.widget.Toast
import androidx.core.app.ActivityCompat
import androidx.core.content.FileProvider
import androidx.fragment.app.Fragment
import h_mal.appttude.com.driver.R
import java.io.File
import java.util.*
class ImageSelectorDialog : Dialog {
private val TAG: String = this.javaClass.simpleName
private var saveFileName: String
var fragment: Fragment? = null
constructor(context: Context) : super(context) {
saveFileName = "default_name"
}
constructor(context: Context, themeResId: Int) : super(context, themeResId) {
saveFileName = "default_name"
}
protected constructor(
context: Context,
cancelable: Boolean,
cancelListener: DialogInterface.OnCancelListener?
) : super(context, cancelable, cancelListener) {
saveFileName = "default_name"
}
override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
setContentView(R.layout.address_dialog)
//check if we have we have storage rights
val permissionPic: Int = ActivityCompat.checkSelfPermission(
context,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
val permissionCam: Int =
ActivityCompat.checkSelfPermission(context, Manifest.permission.CAMERA)
// fragment = MainActivity.mainFragmentManager.fragments[0]
val upload: Button = findViewById(R.id.upload)
val takePic: Button = findViewById(R.id.take_pic)
upload.setOnClickListener {
if (permissionPic == PackageManager.PERMISSION_GRANTED) {
chooseImage()
} else {
Toast.makeText(context, "Storage permissions required", Toast.LENGTH_SHORT)
.show()
ActivityCompat.requestPermissions(
(fragment!!.requireActivity()),
arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
STORAGE_PERMISSION_CODE
)
}
dismiss()
}
takePic.setOnClickListener {
if (permissionCam == PackageManager.PERMISSION_GRANTED) {
val cameraIntent: Intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
val file: File = createFile()
photoURI = Uri.fromFile(file)
val imageUri: Uri = FileProvider.getUriForFile(
context,
"h_mal.appttude.com.driver",
file
)
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
fragment!!.startActivityForResult(cameraIntent, CAMERA_REQUEST)
} else {
Toast.makeText(context, "Camera Permissions required", Toast.LENGTH_SHORT)
.show()
ActivityCompat.requestPermissions(
(fragment!!.requireActivity()), arrayOf(Manifest.permission.CAMERA),
MY_CAMERA_PERMISSION_CODE
)
}
dismiss()
}
}
fun setImageName(saveFileName: String) {
this.saveFileName = saveFileName
}
private fun createFile(): File {
//create directory
val root: File = context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
//create file
val sdf: SimpleDateFormat = SimpleDateFormat("yyyyMMdd_HHmm")
val currentDateandTime: String = sdf.format(Date())
val fname: String = saveFileName + currentDateandTime
val image: File = File(root, fname)
return image
}
private fun chooseImage() {
val intent: Intent = Intent()
intent.type = "image/*"
intent.action = Intent.ACTION_GET_CONTENT
fragment!!.startActivityForResult(
Intent.createChooser(intent, "Select Picture"),
PICK_IMAGE_REQUEST
)
}
companion object {
val PICK_IMAGE_REQUEST: Int = 71
val CAMERA_REQUEST: Int = 1888
val MY_CAMERA_PERMISSION_CODE: Int = 100
val STORAGE_PERMISSION_CODE: Int = 101
var photoURI: Uri? = null
}
}

View File

@@ -1,182 +0,0 @@
package h_mal.appttude.com.driver.Global;
import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import static android.app.Activity.RESULT_OK;
import static android.os.Environment.DIRECTORY_PICTURES;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.PICK_IMAGE_REQUEST;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.photoURI;
import static h_mal.appttude.com.driver.MainActivity.getDateStamp;
public class ImageSelectorResults {
Activity activity;
public interface FilepathResponse {
void processFinish(Uri output);
}
// public FilepathResponse delegate;
public ImageSelectorResults() {
}
public void Results(Activity activity, int requestCode, int resultCode, Intent data, Uri filePath,
ImageView imageView,FilepathResponse delegate){
this.activity = activity;
if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
&& data != null && data.getData() != null )
{
filePath = data.getData();
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), filePath);
if (imageView.getVisibility() != View.VISIBLE) {
imageView.setVisibility(View.VISIBLE);
}
imageView.setImageBitmap(bitmap);
}
catch (IOException e)
{
e.printStackTrace();
}
finally {
if (bitmap != null){
delegate.processFinish(filePath);
Log.i(getClass().getSimpleName(), "Results: " + filePath);
}
}
}
if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
//check if we have we have storage rights
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(activity, "Storage permissions not granted", Toast.LENGTH_SHORT).show();
return;
}else {
try {
File f = Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES);
String fname = "driver"+ getDateStamp() + ".jpg";
File image = new File(f,fname);
FileOutputStream fileOutputStream = new FileOutputStream(image);
filePath = photoURI;
Bitmap bitmap = MediaStore.Images.Media
.getBitmap(activity.getContentResolver(), photoURI);
imageView.setImageBitmap(bitmap);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90,fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
galleryAddPic();
} catch (Exception e) {
e.printStackTrace();
}
}
delegate.processFinish(filePath);
Log.i(getClass().getSimpleName(), "Results: " + filePath);
}
}
public void Results(Activity activity, int requestCode, int resultCode, Intent data, Uri filePath,FilepathResponse delegate){
this.activity = activity;
if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK
&& data != null && data.getData() != null )
{
filePath = data.getData();
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), filePath);
}
catch (IOException e)
{
e.printStackTrace();
}
finally {
if (bitmap != null){
delegate.processFinish(filePath);
Log.i(getClass().getSimpleName(), "Results: " + filePath);
}
}
}
if (requestCode == CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
//check if we have we have storage rights
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(activity, "Storage permissions not granted", Toast.LENGTH_SHORT).show();
return;
}else {
try {
File f = Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES);
String fname = "driver"+ getDateStamp() + ".jpg";
File image = new File(f,fname);
FileOutputStream fileOutputStream = new FileOutputStream(image);
filePath = photoURI;
Bitmap bitmap = MediaStore.Images.Media
.getBitmap(activity.getContentResolver(), photoURI);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90,fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
galleryAddPic();
} catch (Exception e) {
e.printStackTrace();
}
}
delegate.processFinish(filePath);
Log.i(getClass().getSimpleName(), "Results: " + filePath);
}
}
private void galleryAddPic() {
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(photoURI.getPath());
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
activity.sendBroadcast(mediaScanIntent);
}
}

View File

@@ -0,0 +1,159 @@
package h_mal.appttude.com.driver.Global
import android.Manifest
import android.app.Activity
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.net.Uri
import android.os.Environment
import android.provider.MediaStore
import android.view.View
import android.widget.ImageView
import android.widget.Toast
import androidx.core.app.ActivityCompat
import h_mal.appttude.com.driver.utils.DateUtils.getDateStamp
import h_mal.appttude.com.driver.utils.DateUtils.getDateTimeStamp
import java.io.File
import java.io.FileOutputStream
import java.io.IOException
class ImageSelectorResults // public FilepathResponse delegate;
{
lateinit var activity: Activity
interface FilepathResponse {
fun processFinish(output: Uri?)
}
fun Results(
activity: Activity, requestCode: Int, resultCode: Int, data: Intent?, filePath: Uri?,
imageView: ImageView?, delegate: FilepathResponse
) {
var filePath: Uri? = filePath
this.activity = activity
if ((requestCode == ImageSelectorDialog.PICK_IMAGE_REQUEST) && (resultCode == Activity.RESULT_OK
) && (data != null) && (data.data != null)
) {
val uri = data.data
var bitmap: Bitmap? = null
try {
bitmap =
MediaStore.Images.Media.getBitmap(activity.contentResolver, uri)
if (imageView!!.visibility != View.VISIBLE) {
imageView.visibility = View.VISIBLE
}
imageView.setImageBitmap(bitmap)
} catch (e: IOException) {
e.printStackTrace()
} finally {
if (bitmap != null) {
delegate.processFinish(uri)
}
}
}
if (requestCode == ImageSelectorDialog.CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
//check if we have we have storage rights
val permission: Int = ActivityCompat.checkSelfPermission(
(activity)!!,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
if (permission != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(activity, "Storage permissions not granted", Toast.LENGTH_SHORT)
.show()
return
} else {
try {
val f: File =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
val fname: String = "driver" + getDateStamp() + ".jpg"
val image = File(f, fname)
val fileOutputStream = FileOutputStream(image)
filePath = ImageSelectorDialog.photoURI
val bitmap: Bitmap = MediaStore.Images.Media
.getBitmap(
activity.contentResolver,
ImageSelectorDialog.photoURI
)
imageView!!.setImageBitmap(bitmap)
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fileOutputStream)
fileOutputStream.flush()
fileOutputStream.close()
galleryAddPic()
} catch (e: Exception) {
e.printStackTrace()
}
}
delegate.processFinish(filePath)
}
}
fun Results(
activity: Activity,
requestCode: Int,
resultCode: Int,
data: Intent?,
filePath: Uri?,
delegate: FilepathResponse
) {
var filePath: Uri? = filePath
this.activity = activity
if ((requestCode == ImageSelectorDialog.PICK_IMAGE_REQUEST) && (resultCode == Activity.RESULT_OK
) && (data != null) && (data.data != null)
) {
filePath = data.data
var bitmap: Bitmap? = null
try {
bitmap =
MediaStore.Images.Media.getBitmap(activity.contentResolver, filePath)
} catch (e: IOException) {
e.printStackTrace()
} finally {
if (bitmap != null) {
delegate.processFinish(filePath)
}
}
}
if (requestCode == ImageSelectorDialog.CAMERA_REQUEST && resultCode == Activity.RESULT_OK) {
//check if we have we have storage rights
val permission: Int = ActivityCompat.checkSelfPermission(
(activity),
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
if (permission != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(activity, "Storage permissions not granted", Toast.LENGTH_SHORT)
.show()
return
} else {
try {
val f: File =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
val fname: String = "driver" + getDateTimeStamp() + ".jpg"
val image: File = File(f, fname)
val fileOutputStream: FileOutputStream = FileOutputStream(image)
filePath = ImageSelectorDialog.photoURI
val bitmap: Bitmap = MediaStore.Images.Media
.getBitmap(
activity.contentResolver,
ImageSelectorDialog.photoURI
)
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fileOutputStream)
fileOutputStream.flush()
fileOutputStream.close()
galleryAddPic()
} catch (e: Exception) {
e.printStackTrace()
}
}
delegate.processFinish(filePath)
}
}
private fun galleryAddPic() {
val mediaScanIntent: Intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
val f: File = File(ImageSelectorDialog.photoURI!!.path)
val contentUri: Uri = Uri.fromFile(f)
mediaScanIntent.data = contentUri
activity.sendBroadcast(mediaScanIntent)
}
}

View File

@@ -1,245 +0,0 @@
package h_mal.appttude.com.driver.Global;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.provider.ContactsContract;
import android.support.annotation.NonNull;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AlphaAnimation;
import android.widget.ImageView;
import android.widget.ProgressBar;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
import java.util.ArrayList;
import java.util.List;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.MainActivity.imageViewClass;
import static h_mal.appttude.com.driver.MainActivity.loadImage;
public class ImageSwiperClass{
private static final String TAG = "ImageSwiperClass";
private ImageView left;
private ImageView mainImage;
private ImageView right;
private List<String> imageStrings;
private Context context;
private SlidingImageViewAdapter adapter;
ViewPager viewPager;
public ImageView delete;
public ImageSwiperClass(Context context, View wholeView) {
this.context = context;
left = wholeView.findViewById(R.id.left);
right = wholeView.findViewById(R.id.right);
left.setOnClickListener(leftClick);
right.setOnClickListener(rightClick);
viewPager = wholeView.findViewById(R.id.view_pager);
delete = wholeView.findViewById(R.id.delete);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
AlphaAnimation animation1 = new AlphaAnimation(0.2f, 1.0f);
animation1.setDuration(200);
animation1.setFillAfter(true);
delete.startAnimation(animation1);
}
@Override
public void onPageSelected(final int i) {
Log.i(TAG, "onPageSelected: position = " + i);
setArrows();
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deleteDialog(i);
}
});
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
Log.i(TAG, "ImageSwiperClass: viewpager = " + viewPager.getId());
}
public List<String> getImageStrings() {
return imageStrings;
}
public void addPhotoString(String s){
if (imageStrings == null){
imageStrings = new ArrayList<>();
}
imageStrings.add(s);
adapter = new SlidingImageViewAdapter();
viewPager.setAdapter(adapter);
}
public void reinstantiateList(List<String> imageStrings){
this.imageStrings = imageStrings;
adapter = new SlidingImageViewAdapter();
viewPager.setAdapter(adapter);
setArrows();
}
public void hideDelete(){
delete.setVisibility(View.INVISIBLE);
Log.i(TAG, "hideDelete: hides deleete?");
}
private View.OnClickListener leftClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(viewPager.getCurrentItem() - 1);
setArrows();
}
};
private View.OnClickListener rightClick = new View.OnClickListener() {
@Override
public void onClick(View v) {
viewPager.setCurrentItem(viewPager.getCurrentItem() +1);
setArrows();
}
};
private void deleteDialog(final int position){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Are you sure you want to delete?")
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
imageStrings.remove(position);
viewPager.setAdapter(adapter);
// adapter.notifyDataSetChanged();
}
})
.setNegativeButton(android.R.string.cancel, null)
.create()
.show();
}
private void setArrows(){
if (imageStrings != null && imageStrings.size() > 0){
//left arrow
if (viewPager.getCurrentItem() > 0){
setAnimation(left,true);
}else{
setAnimation(left,false);
}
//right
if (viewPager.getCurrentItem() == imageStrings.size() -1){
setAnimation(right,false);
}else{
setAnimation(right,true);
}
}
if (imageStrings == null){
setAnimation(left,false);
setAnimation(right,false);
}
}
private void setAnimation(ImageView view,boolean up){
float start;
float finish;
if(up){
start = 0.2f;
finish = 1.0f;
}else {
start = 1.0f;
finish = 0.2f;
}
// if (view.getAlpha() != start){
AlphaAnimation animation1 = new AlphaAnimation(start, finish);
animation1.setDuration(500);
animation1.setFillAfter(true);
// view.startAnimation(animation1);
view.setAlpha(finish);
// }
}
class SlidingImageViewAdapter extends PagerAdapter{
@Override
public int getCount() {
if (imageStrings == null || imageStrings.size() < 1){
delete.setVisibility(View.GONE);
return 0;
}else {
delete.setVisibility(View.VISIBLE);
return imageStrings.size();
}
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position,Object object) {
if (object != null){
container.removeView((View) object);
}else {
container.removeViewAt(position);
}
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
return view.equals(o);
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, final int position) {
View pagerPic = LayoutInflater.from(context).inflate(R.layout.insurance_item,container,false);
setArrows();
if(imageStrings != null && imageStrings.size() >0){
mainImage = pagerPic.getRootView().findViewById(R.id.main_image);
final ProgressBar pb = pagerPic.findViewById(R.id.pb_ins);
Picasso.get().load(imageStrings.get(position)).into(loadImage(pb,mainImage));
}
container.addView(pagerPic, 0);
return pagerPic;
}
@Override
public void notifyDataSetChanged() {
super.notifyDataSetChanged();
}
}
}

View File

@@ -0,0 +1,159 @@
package h_mal.appttude.com.driver.Global
import android.content.Context
import android.content.ContextWrapper
import android.view.View
import android.widget.ImageView
import h_mal.appttude.com.driver.R
class ImageSwiperClass(
private val context: Context?,
wholeView: View
) : ContextWrapper(context) {
private var left: ImageView = wholeView.findViewById(R.id.left)
private var right: ImageView = wholeView.findViewById(R.id.right)
var list: List<Any>? = null
// fun addLocalString(uris: List<Uri>) {
// list = uris
// }
//
// fun addFirebaseStrings(uris: List<String>) {
// list = uris
// }
//
// private var adapter: SlidingImageViewAdapter? = null
// lateinit var viewPager: ViewPager
//
//
// fun reinstantiateList(imageStrings: MutableList<String?>?) {
// this.imageStrings = imageStrings
// adapter = SlidingImageViewAdapter()
// viewPager.adapter = adapter
// setArrows()
// }
//
// fun hideDelete() {
// delete.hide()
// }
//
// private val leftClick: View.OnClickListener = View.OnClickListener {
// viewPager.currentItem = viewPager.currentItem - 1
// setArrows()
// }
// private val rightClick: View.OnClickListener = View.OnClickListener {
// viewPager.currentItem = viewPager.currentItem + 1
// setArrows()
// }
//
// private fun deleteDialog(position: Int) {
// val builder: AlertDialog.Builder = AlertDialog.Builder(context)
// builder.setMessage("Are you sure you want to delete?")
// .setPositiveButton(
// android.R.string.ok
// ) { _, _ ->
// imageStrings!!.removeAt(position)
// viewPager.adapter = adapter
// // adapter.notifyDataSetChanged();
// }
// .setNegativeButton(android.R.string.cancel, null)
// .create()
// .show()
// }
//
// private fun setArrows() {
// with(list) {
// when (list) {
// isNullOrEmpty() -> { }
// isNotEmpty() -> { }
//
// }
// }
//
// if (list?.isNotEmpty()) {
// //left arrow
// if (viewPager.currentItem > 0) {
// setAnimation(left, true)
// } else {
// setAnimation(left, false)
// }
//
// //right
// if (viewPager.currentItem == imageStrings!!.size - 1) {
// setAnimation(right, false)
// } else {
// setAnimation(right, true)
// }
// }
// if (imageStrings == null) {
// setAnimation(left, false)
// setAnimation(right, false)
// }
// }
//
// private fun setAnimation(view: ImageView, up: Boolean) {
// val start: Float
// val finish: Float
// if (up) {
// start = 0.2f
// finish = 1.0f
// } else {
// start = 1.0f
// finish = 0.2f
// }
// val animation1 = AlphaAnimation(start, finish)
// animation1.duration = 500
// animation1.fillAfter = true
// view.alpha = finish
// }
//
// internal inner class SlidingImageViewAdapter : PagerAdapter() {
//
// override fun getCount(): Int = list?.size ?: 0
//
// override fun destroyItem(container: ViewGroup, position: Int, item: Any) {
// container.removeView(item as View?)
// }
//
// override fun isViewFromObject(view: View, o: Any): Boolean = view == o
//
// override fun instantiateItem(container: ViewGroup, position: Int): Any {
// val pagerPic: View =
// LayoutInflater.from(context).inflate(R.layout.insurance_item, container, false)
// setArrows()
// if (imageStrings != null && imageStrings!!.size > 0) {
// mainImage = pagerPic.rootView.findViewById(R.id.main_image)
// Picasso.get().load(imageStrings!!.get(position))
// .placeholder(R.drawable.choice_img)
// .into(MainActivity.loadImage(mainImage))
// }
// container.addView(pagerPic, 0)
// return pagerPic
// }
// }
//
//
// init {
// left.setOnClickListener(leftClick)
// right.setOnClickListener(rightClick)
// viewPager = wholeView.findViewById(R.id.view_pager)
// delete = wholeView.findViewById(R.id.delete)
// viewPager.addOnPageChangeListener(object : OnPageChangeListener {
// override fun onPageScrolled(i: Int, v: Float, i1: Int) {
// val animation1: AlphaAnimation = AlphaAnimation(0.2f, 1.0f)
// animation1.duration = 200
// animation1.fillAfter = true
// delete.startAnimation(animation1)
// }
//
// override fun onPageSelected(i: Int) {
// setArrows()
// delete.setOnClickListener { deleteDialog(i) }
// }
//
// override fun onPageScrollStateChanged(i: Int) {}
// })
// }
}

View File

@@ -1,121 +0,0 @@
package h_mal.appttude.com.driver.Global;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import com.github.chrisbanes.photoview.PhotoView;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import h_mal.appttude.com.driver.R;
import static android.os.Environment.DIRECTORY_PICTURES;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.photoURI;
import static h_mal.appttude.com.driver.MainActivity.getDateStamp;
public class ImageViewClass {
public static final String IMAGE_VALUE = "image";
private static Bitmap bitmap;
public ImageViewClass() {
}
public void open(Bitmap bitmap){
ImageViewClass.bitmap = bitmap;
executeFragment(new ImageViewerFragment());
}
public static class ImageViewerFragment extends Fragment {
private View view;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_image_viewer, container, false);
FloatingActionButton fab = view.findViewById(R.id.download_pic);
if (bitmap != null){
PhotoView photoView = view.findViewById(R.id.photo_view);
photoView.setImageBitmap(bitmap);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
downloadPic();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
});
}
return view;
}
@Override
public void onResume() {
super.onResume();
((AppCompatActivity)getActivity()).getSupportActionBar().hide();
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
@Override
public void onStop() {
super.onStop();
((AppCompatActivity)getActivity()).getSupportActionBar().show();
getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
private void downloadPic() throws FileNotFoundException {
File f = Environment.getExternalStoragePublicDirectory(DIRECTORY_PICTURES);
String fname = "driver"+ getDateStamp() + ".jpg";
File image = new File(f,fname);
FileOutputStream fileOutputStream = new FileOutputStream(image);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,fileOutputStream);
try {
fileOutputStream.flush();
fileOutputStream.close();
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
Uri contentUri = Uri.fromFile(image);
mediaScanIntent.setData(contentUri);
getActivity().sendBroadcast(mediaScanIntent);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

View File

@@ -0,0 +1,97 @@
package h_mal.appttude.com.driver.Global
import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.os.Bundle
import android.os.Environment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import com.github.chrisbanes.photoview.PhotoView
import com.google.android.material.floatingactionbutton.FloatingActionButton
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.utils.DateUtils
import java.io.File
import java.io.FileNotFoundException
import java.io.FileOutputStream
import java.io.IOException
class ImageViewClass {
fun open(bitmap: Bitmap?) {
Companion.bitmap = bitmap
// executeFragment(ImageViewerFragment())
}
class ImageViewerFragment : Fragment() {
private lateinit var viewer: View
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
viewer = inflater.inflate(R.layout.fragment_image_viewer, container, false)
val fab: FloatingActionButton = viewer.findViewById(R.id.download_pic)
if (bitmap != null) {
val photoView: PhotoView = viewer.findViewById(R.id.photo_view)
photoView.setImageBitmap(bitmap)
fab.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View) {
try {
downloadPic()
} catch (e: FileNotFoundException) {
e.printStackTrace()
}
}
})
}
return viewer
}
override fun onResume() {
super.onResume()
(activity as AppCompatActivity?)!!.supportActionBar!!.hide()
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
override fun onStop() {
super.onStop()
(activity as AppCompatActivity?)!!.supportActionBar!!.show()
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
@Throws(FileNotFoundException::class)
private fun downloadPic() {
val f: File =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
val fname: String = "driver" + DateUtils.getDateTimeStamp() + ".jpg"
val image: File = File(f, fname)
val fileOutputStream: FileOutputStream = FileOutputStream(image)
bitmap!!.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream)
try {
fileOutputStream.flush()
fileOutputStream.close()
val mediaScanIntent: Intent = Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE)
val contentUri: Uri = Uri.fromFile(image)
mediaScanIntent.data = contentUri
requireActivity().sendBroadcast(mediaScanIntent)
} catch (e: IOException) {
e.printStackTrace()
}
}
}
companion object {
val IMAGE_VALUE: String = "image"
private var bitmap: Bitmap? = null
}
}

View File

@@ -1,155 +0,0 @@
package h_mal.appttude.com.driver.Global;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.annotation.NonNull;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_CONSTANT;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_DENIED;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVAL_PENDING;
import static h_mal.appttude.com.driver.Global.FirebaseClass.APPROVED;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_DETAILS_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_APPROVALS;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_DETAILS_FIREBASE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.viewController;
public class SetApprovalDialog{
private final String[] groupNames = {"Pending","Denied","Approved"};
private String approvalNameString;
public int statusCode;
private Activity activity;
private String userId;
private ImageView imageView;
public SetApprovalDialog(int statusCode, Activity activity, String userId, int position, ImageView imageView) {
this.statusCode = statusCode;
this.activity = activity;
this.userId = userId;
this.imageView = imageView;
this.approvalNameString = getElement(position);
init();
}
public void init(){
int checkedItem;
switch (statusCode){
case APPROVAL_PENDING:
checkedItem = 0;
break;
case APPROVAL_DENIED:
checkedItem = 1;
break;
case APPROVED:
checkedItem = 2;
break;
default:
checkedItem = -1;
break;
}
AlertDialog.Builder alertBuilder = new AlertDialog.Builder(activity);
alertBuilder.setSingleChoiceItems(groupNames, checkedItem, singleChoiceListener);
// .setPositiveButton(android.R.string.ok, submit);
alertBuilder.create().getOwnerActivity();
alertBuilder.show();
}
DialogInterface.OnClickListener singleChoiceListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
statusCode = APPROVAL_PENDING;
publishStatuscode(statusCode, dialog);
return;
case 1:
statusCode = APPROVAL_DENIED;
publishStatuscode(statusCode, dialog);
return;
case 2:
statusCode = APPROVED;
publishStatuscode(statusCode, dialog);
return;
}
}
};
private void publishStatuscode(final int status, final DialogInterface dialog){
viewController.progress(View.VISIBLE);
if (!approvalNameString.equals("")){
mDatabase.child(USER_FIREBASE).child(userId).child(USER_APPROVALS).child(approvalNameString)
.setValue(status).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT).show();
imageView.setImageResource(approvalsClass.setImageResource(status));
dialog.dismiss();
}else{
Toast.makeText(activity, "Status change unsuccessful", Toast.LENGTH_SHORT).show();
}
viewController.progress(View.GONE);
}
});
}else {
Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show();
}
}
private String getElement(int i){
String element = "";
switch (i){
case 0:
element = DRIVER_DETAILS_FIREBASE + APPROVAL_CONSTANT;
break;
case 1:
element = DRIVERS_LICENSE_FIREBASE + APPROVAL_CONSTANT;
break;
case 2:
element = PRIVATE_HIRE_FIREBASE + APPROVAL_CONSTANT;
break;
case 3:
element = VEHICLE_DETAILS_FIREBASE + APPROVAL_CONSTANT;
break;
case 4:
element = INSURANCE_FIREBASE + APPROVAL_CONSTANT;
break;
case 5:
element = MOT_FIREBASE + APPROVAL_CONSTANT;
break;
case 6:
element = LOG_BOOK_FIREBASE + APPROVAL_CONSTANT;
break;
case 7:
element = PRIVATE_HIRE_VEHICLE_LICENSE + APPROVAL_CONSTANT;
}
return element;
}
}

View File

@@ -0,0 +1,115 @@
package h_mal.appttude.com.driver.Global
import android.app.Activity
import android.app.AlertDialog
import android.content.DialogInterface
import android.widget.ImageView
class SetApprovalDialog constructor(
var statusCode: Int,
private val activity: Activity,
private val userId: String?,
position: Int,
private val imageView: ImageView
) {
private val groupNames: Array<String> = arrayOf("Pending", "Denied", "Approved")
private val approvalNameString: String
fun init() {
val checkedItem: Int
when (statusCode) {
FirebaseClass.APPROVAL_PENDING -> checkedItem = 0
FirebaseClass.APPROVAL_DENIED -> checkedItem = 1
FirebaseClass.APPROVED -> checkedItem = 2
else -> checkedItem = -1
}
val alertBuilder: AlertDialog.Builder = AlertDialog.Builder(
activity
)
alertBuilder.setSingleChoiceItems(groupNames, checkedItem, singleChoiceListener)
// .setPositiveButton(android.R.string.ok, submit);
alertBuilder.create().ownerActivity
alertBuilder.show()
}
var singleChoiceListener: DialogInterface.OnClickListener =
object : DialogInterface.OnClickListener {
override fun onClick(dialog: DialogInterface, which: Int) {
when (which) {
0 -> {
statusCode = FirebaseClass.APPROVAL_PENDING
publishStatuscode(statusCode, dialog)
return
}
1 -> {
statusCode = FirebaseClass.APPROVAL_DENIED
publishStatuscode(statusCode, dialog)
return
}
2 -> {
statusCode = FirebaseClass.APPROVED
publishStatuscode(statusCode, dialog)
return
}
}
}
}
private fun publishStatuscode(status: Int, dialog: DialogInterface) {
// if (!(approvalNameString == "")) {
// MainActivity.mDatabase!!.child(FirebaseClass.USER_FIREBASE).child(
// (userId)!!
// ).child(FirebaseClass.USER_APPROVALS).child(approvalNameString)
// .setValue(status).addOnCompleteListener { task ->
// if (task.isSuccessful) {
// Toast.makeText(activity, "Status change successful", Toast.LENGTH_SHORT)
// .show()
// imageView.setImageResource(
// MainActivity.approvalsClass!!.setImageResource(
// status
// )
// )
// dialog.dismiss()
// } else {
// Toast.makeText(
// activity,
// "Status change unsuccessful",
// Toast.LENGTH_SHORT
// ).show()
// }
//
// }
// } else {
// Toast.makeText(activity, "Could not push status", Toast.LENGTH_SHORT).show()
// }
}
private fun getElement(i: Int): String {
var element: String = ""
when (i) {
0 -> element =
FirebaseClass.DRIVER_DETAILS_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
1 -> element =
FirebaseClass.DRIVERS_LICENSE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
2 -> element =
FirebaseClass.PRIVATE_HIRE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
3 -> element =
FirebaseClass.VEHICLE_DETAILS_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
4 -> element =
FirebaseClass.INSURANCE_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
5 -> element =
FirebaseClass.MOT_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
6 -> element =
FirebaseClass.LOG_BOOK_FIREBASE + FirebaseClass.APPROVAL_CONSTANT
7 -> element =
FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE + FirebaseClass.APPROVAL_CONSTANT
}
return element
}
init {
approvalNameString = getElement(position)
init()
}
}

View File

@@ -1,32 +0,0 @@
package h_mal.appttude.com.driver.Global;
import android.app.Activity;
import android.view.View;
public class ViewController {
private Activity activity;
public ViewController(Activity activity) {
this.activity = activity;
}
public void progress(int vis){
if (activity instanceof ViewControllerInterface){
((ViewControllerInterface) activity).progressVisibility(vis);
}
}
public void reloadDrawer(){
if (activity instanceof ViewControllerInterface){
((ViewControllerInterface) activity).updateDrawer();
}
}
public interface ViewControllerInterface {
void progressVisibility(int vis);
void updateDrawer();
}
}

View File

@@ -1,397 +0,0 @@
package h_mal.appttude.com.driver;
import android.Manifest;
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.View;
import android.support.design.widget.NavigationView;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import h_mal.appttude.com.driver.Driver.DriverOverallFragment;
import h_mal.appttude.com.driver.Driver.VehicleOverallFragment;
import h_mal.appttude.com.driver.Driver.VehicleSetupFragment;
import h_mal.appttude.com.driver.Driver.DriverProfileFragment;
import h_mal.appttude.com.driver.Driver.homeDriverFragment;
import h_mal.appttude.com.driver.Global.ApprovalsClass;
import h_mal.appttude.com.driver.Global.ArchiveClass;
import h_mal.appttude.com.driver.Global.ImageViewClass;
import h_mal.appttude.com.driver.Global.ViewController;
import h_mal.appttude.com.driver.SuperUser.homeSuperUserFragment;
import h_mal.appttude.com.driver.User.LoginActivity;
import h_mal.appttude.com.driver.User.profileFragment;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener, ViewController.ViewControllerInterface {
private static String TAG = MainActivity.class.getSimpleName();
public static FragmentManager fragmentManager;
public static FirebaseAuth auth;
public static FirebaseStorage storage;
public static StorageReference storageReference;
public static DatabaseReference mDatabase;
public NavigationView navigationView;
ProgressBar progressBar;
public Toolbar toolbar;
public static ViewController viewController;
public static ImageViewClass imageViewClass;
public static ApprovalsClass approvalsClass;
public static ArchiveClass archiveClass;
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewController = new ViewController(this);
imageViewClass = new ImageViewClass();
approvalsClass = new ApprovalsClass();
archiveClass = new ArchiveClass();
auth = FirebaseAuth.getInstance();
storage = FirebaseStorage.getInstance();
storageReference = storage.getReference();
mDatabase = FirebaseDatabase.getInstance().getReference();
DatabaseReference ref = mDatabase.child(USER_FIREBASE)
.child(auth.getCurrentUser().getUid())
.child("role");
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
setupDrawer();
fragmentManager = getSupportFragmentManager();
fragmentManager.addOnBackStackChangedListener(backStackChangedListener);
progressBar = findViewById(R.id.progress_bar);
progressBar.setVisibility(View.VISIBLE);
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String role = (String) dataSnapshot.getValue();
Log.i(TAG, "onDataChange: " + role);
if (role.equals("driver")){
executeFragment(new homeDriverFragment());
}else if(role.equals("super_user")){
executeFragment(new homeSuperUserFragment());
}
drawerMenuItems(role);
progressBar.setVisibility(View.GONE);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
progressBar.setVisibility(View.GONE);
}
});
}
public FragmentManager.OnBackStackChangedListener backStackChangedListener= new FragmentManager.OnBackStackChangedListener() {
@Override
public void onBackStackChanged() {
String fragmentString = fragmentManager.getFragments().get(0).getClass().getSimpleName();
String title;
switch (fragmentString){
case "DriverProfileFragment":
title = "Driver Profile";
break;
case "DriverLicenseFragment":
title = "Drivers License";
break;
case "InsuranceFragment":
title = "Insurance";
break;
case "logbookFragment":
title = "Logbook";
break;
case "MotFragment":
title = "M.O.T";
break;
case "PrivateHireLicenseFragment":
title = "Private Hire License";
break;
case "VehicleSetupFragment":
title = "Vehicle Profile";
break;
case "UserMainFragment":
return;
case "ArchiveFragment":
return;
default:
title = getResources().getString(R.string.app_name);
}
setTitle(title);
}
};
@Override
public void setTitle(CharSequence title) {
// super.setTitle(title);
toolbar.setTitle(title);
}
public void drawerMenuItems(String s){
if (s.equals("super_user")){
Menu menu = navigationView.getMenu();
menu.removeGroup(R.id.menu_group);
}
}
public void setupDrawer(){
View header = navigationView.getHeaderView(0);
TextView driverEmail = header.findViewById(R.id.driver_email);
TextView driverName = header.findViewById(R.id.driver_name);
ImageView driverImage = header.findViewById(R.id.profileImage);
if (auth != null){
FirebaseUser user = auth.getCurrentUser();
if (user.getEmail() != null){
driverEmail.setText(user.getEmail());
}
if (user.getDisplayName() != null){
driverName.setText(user.getDisplayName());
}
Picasso.get()
.load(user.getPhotoUrl())
.placeholder(R.drawable.choice_img_round)
.into(driverImage);
}
TextView textView = findViewById(R.id.logout);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
auth.signOut();
Intent intent = new Intent(getApplicationContext(),LoginActivity.class);
startActivity(intent);
finish();
}
});
}
@Override
public void onBackPressed() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
if (fragmentManager.getBackStackEntryCount() > 1) {
if (fragmentManager.getFragments().get(0).getClass()
.getSimpleName().equals("InsuranceFragment")){
new AlertDialog.Builder(this)
.setTitle("Return to previous?")
.setMessage("Progress unsaved. Are you sure?")
.setNegativeButton(android.R.string.no, null)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
fragmentManager.popBackStack();
}
}).create().show();
}else{
fragmentManager.popBackStack();
}
}else{
new AlertDialog.Builder(this)
.setTitle("Leave?")
.setMessage("Are you sure you want to exit?")
.setNegativeButton(android.R.string.no, null)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
finish();
System.exit(0);
}
}).create().show();
}
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// 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.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_camera) {
// Handle the camera action
executeFragment(new profileFragment());
} else if (id == R.id.nav_gallery) {
executeFragment(new DriverOverallFragment());
} else if (id == R.id.nav_slideshow) {
executeFragment(new VehicleOverallFragment());
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = 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
);
}
}
public static Target loadImage (final ProgressBar pb, final ImageView mainImage){
Target target = new Target() {
@Override
public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
pb.setVisibility(View.GONE);
mainImage.setImageBitmap(bitmap);
mainImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageViewClass.open(bitmap);
}
});
}
@Override
public void onBitmapFailed(Exception e, Drawable errorDrawable) {
pb.setVisibility(View.GONE);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
pb.setVisibility(View.VISIBLE);
}
};
mainImage.setTag(target);
return target;
}
public static String getDateStamp(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmm");
return sdf.format(new Date());
}
public static String getDateTimeStamp(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
return sdf.format(new Date());
}
public static String setAsDateTime(String strCurrentDate) throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd_HHmmss");
Date newDate = format.parse(strCurrentDate);
format = new SimpleDateFormat("dd/MM/yyyy");
return format.format(newDate);
}
public static void printObjectAsJson(String TAG, Object o){
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(new Gson().toJson(o));
String prettyJsonString = gson.toJson(je);
Log.i(TAG, "onBindViewHolder: object" + prettyJsonString);
}
@Override
public void progressVisibility(int vis) {
progressBar.setVisibility(vis);
}
@Override
public void updateDrawer() {
setupDrawer();
}
}

View File

@@ -1,59 +0,0 @@
package h_mal.appttude.com.driver.Objects;
public class ApprovalsObject {
public int driver_details_approval;
public int driver_license_approval;
public int private_hire_approval;
public int vehicle_details_approval;
public int mot_details_approval;
public int insurance_details_approval;
public int log_book_approval;
public int private_hire_vehicle_approval;
public ApprovalsObject() {
}
public ApprovalsObject(int driver_details_approval, int driver_license_approval, int private_hire_approval, int vehicle_details_approval, int mot_details_approval, int insurance_details_approval, int log_book_approval, int private_hire_vehicle_approval) {
this.driver_details_approval = driver_details_approval;
this.driver_license_approval = driver_license_approval;
this.private_hire_approval = private_hire_approval;
this.vehicle_details_approval = vehicle_details_approval;
this.mot_details_approval = mot_details_approval;
this.insurance_details_approval = insurance_details_approval;
this.log_book_approval = log_book_approval;
this.private_hire_vehicle_approval = private_hire_vehicle_approval;
}
public int getPh_car_approval() {
return private_hire_vehicle_approval;
}
public int getDriver_details_approval() {
return driver_details_approval;
}
public int getDriver_license_approval() {
return driver_license_approval;
}
public int getPrivate_hire_approval() {
return private_hire_approval;
}
public int getVehicle_details_approval() {
return vehicle_details_approval;
}
public int getMot_details_approval() {
return mot_details_approval;
}
public int getInsurance_details_approval() {
return insurance_details_approval;
}
public int getLog_book_approval() {
return log_book_approval;
}
}

View File

@@ -0,0 +1,35 @@
package h_mal.appttude.com.driver.Objects
class ApprovalsObject {
var driver_details_approval: Int = 0
var driver_license_approval: Int = 0
var private_hire_approval: Int = 0
var vehicle_details_approval: Int = 0
var mot_details_approval: Int = 0
var insurance_details_approval: Int = 0
var log_book_approval: Int = 0
var ph_car_approval: Int = 0
constructor()
constructor(
driver_details_approval: Int,
driver_license_approval: Int,
private_hire_approval: Int,
vehicle_details_approval: Int,
mot_details_approval: Int,
insurance_details_approval: Int,
log_book_approval: Int,
private_hire_vehicle_approval: Int
) {
this.driver_details_approval = driver_details_approval
this.driver_license_approval = driver_license_approval
this.private_hire_approval = private_hire_approval
this.vehicle_details_approval = vehicle_details_approval
this.mot_details_approval = mot_details_approval
this.insurance_details_approval = insurance_details_approval
this.log_book_approval = log_book_approval
ph_car_approval = private_hire_vehicle_approval
}
}

View File

@@ -1,56 +0,0 @@
package h_mal.appttude.com.driver.Objects;
import java.util.HashMap;
import java.util.List;
public class ArchiveObject {
public HashMap<String,DriversLicenseObject> driver_license;
public HashMap<String,PrivateHireObject> private_hire;
public HashMap<String,VehicleProfileObject> vehicle_details;
public HashMap<String,InsuranceObject> insurance_details;
public HashMap<String,MotObject> mot_details;
public HashMap<String,LogbookObject> log_book;
public HashMap<String,PrivateHireVehicleObject> private_hire_vehicle;
public ArchiveObject() {
}
public ArchiveObject(HashMap<String, DriversLicenseObject> driver_license, HashMap<String, PrivateHireObject> private_hire, HashMap<String, VehicleProfileObject> vehicle_details, HashMap<String, InsuranceObject> insurance_details, HashMap<String, MotObject> mot_details, HashMap<String, LogbookObject> log_book, HashMap<String, PrivateHireVehicleObject> private_hire_vehicle) {
this.driver_license = driver_license;
this.private_hire = private_hire;
this.vehicle_details = vehicle_details;
this.insurance_details = insurance_details;
this.mot_details = mot_details;
this.log_book = log_book;
this.private_hire_vehicle = private_hire_vehicle;
}
public HashMap<String, PrivateHireVehicleObject> getPh_car() {
return private_hire_vehicle;
}
public HashMap<String, DriversLicenseObject> getDriver_license() {
return driver_license;
}
public HashMap<String, PrivateHireObject> getPrivate_hire() {
return private_hire;
}
public HashMap<String, VehicleProfileObject> getVehicle_details() {
return vehicle_details;
}
public HashMap<String, InsuranceObject> getInsurance_details() {
return insurance_details;
}
public HashMap<String, MotObject> getMot_details() {
return mot_details;
}
public HashMap<String, LogbookObject> getLog_book() {
return log_book;
}
}

View File

@@ -0,0 +1,36 @@
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 {
var driver_license: HashMap<String, DriversLicenseObject>? = null
var private_hire: HashMap<String, PrivateHireObject>? = null
var vehicle_details: HashMap<String, VehicleProfileObject>? = null
var insurance_details: HashMap<String, InsuranceObject>? = null
var mot_details: HashMap<String, MotObject>? = null
var log_book: HashMap<String, LogbookObject>? = null
var ph_car: HashMap<String, PrivateHireVehicleObject>? = null
constructor()
constructor(
driver_license: HashMap<String, DriversLicenseObject>?,
private_hire: HashMap<String, PrivateHireObject>?,
vehicle_details: HashMap<String, VehicleProfileObject>?,
insurance_details: HashMap<String, InsuranceObject>?,
mot_details: HashMap<String, MotObject>?,
log_book: HashMap<String, LogbookObject>?,
private_hire_vehicle: HashMap<String, PrivateHireVehicleObject>?
) {
this.driver_license = driver_license
this.private_hire = private_hire
this.vehicle_details = vehicle_details
this.insurance_details = insurance_details
this.mot_details = mot_details
this.log_book = log_book
this.ph_car = private_hire_vehicle
}
}

View File

@@ -1,55 +0,0 @@
package h_mal.appttude.com.driver.Objects;
public class DriverProfileObject {
public String driverPic;
public String forenames;
public String address;
public String postcode;
public String dob;
public String ni;
public String dateFirst;
public DriverProfileObject() {
}
public DriverProfileObject(String driverPic, String forenames, String address,
String postcode, String dob, String ni, String dateFirst) {
this.driverPic = driverPic;
this.forenames = forenames;
this.address = address;
this.postcode = postcode;
this.dob = dob;
this.ni = ni;
this.dateFirst = dateFirst;
}
public String getDriverPic() {
return driverPic;
}
public String getForenames() {
return forenames;
}
public String getAddress() {
return address;
}
public String getPostcode() {
return postcode;
}
public String getDob() {
return dob;
}
public String getNi() {
return ni;
}
public String getDateFirst() {
return dateFirst;
}
}

View File

@@ -1,29 +0,0 @@
package h_mal.appttude.com.driver.Objects;
public class DriversLicenseObject {
public String licenseImageString;
public String licenseNumber;
public String licenseExpiry;
public DriversLicenseObject() {
}
public DriversLicenseObject(String licenseImageString, String licenseNumber, String licenseExpiry) {
this.licenseImageString = licenseImageString;
this.licenseNumber = licenseNumber;
this.licenseExpiry = licenseExpiry;
}
public String getLicenseImageString() {
return licenseImageString;
}
public String getLicenseNumber() {
return licenseNumber;
}
public String getLicenseExpiry() {
return licenseExpiry;
}
}

View File

@@ -1,31 +0,0 @@
package h_mal.appttude.com.driver.Objects;
import java.util.List;
public class InsuranceObject {
public List<String> photoStrings;
public String insurerName;
public String expiryDate;
public InsuranceObject() {
}
public InsuranceObject(List<String> photoStrings, String insurerName, String expiryDate) {
this.photoStrings = photoStrings;
this.insurerName = insurerName;
this.expiryDate = expiryDate;
}
public List<String> getPhotoStrings() {
return photoStrings;
}
public String getInsurerName() {
return insurerName;
}
public String getExpiryDate() {
return expiryDate;
}
}

View File

@@ -0,0 +1,9 @@
package h_mal.appttude.com.driver.Objects
data class InsuranceObject (
var photoStrings: MutableList<String?>? = null,
var insurerName: String? = null,
var expiryDate: String? = null
)

View File

@@ -1,23 +0,0 @@
package h_mal.appttude.com.driver.Objects;
public class LogbookObject {
public String photoString;
public String v5cnumber;
public LogbookObject(String photoString, String v5cnumber) {
this.photoString = photoString;
this.v5cnumber = v5cnumber;
}
public LogbookObject() {
}
public String getPhotoString() {
return photoString;
}
public String getV5cnumber() {
return v5cnumber;
}
}

View File

@@ -0,0 +1,15 @@
package h_mal.appttude.com.driver.Objects
class LogbookObject {
var photoString: String? = null
var v5cnumber: String? = null
constructor(photoString: String?, v5cnumber: String?) {
this.photoString = photoString
this.v5cnumber = v5cnumber
}
constructor()
}

View File

@@ -1,23 +0,0 @@
package h_mal.appttude.com.driver.Objects;
public class MotObject {
public String motImageString;
public String motExpiry;
public MotObject() {
}
public MotObject(String motImageString, String motExpiry) {
this.motImageString = motImageString;
this.motExpiry = motExpiry;
}
public String getMotImageString() {
return motImageString;
}
public String getMotExpiry() {
return motExpiry;
}
}

View File

@@ -1,29 +0,0 @@
package h_mal.appttude.com.driver.Objects;
public class PrivateHireObject {
public String phImageString;
public String phNumber;
public String phExpiry;
public PrivateHireObject() {
}
public PrivateHireObject(String phImageString, String phNumber, String phExpiry) {
this.phImageString = phImageString;
this.phNumber = phNumber;
this.phExpiry = phExpiry;
}
public String getPhImageString() {
return phImageString;
}
public String getPhNumber() {
return phNumber;
}
public String getPhExpiry() {
return phExpiry;
}
}

View File

@@ -1,29 +0,0 @@
package h_mal.appttude.com.driver.Objects;
public class PrivateHireVehicleObject {
public String phCarImageString;
public String phCarNumber;
public String phCarExpiry;
public PrivateHireVehicleObject(String phCarImageString, String phCarNumber, String phCarExpiry) {
this.phCarImageString = phCarImageString;
this.phCarNumber = phCarNumber;
this.phCarExpiry = phCarExpiry;
}
public PrivateHireVehicleObject() {
}
public String getPhCarImageString() {
return phCarImageString;
}
public String getPhCarNumber() {
return phCarNumber;
}
public String getPhCarExpiry() {
return phCarExpiry;
}
}

View File

@@ -0,0 +1,9 @@
package h_mal.appttude.com.driver.Objects
class PrivateHireVehicleObject(
var phCarImageString: String? = null,
var phCarNumber: String? = null,
var phCarExpiry: String? = null
)

View File

@@ -1,29 +0,0 @@
package h_mal.appttude.com.driver.Objects;
public class UserObject {
public String profileName;
public String profileEmail;
public String profilePicString;
public UserObject() {
}
public UserObject(String profileName, String profileEmail, String profilePicString) {
this.profileName = profileName;
this.profileEmail = profileEmail;
this.profilePicString = profilePicString;
}
public String getProfileName() {
return profileName;
}
public String getProfileEmail() {
return profileEmail;
}
public String getProfilePicString() {
return profilePicString;
}
}

View File

@@ -0,0 +1,16 @@
package h_mal.appttude.com.driver.Objects
class UserObject {
var profileName: String? = null
var profileEmail: String? = null
var profilePicString: String? = null
constructor()
constructor(profileName: String?, profileEmail: String?, profilePicString: String?) {
this.profileName = profileName
this.profileEmail = profileEmail
this.profilePicString = profilePicString
}
}

View File

@@ -1,67 +0,0 @@
package h_mal.appttude.com.driver.Objects;
public class VehicleProfileObject {
public String reg;
public String make;
public String model;
public String colour;
public String keeperName;
public String keeperAddress;
public String keeperPostCode;
public String startDate;
public boolean seized;
public VehicleProfileObject() {
}
public VehicleProfileObject(String reg, String make, String model, String colour, String keeperName,
String keeperAddress, String keeperPostCode, String startDate, boolean seized) {
this.reg = reg;
this.make = make;
this.model = model;
this.colour = colour;
this.keeperName = keeperName;
this.keeperAddress = keeperAddress;
this.keeperPostCode = keeperPostCode;
this.startDate = startDate;
this.seized = seized;
}
public String getReg() {
return reg;
}
public String getMake() {
return make;
}
public String getModel() {
return model;
}
public String getColour() {
return colour;
}
public String getKeeperName() {
return keeperName;
}
public String getKeeperAddress() {
return keeperAddress;
}
public String getKeeperPostCode() {
return keeperPostCode;
}
public String getStartDate() {
return startDate;
}
public boolean isSeized() {
return seized;
}
}

View File

@@ -1,59 +0,0 @@
package h_mal.appttude.com.driver.Objects;
import h_mal.appttude.com.driver.Objects.ApprovalsObject;
import h_mal.appttude.com.driver.Objects.ArchiveObject;
import h_mal.appttude.com.driver.Objects.UserObject;
import h_mal.appttude.com.driver.Objects.WholeObject.DriverProfile;
import h_mal.appttude.com.driver.Objects.WholeObject.VehicleProfile;
public class WholeDriverObject {
public DriverProfile driver_profile;
public String role;
public ArchiveObject archive;
public UserObject user_details;
public VehicleProfile vehicle_profile;
public ApprovalsObject approvalsObject;
public String driver_number;
public WholeDriverObject(DriverProfile driver_profile, String role, ArchiveObject archive, UserObject user_details, VehicleProfile vehicle_profile, ApprovalsObject approvalsObject, String driver_number) {
this.driver_profile = driver_profile;
this.role = role;
this.archive = archive;
this.user_details = user_details;
this.vehicle_profile = vehicle_profile;
this.approvalsObject = approvalsObject;
this.driver_number = driver_number;
}
public WholeDriverObject() {
}
public String getDriver_number() {
return driver_number;
}
public ArchiveObject getArchive() {
return archive;
}
public DriverProfile getDriver_profile() {
return driver_profile;
}
public String getRole() {
return role;
}
public UserObject getUser_details() {
return user_details;
}
public VehicleProfile getVehicle_profile() {
return vehicle_profile;
}
public ApprovalsObject getApprovalsObject() {
return approvalsObject;
}
}

View File

@@ -0,0 +1,35 @@
package h_mal.appttude.com.driver.Objects
import h_mal.appttude.com.driver.Objects.WholeObject.DriverProfile
import h_mal.appttude.com.driver.Objects.WholeObject.VehicleProfile
class WholeDriverObject {
var driver_profile: DriverProfile? = null
var role: String? = null
var archive: ArchiveObject? = null
var user_details: UserObject? = null
var vehicle_profile: VehicleProfile? = null
var approvalsObject: ApprovalsObject? = null
var driver_number: String? = null
constructor(
driver_profile: DriverProfile?,
role: String?,
archive: ArchiveObject?,
user_details: UserObject?,
vehicle_profile: VehicleProfile?,
approvalsObject: ApprovalsObject?,
driver_number: String?
) {
this.driver_profile = driver_profile
this.role = role
this.archive = archive
this.user_details = user_details
this.vehicle_profile = vehicle_profile
this.approvalsObject = approvalsObject
this.driver_number = driver_number
}
constructor()
}

View File

@@ -1,33 +0,0 @@
package h_mal.appttude.com.driver.Objects.WholeObject;
import h_mal.appttude.com.driver.Objects.DriverProfileObject;
import h_mal.appttude.com.driver.Objects.DriversLicenseObject;
import h_mal.appttude.com.driver.Objects.PrivateHireObject;
public class DriverProfile {
public DriverProfileObject driver_profile;
public DriversLicenseObject driver_license;
public PrivateHireObject private_hire;
public DriverProfile(DriverProfileObject driver_profile, DriversLicenseObject driver_license, PrivateHireObject private_hire) {
this.driver_profile = driver_profile;
this.driver_license = driver_license;
this.private_hire = private_hire;
}
public DriverProfile() {
}
public DriverProfileObject getDriver_profile() {
return driver_profile;
}
public DriversLicenseObject getDriver_license() {
return driver_license;
}
public PrivateHireObject getPrivate_hire() {
return private_hire;
}
}

View File

@@ -0,0 +1,24 @@
package h_mal.appttude.com.driver.Objects.WholeObject
import h_mal.appttude.com.driver.model.DriverProfileObject
import h_mal.appttude.com.driver.model.DriversLicenseObject
import h_mal.appttude.com.driver.model.PrivateHireObject
class DriverProfile {
var driver_profile: DriverProfileObject? = null
var driver_license: DriversLicenseObject? = null
var private_hire: PrivateHireObject? = null
constructor(
driver_profile: DriverProfileObject?,
driver_license: DriversLicenseObject?,
private_hire: PrivateHireObject?
) {
this.driver_profile = driver_profile
this.driver_license = driver_license
this.private_hire = private_hire
}
constructor()
}

View File

@@ -1,56 +0,0 @@
package h_mal.appttude.com.driver.Objects.WholeObject;
import android.os.Parcel;
import android.os.Parcelable;
import h_mal.appttude.com.driver.Objects.WholeDriverObject;
public class MappedObject implements Parcelable {
public String userId;
public WholeDriverObject wholeDriverObject;
public MappedObject(String userId, WholeDriverObject wholeDriverObject) {
this.userId = userId;
this.wholeDriverObject = wholeDriverObject;
}
public MappedObject() {
}
protected MappedObject(Parcel in) {
userId = in.readString();
}
public static final Creator<MappedObject> CREATOR = new Creator<MappedObject>() {
@Override
public MappedObject createFromParcel(Parcel in) {
return new MappedObject(in);
}
@Override
public MappedObject[] newArray(int size) {
return new MappedObject[size];
}
};
public String getUserId() {
return userId;
}
public WholeDriverObject getWholeDriverObject() {
return wholeDriverObject;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(userId);
}
}

View File

@@ -0,0 +1,41 @@
package h_mal.appttude.com.driver.Objects.WholeObject
import android.os.Parcel
import android.os.Parcelable
import h_mal.appttude.com.driver.Objects.WholeDriverObject
class MappedObject : Parcelable {
var userId: String? = null
var wholeDriverObject: WholeDriverObject? = null
constructor(userId: String?, wholeDriverObject: WholeDriverObject?) {
this.userId = userId
this.wholeDriverObject = wholeDriverObject
}
constructor()
protected constructor(`in`: Parcel) {
userId = `in`.readString()
}
override fun describeContents(): Int {
return 0
}
override fun writeToParcel(dest: Parcel, flags: Int) {
dest.writeString(userId)
}
companion object {
val CREATOR: Parcelable.Creator<MappedObject?> = object : Parcelable.Creator<MappedObject?> {
override fun createFromParcel(`in`: Parcel): MappedObject? {
return MappedObject(`in`)
}
override fun newArray(size: Int): Array<MappedObject?> {
return arrayOfNulls(size)
}
}
}
}

View File

@@ -1,55 +0,0 @@
package h_mal.appttude.com.driver.Objects.WholeObject;
import h_mal.appttude.com.driver.Objects.InsuranceObject;
import h_mal.appttude.com.driver.Objects.LogbookObject;
import h_mal.appttude.com.driver.Objects.MotObject;
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject;
import h_mal.appttude.com.driver.Objects.VehicleProfileObject;
public class VehicleProfile {
public InsuranceObject insurance_details;
public LogbookObject log_book;
public MotObject mot_details;
public VehicleProfileObject vehicle_details;
public PrivateHireVehicleObject private_hire_vehicle;
public VehicleProfile() {
}
// public VehicleProfile(InsuranceObject insurance_details, LogbookObject log_book, MotObject mot_details, VehicleProfileObject vehicle_details) {
// this.insurance_details = insurance_details;
// this.log_book = log_book;
// this.mot_details = mot_details;
// this.vehicle_details = vehicle_details;
// }
public VehicleProfile(InsuranceObject insurance_details, LogbookObject log_book, MotObject mot_details, VehicleProfileObject vehicle_details, PrivateHireVehicleObject private_hire_vehicle) {
this.insurance_details = insurance_details;
this.log_book = log_book;
this.mot_details = mot_details;
this.vehicle_details = vehicle_details;
this.private_hire_vehicle = private_hire_vehicle;
}
public PrivateHireVehicleObject getPrivateHireVehicleObject() {
return private_hire_vehicle;
}
public InsuranceObject getInsurance_details() {
return insurance_details;
}
public LogbookObject getLog_book() {
return log_book;
}
public MotObject getMot_details() {
return mot_details;
}
public VehicleProfileObject getVehicle_details() {
return vehicle_details;
}
}

View File

@@ -0,0 +1,38 @@
package h_mal.appttude.com.driver.Objects.WholeObject
import h_mal.appttude.com.driver.Objects.InsuranceObject
import h_mal.appttude.com.driver.Objects.LogbookObject
import h_mal.appttude.com.driver.Objects.PrivateHireVehicleObject
import h_mal.appttude.com.driver.model.MotObject
import h_mal.appttude.com.driver.model.VehicleProfileObject
class VehicleProfile {
var insurance_details: InsuranceObject? = null
var log_book: LogbookObject? = null
var mot_details: MotObject? = null
var vehicle_details: VehicleProfileObject? = null
var privateHireVehicleObject: PrivateHireVehicleObject? = null
constructor()
// public VehicleProfile(InsuranceObject insurance_details, LogbookObject log_book, MotObject mot_details, VehicleProfileObject vehicle_details) {
// this.insurance_details = insurance_details;
// this.log_book = log_book;
// this.mot_details = mot_details;
// this.vehicle_details = vehicle_details;
// }
constructor(
insurance_details: InsuranceObject?,
log_book: LogbookObject?,
mot_details: MotObject?,
vehicle_details: VehicleProfileObject?,
private_hire_vehicle: PrivateHireVehicleObject?
) {
this.insurance_details = insurance_details
this.log_book = log_book
this.mot_details = mot_details
this.vehicle_details = vehicle_details
privateHireVehicleObject = private_hire_vehicle
}
}

View File

@@ -1,305 +0,0 @@
package h_mal.appttude.com.driver.SuperUser;
import android.app.Activity;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import h_mal.appttude.com.driver.Archive.ArchiveFragment;
import h_mal.appttude.com.driver.Driver.DriverLicenseFragment;
import h_mal.appttude.com.driver.Driver.InsuranceFragment;
import h_mal.appttude.com.driver.Driver.MotFragment;
import h_mal.appttude.com.driver.Driver.PrivateHireLicenseFragment;
import h_mal.appttude.com.driver.Driver.PrivateHireVehicleFragment;
import h_mal.appttude.com.driver.Driver.VehicleSetupFragment;
import h_mal.appttude.com.driver.Driver.DriverProfileFragment;
import h_mal.appttude.com.driver.Driver.logbookFragment;
import h_mal.appttude.com.driver.Global.SetApprovalDialog;
import h_mal.appttude.com.driver.Objects.ApprovalsObject;
import h_mal.appttude.com.driver.Objects.ArchiveObject;
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject;
import h_mal.appttude.com.driver.Objects.WholeDriverObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVERS_LICENSE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.INSURANCE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.LOG_BOOK_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.MOT_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.NO_DATE_PRESENT;
import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.PRIVATE_HIRE_VEHICLE_LICENSE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.VEHICLE_DETAILS_FIREBASE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.archiveClass;
public class ApprovalListAdapter extends ArrayAdapter<MappedObject> {
private String TAG = "ApprovalListAdapter";
String [] names = {"Driver Profile","Driver License","Private Hire","Vehicle Profile","Insurance","MOT","Logbook","P/H Vehicle"};
MappedObject mappedObject;
Activity activity;
int approvalCode;
public ApprovalListAdapter(@NonNull Activity activity, @NonNull MappedObject[] objects) {
super(activity, 0, objects);
this.mappedObject = objects[0];
this.activity = activity;
}
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View listItemView = convertView;
if (listItemView == null) {
listItemView = LayoutInflater.from(activity).inflate(
R.layout.approval_list_grid_item, parent, false);
}
approvalCode = getApprovalStatusCode(position);
TextView textView = listItemView.findViewById(R.id.approval_text);
textView.setText(names[position]);
final ImageView imageView = listItemView.findViewById(R.id.approval_iv);
imageView.setImageResource(approvalsClass.setImageResource(approvalCode));
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new SetApprovalDialog(approvalCode,activity,mappedObject.getUserId(),position,imageView);
}
});
ImageView archiveImage = listItemView.findViewById(R.id.archive_icon);
if (mappedObject.getWholeDriverObject().archive != null){
Log.i(TAG, "getView: archive = " + getArchive(position,mappedObject.getWholeDriverObject().getArchive()));
archiveImage.setVisibility(getArchive(position,mappedObject.getWholeDriverObject().getArchive()));
archiveImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String s = null;
switch (position){
case 1:
s = DRIVERS_LICENSE_FIREBASE;
break;
case 2:
s = PRIVATE_HIRE_FIREBASE;
break;
case 3:
s = VEHICLE_DETAILS_FIREBASE;
break;
case 4:
s = INSURANCE_FIREBASE;
break;
case 5:
s = MOT_FIREBASE;
break;
case 6:
s = LOG_BOOK_FIREBASE;
break;
case 7:
s = PRIVATE_HIRE_VEHICLE_LICENSE;
break;
}
executeFragment(new ArchiveFragment(),mappedObject.getUserId(),s);
}
});
}
listItemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getFragment(position);
}
});
listItemView.setMinimumHeight(parent.getHeight()/4);
listItemView.setPadding((int)convertDpToPixel(9,getContext()),
(int)convertDpToPixel(9,getContext()),
(int)convertDpToPixel(9,getContext()),
(int)convertDpToPixel(9,getContext()));
return listItemView;
}
@Override
public int getCount() {
return 8;
}
private int getArchive(int i, ArchiveObject archiveObject){
Object o = null;
int visible;
switch (i){
case 0:
break;
case 1:
o = archiveObject.driver_license;
break;
case 2:
o = archiveObject.private_hire;
break;
case 3:
o = archiveObject.vehicle_details;
break;
case 4:
o = archiveObject.insurance_details;
break;
case 5:
o = archiveObject.mot_details;
break;
case 6:
o = archiveObject.log_book;
break;
case 7:
o = archiveObject.private_hire_vehicle;
}
if (o != null){
visible = View.VISIBLE;
}else{
visible = View.GONE;
}
return visible;
}
private void getFragment(int i){
Fragment f = null;
WholeDriverObject wholeDriverObject = mappedObject.getWholeDriverObject();
Object o = null;
switch (i) {
case 0:
f = new DriverProfileFragment();
if (wholeDriverObject.driver_profile != null && wholeDriverObject.getDriver_profile().driver_profile != null) {
o = wholeDriverObject.getDriver_profile().getDriver_profile();
}
break;
case 1:
f = new DriverLicenseFragment();
if (wholeDriverObject.driver_profile != null && wholeDriverObject.getDriver_profile().driver_license != null) {
o = wholeDriverObject.getDriver_profile().getDriver_license();
}
break;
case 2:
f = new PrivateHireLicenseFragment();
if (wholeDriverObject.driver_profile != null && wholeDriverObject.getDriver_profile().private_hire != null) {
o = wholeDriverObject.getDriver_profile().getPrivate_hire();
}
break;
case 3:
f = new VehicleSetupFragment();
if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().vehicle_details != null){
o = wholeDriverObject.getVehicle_profile().getVehicle_details();
}
break;
case 4:
f = new InsuranceFragment();
if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().insurance_details != null){
o = wholeDriverObject.getVehicle_profile().getInsurance_details();
}
break;
case 5:
f = new MotFragment();
if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().mot_details != null){
o = wholeDriverObject.getVehicle_profile().getMot_details();
}
break;
case 6:
f = new logbookFragment();
if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().log_book != null){
o = wholeDriverObject.getVehicle_profile().getLog_book();
}
break;
case 7:
f = new PrivateHireVehicleFragment();
if (wholeDriverObject.vehicle_profile != null && wholeDriverObject.getVehicle_profile().private_hire_vehicle != null){
o = wholeDriverObject.getVehicle_profile().getPrivateHireVehicleObject();
}
break;
}
if (o == null){
executeFragment(f,mappedObject.getUserId());
}else {
archiveClass.openDialogArchive(getContext(),o
,mappedObject.getUserId(),f);
}
}
private int getApprovalStatusCode(int i){
int statusCode = NO_DATE_PRESENT;
if (mappedObject.getWholeDriverObject().approvalsObject != null){
ApprovalsObject approvalsObject = mappedObject.getWholeDriverObject().getApprovalsObject();
switch (i) {
case 0:
if (approvalsObject.driver_details_approval != 0) {
statusCode = approvalsObject.getDriver_details_approval();
}
break;
case 1:
if (approvalsObject.driver_license_approval != 0) {
statusCode = approvalsObject.getDriver_license_approval();
}
break;
case 2:
if (approvalsObject.private_hire_approval != 0) {
statusCode = approvalsObject.getPrivate_hire_approval();
}
break;
case 3:
if (approvalsObject.vehicle_details_approval != 0) {
statusCode = approvalsObject.getVehicle_details_approval();
}
break;
case 4:
if (approvalsObject.insurance_details_approval != 0) {
statusCode = approvalsObject.getInsurance_details_approval();
}
break;
case 5:
if (approvalsObject.mot_details_approval != 0) {
statusCode = approvalsObject.getMot_details_approval();
}
break;
case 6:
if (approvalsObject.log_book_approval != 0) {
statusCode = approvalsObject.getLog_book_approval();
}
break;
case 7:
if (approvalsObject.private_hire_vehicle_approval != 0) {
statusCode = approvalsObject.getPh_car_approval();
}
break;
}
}
return statusCode;
}
public static float convertDpToPixel(float dp, Context context){
return dp * ((float) context.getResources().getDisplayMetrics().densityDpi / DisplayMetrics.DENSITY_DEFAULT);
}
}

View File

@@ -0,0 +1,205 @@
package h_mal.appttude.com.driver.SuperUser
import android.app.Activity
import android.content.Context
import android.util.DisplayMetrics
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.ImageView
import android.widget.TextView
import androidx.fragment.app.Fragment
import h_mal.appttude.com.driver.Global.FirebaseClass
import h_mal.appttude.com.driver.Global.SetApprovalDialog
import h_mal.appttude.com.driver.ui.driver.MainActivity
import h_mal.appttude.com.driver.Objects.ArchiveObject
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
import h_mal.appttude.com.driver.R
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.InsuranceFragment
import h_mal.appttude.com.driver.ui.driver.driverprofile.DriverLicenseFragment
import h_mal.appttude.com.driver.ui.driver.driverprofile.DriverProfileFragment
import h_mal.appttude.com.driver.ui.driver.driverprofile.PrivateHireLicenseFragment
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.LogbookFragment
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.MotFragment
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.PrivateHireVehicleFragment
import h_mal.appttude.com.driver.ui.driver.vehicleprofile.VehicleProfileFragment
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",
"Private Hire",
"Vehicle Profile",
"Insurance",
"MOT",
"Logbook",
"P/H Vehicle"
)
var approvalCode: Int = 0
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
var listItemView: View? = convertView
if (listItemView == null) {
listItemView = LayoutInflater.from(activity).inflate(
R.layout.approval_list_grid_item, parent, false
)
}
// approvalCode = getApprovalStatusCode(position)
// val textView: TextView = listItemView!!.findViewById(R.id.approval_text)
// textView.text = names.get(position)
// val imageView: ImageView = listItemView.findViewById(R.id.approval_iv)
// imageView.setImageResource(
// MainActivity.approvalsClass!!.setImageResource(
// approvalCode
// )
// )
// 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,
// it
// )
// 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
// }
//// executeFragment(ArchiveFragment(), mappedObject.userId, s)
// }
// }
// listItemView.setOnClickListener(View.OnClickListener { getFragment(position) })
// listItemView.minimumHeight = parent.height / 4
// listItemView.setPadding(
// convertDpToPixel(9f, context).toInt(),
// convertDpToPixel(9f, context).toInt(),
// convertDpToPixel(9f, context).toInt(),
// convertDpToPixel(9f, context).toInt()
// )
return (listItemView)!!
}
// override fun getCount(): Int {
// return 8
// }
//
// private fun getArchive(i: Int, archiveObject: ArchiveObject?): Int {
// var o: Any? = null
// val visible: Int
// when (i) {
// 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!!.ph_car
// }
// if (o != null) {
// visible = View.VISIBLE
// } else {
// visible = View.GONE
// }
// return visible
// }
//
// private fun getFragment(i: Int) {
// 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()
// driverProfile?.driver_profile
// }
// 1 -> {
// f = DriverLicenseFragment()
// driverProfile?.driver_license
// }
// 2 -> {
// f = PrivateHireLicenseFragment()
// driverProfile?.private_hire
// }
// 3 -> {
// f = VehicleProfileFragment()
// vehicleProfile?.vehicle_details
// }
// 4 -> {
// f = InsuranceFragment()
// vehicleProfile?.insurance_details
// }
// 5 -> {
// f = MotFragment()
// vehicleProfile?.insurance_details
// }
// 6 -> {
// f = LogbookFragment()
// vehicleProfile?.log_book
// }
// 7 -> {
// f = PrivateHireVehicleFragment()
// vehicleProfile?.privateHireVehicleObject
// }
// else -> null
// }
// if (o == null) {
//// executeFragment(f, mappedObject.userId)
// } else {
// MainActivity.archiveClass.openDialogArchive(
// context, o, mappedObject.userId, f
// )
// }
// }
//
// private fun getApprovalStatusCode(i: Int): Int {
// 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 ?: FirebaseClass.NO_DATE_PRESENT
// }
//
// companion object {
// fun convertDpToPixel(dp: Float, context: Context): Float {
// return dp * (context.resources
// .displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)
// }
// }
}

View File

@@ -0,0 +1,107 @@
package h_mal.appttude.com.driver.SuperUser
import android.app.AlertDialog
import android.content.Context
import android.view.View
import androidx.cardview.widget.CardView
class DriverStatusClass : View.OnClickListener {
var userId: String? = null
var cardView: CardView? = null
var context: Context? = null
var currentSelection: Boolean = false
override fun onClick(v: View) {
val choices: Array<String> = arrayOf("Active", "Inactive")
val alertDialog: AlertDialog.Builder = AlertDialog.Builder(context)
var selection: Int = -1
if (currentSelection) {
selection = 0
} else if (!currentSelection) {
selection = 1
}
alertDialog.setSingleChoiceItems(
choices,
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 { task ->
// if (task.isSuccessful) {
// cardView!!.setBackgroundColor(setStatusColour(status))
// } else {
// }
// }
}
private fun setStatusColour(b: Boolean): Int {
if (b) {
return android.R.color.holo_green_dark
} else {
return android.R.color.holo_red_dark
}
} // public int getOverApprovalStatusCode(WholeDriverObject wholeDriverObject){
//
// if (wholeDriverObject.approvalsObject != null){
// ApprovalsObject approvalsObject = wholeDriverObject.approvalsObject;
//
// int[] ints = new int[]{approvalsObject.getDriver_details_approval(),
// approvalsObject.driver_license_approval,
// approvalsObject.private_hire_approval,
// approvalsObject.vehicle_details_approval,
// approvalsObject.insurance_details_approval,
// approvalsObject.mot_details_approval,
// approvalsObject.log_book_approval,
// approvalsObject.ph_car_approval};
//
//
// return setImageResource(mode(ints));
// }
//
// return setImageResource(NO_DATE_PRESENT);
// }
//
// public void setStatusCode(String userId,String approvalNameString,int status){
//
// if (!approvalNameString.equals("")) {
// mDatabase.child(USER_FIREBASE).child(userId).child(USER_APPROVALS).child(approvalNameString)
// .setValue(status).addOnCompleteListener(new OnCompleteListener<Void>() {
// @Override
// public void onComplete(@NonNull Task<Void> task) {
// if (task.isSuccessful()) {
//
// } else {
//
// }
// }
// });
// }
//
//
// }
//
// public int setImageResource(int statusCode){
// int imageResource;
//
// switch (statusCode){
// case APPROVAL_PENDING:
// imageResource = R.drawable.pending;
// break;
// case APPROVAL_DENIED:
// imageResource = R.drawable.denied;
// break;
// case APPROVED:
// imageResource = R.drawable.approved;
// break;
// default:
// imageResource = R.drawable.zero;
// break;
// }
//
// return imageResource;
// }
}

View File

@@ -1,182 +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.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.database.DatabaseReference;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.util.List;
import h_mal.appttude.com.driver.Objects.UserObject;
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.ExecuteFragment.executeFragment;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_NUMBER;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.imageViewClass;
import static h_mal.appttude.com.driver.MainActivity.loadImage;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
public class ListViewSuperAdapter extends ArrayAdapter<MappedObject> {
public ListViewSuperAdapter(@NonNull Context context, @NonNull List<MappedObject> objects) {
super(context, 0, objects);
}
@NonNull
@Override
public View getView(int i, @Nullable View convertView, @NonNull ViewGroup parent) {
View listItemView = convertView;
if (listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(
R.layout.list_item_layout, parent, false);
}
Log.i("getviewposition", "getView: pos = " + i);
final ImageView profilePicImage = listItemView.findViewById(R.id.driverPic);
final ProgressBar progressBar = listItemView.findViewById(R.id.pb_su_list);
TextView userNameTextView = listItemView.findViewById(R.id.username_text);
TextView userEmailTextView = listItemView.findViewById(R.id.emailaddress_text);
ImageView profileApprovalImage = listItemView.findViewById(R.id.approval_iv);
final TextView driverNo = listItemView.findViewById(R.id.driver_no);
final MappedObject mappedObject = getItem(i);
final UserObject object = mappedObject.getWholeDriverObject().getUser_details();
if (object.profilePicString != null){
Picasso.get()
.load(object.getProfilePicString())
.resize(128,128)
.placeholder(R.drawable.choice_img_round)
.into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
progressBar.setVisibility(View.GONE);
profilePicImage.setImageBitmap(bitmap);
}
@Override
public void onBitmapFailed(Exception e, Drawable errorDrawable) {
progressBar.setVisibility(View.GONE);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
progressBar.setVisibility(View.VISIBLE);
}
});
}else {
profilePicImage.setImageResource(R.drawable.choice_img_round);
}
userNameTextView.setText(object.getProfileName());
userEmailTextView.setText(object.getProfileEmail());
if (mappedObject.getWholeDriverObject().driver_number == null){
driverNo.setText("0");
}else {
String s = String.valueOf(mappedObject.getWholeDriverObject().getDriver_number());
driverNo.setText(s);
}
driverNo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
final EditText input = new EditText(getContext());
LinearLayout layout = new LinearLayout(getContext());
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(28,0,56,0);
input.setText(driverNo.getText().toString());
input.setSelectAllOnFocus(true);
layout.addView(input);
builder.setTitle("Change Driver Number")
.setView(layout)
.setPositiveButton("Submit", new DialogInterface.OnClickListener() {
@Override
public void onClick(final DialogInterface dialog, int which) {
DatabaseReference reference = mDatabase.child(USER_FIREBASE).child(mappedObject.getUserId())
.child(DRIVER_NUMBER);
Log.i("Dialog Driver no", "onClick: " + reference.toString());
reference.setValue(input.getText().toString()).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Toast.makeText(getContext(), "Driver Number Changed", Toast.LENGTH_SHORT).show();
dialog.dismiss();
notifyDataSetChanged();
Log.i("Dialog Driver no", "onComplete: " + task.getResult());
}else {
Log.e("Dialog Driver no", "onComplete: ", task.getException());
}
}
});
}
}
).create()
.show();
}
});
profileApprovalImage.setImageResource(
approvalsClass.getOverApprovalStatusCode(mappedObject.getWholeDriverObject()));
listItemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = new Bundle();
bundle.putParcelable("mapped",mappedObject);
executeFragment(new UserMainFragment(),bundle);
}
});
return listItemView;
}
private boolean hasImage(@NonNull ImageView view) {
Drawable drawable = view.getDrawable();
boolean hasImage = (drawable != null);
if (hasImage && (drawable instanceof BitmapDrawable)) {
hasImage = ((BitmapDrawable)drawable).getBitmap() != null;
}
return hasImage;
}
}

View File

@@ -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.ui.driver.MainActivity
import h_mal.appttude.com.driver.Objects.UserObject
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
import h_mal.appttude.com.driver.R
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)
}
}
}

View File

@@ -1,49 +0,0 @@
package h_mal.appttude.com.driver.SuperUser;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import android.widget.ListView;
import h_mal.appttude.com.driver.Archive.ArchiveFragment;
import h_mal.appttude.com.driver.Global.ExecuteFragment;
import h_mal.appttude.com.driver.MainActivity;
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject;
import h_mal.appttude.com.driver.R;
public class UserMainFragment extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_user_main, container, false);
Log.i("UserMain", "onCreateView: height = " + view.getHeight());
MappedObject mappedObject = getArguments().getParcelable("mapped");
getActivity().setTitle(mappedObject.getWholeDriverObject().getUser_details().getProfileName());
// ListView listView = view.findViewById(R.id.approvals_list);
GridView listView = view.findViewById(R.id.approvals_list);
listView.setAdapter(new ApprovalListAdapter(getActivity(), new MappedObject[]{mappedObject}));
return view;
}
}

View File

@@ -0,0 +1,30 @@
package h_mal.appttude.com.driver.SuperUser
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.GridView
import androidx.fragment.app.Fragment
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
import h_mal.appttude.com.driver.R
class UserMainFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val view: View = inflater.inflate(R.layout.fragment_user_main, container, false)
Log.i("UserMain", "onCreateView: height = " + view.height)
val mappedObject: MappedObject = requireArguments().getParcelable<MappedObject>("mapped")
activity?.title = mappedObject.wholeDriverObject?.user_details?.profileName
val listView: GridView = view.findViewById(R.id.approvals_list)
listView.adapter = ApprovalListAdapter(requireActivity(), arrayOf(mappedObject))
return view
}
}

View File

@@ -1,186 +0,0 @@
package h_mal.appttude.com.driver.SuperUser;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject;
import h_mal.appttude.com.driver.Objects.WholeDriverObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.MainActivity.approvalsClass;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
import static h_mal.appttude.com.driver.MainActivity.printObjectAsJson;
import static h_mal.appttude.com.driver.MainActivity.viewController;
public class homeSuperUserFragment extends Fragment {
DatabaseReference users;
ListViewSuperAdapter listViewSuperAdapter;
List<MappedObject> mappedObjectList;
private SharedPreferences sharedPreferences;
private int sortOrder;
private boolean sortDesc;
private static final String SORT = "SORT";
private static final String REVERSED = "REVERSED";
private static final String TAG = "homeSuperUserFragment";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
users = mDatabase.child(USER_FIREBASE);
mappedObjectList = new ArrayList<>();
viewController.progress(View.VISIBLE);
users.addValueEventListener(valueEventListener);
sharedPreferences = getActivity().getSharedPreferences("PREFS", 0);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_home_super_user, container, false);
final ListView list = view.findViewById(R.id.list_view_super);
listViewSuperAdapter = new ListViewSuperAdapter(getContext(),mappedObjectList);
list.setAdapter(listViewSuperAdapter);
return view;
}
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
mappedObjectList.clear();
Log.i("Count " ,""+snapshot.getChildrenCount());
for (DataSnapshot postSnapshot: snapshot.getChildren()) {
if (postSnapshot.child("role").getValue().toString().equals("driver")){
printObjectAsJson("object",postSnapshot.toString());
mappedObjectList.add(new MappedObject(postSnapshot.getKey(),postSnapshot.getValue(WholeDriverObject.class)));
}
}
sortDate(sortOrder,sortDesc);
viewController.progress(View.GONE);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
viewController.progress(View.GONE);
}
};
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_calls_fragment, menu);
super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == R.id.archive){
final String[] grpname = {"Driver Name","Driver Number","Approval"};
sortOrder = sharedPreferences.getInt(SORT,0);
int checkedItem = sortOrder;
final int[] compareInt = {0};
final AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("Sort by:")
.setSingleChoiceItems(grpname, checkedItem, new DialogInterface
.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
switch (item) {
case 0:
compareInt[0] = 0;
return;
case 1:
compareInt[0] = 1;
return;
case 2:
compareInt[0] = 2;
}
}
}).setPositiveButton("Ascending", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
sortDate(compareInt[0],false);
dialog.dismiss();
}
}).setNegativeButton("Descending", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
sortDate(compareInt[0],true);
dialog.dismiss();
}
})
.create().show();
}
return super.onOptionsItemSelected(item);
}
private void sortDate(final int compareInt, boolean reversed){
Log.i(TAG, "sortDate: " + compareInt + " - " + reversed);
Comparator<MappedObject> comparator = new Comparator<MappedObject>() {
@Override
public int compare(MappedObject o1, MappedObject o2) {
switch (compareInt){
case 0:
return o1.getWholeDriverObject().getUser_details().getProfileName().compareTo(
o2.getWholeDriverObject().getUser_details().getProfileName());
case 1:
return o1.getWholeDriverObject().getDriver_number()
.compareTo(o2.getWholeDriverObject().getDriver_number());
case 2:
return approvalsClass.getOverApprovalStatusCode(o1.wholeDriverObject) -
approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject);
default:
return approvalsClass.getOverApprovalStatusCode(o1.wholeDriverObject) -
approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject);
}
}
};
sharedPreferences.edit().putInt(SORT,compareInt).apply();
sharedPreferences.edit().putBoolean(REVERSED,reversed).apply();
if (reversed){
Collections.sort(mappedObjectList,comparator.reversed());
}else {
Collections.sort(mappedObjectList,comparator);
}
listViewSuperAdapter.notifyDataSetChanged();
}
}

View File

@@ -0,0 +1,152 @@
package h_mal.appttude.com.driver.SuperUser
import android.app.AlertDialog
import android.content.DialogInterface
import android.content.SharedPreferences
import android.os.Bundle
import android.util.Log
import android.view.*
import androidx.fragment.app.Fragment
import androidx.recyclerview.widget.LinearLayoutManager
import com.google.firebase.database.DataSnapshot
import com.google.firebase.database.DatabaseError
import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.ValueEventListener
import h_mal.appttude.com.driver.ui.driver.MainActivity
import h_mal.appttude.com.driver.Objects.WholeDriverObject
import h_mal.appttude.com.driver.Objects.WholeObject.MappedObject
import h_mal.appttude.com.driver.R
import kotlinx.android.synthetic.main.fragment_home_super_user.*
import java.io.IOException
import java.util.*
class homeSuperUserFragment : Fragment() {
var users: DatabaseReference? = null
var mappedObjectList: MutableList<MappedObject>? = null
private var sharedPreferences: SharedPreferences? = null
private var sortOrder: Int = 0
private val sortDesc: Boolean = false
private var recyclerViewAdapter: RecyclerViewAdapter? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
mappedObjectList = ArrayList()
users!!.addValueEventListener(valueEventListener)
sharedPreferences = requireActivity().getSharedPreferences("PREFS", 0)
}
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_super_user, container, false)
recycler_view.apply {
layoutManager = LinearLayoutManager(context)
recyclerViewAdapter = RecyclerViewAdapter(context, mappedObjectList)
adapter = recyclerViewAdapter
}
return view
}
var valueEventListener: ValueEventListener = object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
mappedObjectList!!.clear()
Log.i("Count ", "" + snapshot.childrenCount)
for (postSnapshot: DataSnapshot in snapshot.children) {
if ((postSnapshot.child("role").value.toString() == "driver")) {
mappedObjectList!!.add(
MappedObject(
postSnapshot.key, postSnapshot.getValue(
WholeDriverObject::class.java
)
)
)
}
}
sortDate(sortOrder, sortDesc)
}
override fun onCancelled(databaseError: DatabaseError) {
}
}
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
inflater.inflate(R.menu.menu_calls_fragment, menu)
super.onCreateOptionsMenu(menu, inflater)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
if (item.itemId == R.id.archive) {
val grpname: Array<String> = arrayOf("Driver Name", "Driver Number", "Approval")
sortOrder = sharedPreferences!!.getInt(SORT, 0)
val checkedItem: Int = sortOrder
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
) { _, pos -> compareInt = pos }
.setPositiveButton("Ascending", click)
.setNegativeButton("Descending", click)
.create().show()
}
return super.onOptionsItemSelected(item)
}
private fun sortDate(compareInt: Int, reversed: Boolean) {
val comparator: Comparator<MappedObject> = object : Comparator<MappedObject> {
override fun compare(o1: MappedObject, o2: MappedObject): Int {
when (compareInt) {
0 -> return o1.wholeDriverObject?.user_details?.profileName!!.compareTo(
o2.wholeDriverObject?.user_details?.profileName!!
)
1 -> {
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.wholeDriverObject?.driver_number == null || (o2.wholeDriverObject!!
.driver_number == "0")
) {
s2 = ";"
}
return s1!!.compareTo((s2)!!)
}
else -> { throw IOException("dfdfs") }
// 2 -> return MainActivity.approvalsClass.getOverApprovalStatusCode(o1.wholeDriverObject) -
// MainActivity.approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject)
// else -> return MainActivity.approvalsClass.getOverApprovalStatusCode(
// o1.wholeDriverObject
// ) - MainActivity.approvalsClass.getOverApprovalStatusCode(o2.wholeDriverObject)
}
}
}
sharedPreferences!!.edit().putInt(SORT, compareInt).apply()
sharedPreferences!!.edit().putBoolean(REVERSED, reversed).apply()
if (reversed) {
Collections.sort(mappedObjectList, comparator.reversed())
} else {
Collections.sort(mappedObjectList, comparator)
}
recyclerViewAdapter!!.notifyDataSetChanged()
}
companion object {
private val SORT: String = "SORT"
private val REVERSED: String = "REVERSED"
}
}

View File

@@ -1,208 +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.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
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.MainActivity;
import h_mal.appttude.com.driver.R;
/**
* A login screen that offers login via email/password.
*/
public class LoginActivity extends AppCompatActivity{
private String TAG = "LoginActivity";
private FirebaseAuth auth;
// UI references.
private EditText mEmailView;
private EditText mPasswordView;
private View mProgressView;
private View mLoginView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
auth = FirebaseAuth.getInstance();
// Set up the login form.
mEmailView = findViewById(R.id.email);
mPasswordView = (EditText) findViewById(R.id.password);
mPasswordView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int id, KeyEvent keyEvent) {
if (id == EditorInfo.IME_ACTION_DONE || id == EditorInfo.IME_NULL) {
attemptLogin();
return true;
}
return false;
}
});
Button mEmailSignInButton = (Button) findViewById(R.id.email_sign_in_button);
mEmailSignInButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
attemptLogin();
}
});
mProgressView = findViewById(R.id.login_progress);
mLoginView = findViewById(R.id.email_login_form);
TextView register = findViewById(R.id.register_button);
register.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplication(),RegisterActivity.class);
startActivity(intent);
}
});
TextView forgotPw = findViewById(R.id.forgot);
forgotPw.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getApplication(),forgotPasswordActivity.class);
startActivity(intent);
}
});
}
/**
* Attempts to sign in or register the account specified by the login form.
* If there are form errors (invalid email, missing fields, etc.), the
* errors are presented and no actual login attempt is made.
*/
private void attemptLogin() {
if (auth == null) {
Toast.makeText(this, "Login invalid", Toast.LENGTH_SHORT).show();
return;
}
// Reset errors.
mEmailView.setError(null);
mPasswordView.setError(null);
// Store values at the time of the login attempt.
String email = mEmailView.getText().toString();
String password = mPasswordView.getText().toString();
boolean cancel = false;
View focusView = null;
// Check for a valid password, if the user entered one.
if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) {
mPasswordView.setError(getString(R.string.error_invalid_password));
focusView = mPasswordView;
cancel = true;
}
// Check for a valid email address.
if (TextUtils.isEmpty(email)) {
mEmailView.setError(getString(R.string.error_field_required));
focusView = mEmailView;
cancel = true;
} else if (!isEmailValid(email)) {
mEmailView.setError(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(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
showProgress(false);
if (task.isSuccessful()){
Intent intent = new Intent(LoginActivity.this,MainActivity.class);
startActivity(intent);
finish();
}else {
Toast.makeText(LoginActivity.this, getString(R.string.login_failed), Toast.LENGTH_SHORT).show();
}
}
}
);
}
}
private boolean isEmailValid(String email) {
//TODO: Replace this with your own logic
return email.contains("@");
}
private boolean isPasswordValid(String password) {
//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 void showProgress(final boolean show) {
// 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.
int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime);
mLoginView.setVisibility(show ? View.GONE : View.VISIBLE);
mLoginView.animate().setDuration(shortAnimTime).alpha(
show ? 0 : 1).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mLoginView.setVisibility(show ? View.GONE : View.VISIBLE);
}
});
mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
mProgressView.animate().setDuration(shortAnimTime).alpha(
show ? 1 : 0).setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mProgressView.setVisibility(show ? View.VISIBLE : View.GONE);
}
});
}
}

View File

@@ -1,161 +0,0 @@
package h_mal.appttude.com.driver.User;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.UserProfileChangeRequest;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import h_mal.appttude.com.driver.MainActivity;
import h_mal.appttude.com.driver.Objects.UserObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
public class RegisterActivity extends AppCompatActivity {
private FirebaseAuth auth;
private EditText name;
private EditText email;
private EditText passwordTop;
private EditText passwordBottom;
private ProgressBar progressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
auth = FirebaseAuth.getInstance();
name = findViewById(R.id.name_register);
email = findViewById(R.id.email_register);
passwordTop = findViewById(R.id.password_top);
passwordBottom = findViewById(R.id.password_bottom);
progressBar = findViewById(R.id.pb);
Button submit = findViewById(R.id.email_sign_up);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String nameString = name.getText().toString().trim();
String emailText = email.getText().toString().trim();
String passwordText = passwordTop.getText().toString().trim();
String passwordTextBottom = passwordBottom.getText().toString().trim();
boolean cancel = false;
View focusView = null;
if (TextUtils.isEmpty(nameString)) {
name.setError(getString(R.string.error_field_required));
focusView = name;
cancel = true;
}
if (TextUtils.isEmpty(emailText)) {
email.setError(getString(R.string.error_field_required));
focusView = email;
cancel = true;
}
if (TextUtils.isEmpty(passwordText)) {
passwordTop.setError(getString(R.string.error_field_required));
focusView = passwordTop;
cancel = true;
}
if (TextUtils.isEmpty(passwordTextBottom)) {
passwordBottom.setError(getString(R.string.error_field_required));
focusView = passwordBottom;
cancel = true;
}
if (!TextUtils.isEmpty(passwordText) && !isPasswordValid(passwordText)) {
passwordTop.setError(getString(R.string.error_invalid_password));
focusView = passwordTop;
cancel = true;
}
if (!passwordText.equals(passwordTextBottom)){
passwordBottom.setError(getString(R.string.no_match_password));
focusView = passwordBottom;
cancel = true;
}
if (cancel) {
// There was an error; don't attempt login and focus the first
// form field with an error.
focusView.requestFocus();
} else {
progressBar.setVisibility(View.VISIBLE);
//create user
auth.createUserWithEmailAndPassword(emailText, passwordText)
.addOnCompleteListener(RegisterActivity.this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
progressBar.setVisibility(View.GONE);
if (!task.isSuccessful()) {
Toast.makeText(RegisterActivity.this, "Authentication failed." + task.getException(),
Toast.LENGTH_SHORT).show();
} else {
UserProfileChangeRequest.Builder profileUpdatesBuilder = new UserProfileChangeRequest.Builder();
if (!TextUtils.isEmpty(nameString)){
profileUpdatesBuilder.setDisplayName(nameString);
}
UserProfileChangeRequest profileUpdates = profileUpdatesBuilder.build();
auth.getCurrentUser().updateProfile(profileUpdates).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()){
Log.i("RegisterActivity", "onComplete: " + task.isSuccessful());
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()).child("role")
.setValue("driver");
mDatabase.child(USER_FIREBASE).child(auth.getCurrentUser().getUid()).child("user_details")
.setValue(new UserObject(auth.getCurrentUser().getDisplayName(),auth.getCurrentUser().getEmail(),null));
Intent intent = new Intent(RegisterActivity.this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
}
}
});
}
}
});
}
}
});
}
private boolean isPasswordValid(String password) {
//TODO: Replace this with your own logic
return password.length() > 6;
}
}

View File

@@ -1,59 +0,0 @@
package h_mal.appttude.com.driver.User;
import android.support.annotation.NonNull;
import android.support.v4.app.NavUtils;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import h_mal.appttude.com.driver.R;
public class forgotPasswordActivity extends AppCompatActivity {
String TAG = "forgotPasswordActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_forgot_password);
final EditText editText = findViewById(R.id.reset_pw);
final Button resetPw = findViewById(R.id.reset_pw_sign_up);
resetPw.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
resetPassword(editText.getText().toString().trim());
}
});
}
private void resetPassword(String emailAddress){
FirebaseAuth auth = FirebaseAuth.getInstance();
auth.sendPasswordResetEmail(emailAddress)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "Email sent.");
NavUtils.navigateUpFromSameTask(forgotPasswordActivity.this);
finish();
}else {
Toast.makeText(forgotPasswordActivity.this, "Could not reset Password", Toast.LENGTH_SHORT).show();
}
}
});
}
}

View File

@@ -1,251 +0,0 @@
package h_mal.appttude.com.driver.User;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.text.InputType;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.EmailAuthProvider;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.UserProfileChangeRequest;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.squareup.picasso.Picasso;
import h_mal.appttude.com.driver.Global.ImageSelectorDialog;
import h_mal.appttude.com.driver.Global.ImageSelectorResults;
import h_mal.appttude.com.driver.Global.ViewController;
import h_mal.appttude.com.driver.Objects.UserObject;
import h_mal.appttude.com.driver.R;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_DETAILS_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.DRIVER_FIREBASE;
import static h_mal.appttude.com.driver.Global.FirebaseClass.USER_FIREBASE;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.CAMERA_REQUEST;
import static h_mal.appttude.com.driver.Global.ImageSelectorDialog.MY_CAMERA_PERMISSION_CODE;
import static h_mal.appttude.com.driver.MainActivity.auth;
import static h_mal.appttude.com.driver.MainActivity.fragmentManager;
import static h_mal.appttude.com.driver.MainActivity.mDatabase;
public class profileFragment extends Fragment {
private String TAG = this.getClass().getSimpleName();
private TextView email;
private TextView name;
private TextView changePw;
private FirebaseUser user;
private DatabaseReference databaseReference;
private static final String EMAIL_CONSTANT = "Email Address";
private static final String PW_CONSTANT = "Password";
ViewController viewController;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewController = new ViewController(getActivity());
user = auth.getCurrentUser();
databaseReference = mDatabase.child(USER_FIREBASE).child(user.getUid())
.child(DRIVER_FIREBASE).child(DRIVER_DETAILS_FIREBASE)
.child("driverPic");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_profile, container, false);
email = view.findViewById(R.id.change_email);
name = view.findViewById(R.id.change_profile_name);
changePw = view.findViewById(R.id.change_pw);
Button button = view.findViewById(R.id.submit_profile);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fragmentManager.popBackStack();
}
});
name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder dialog = new AlertDialog.Builder(getContext());
dialog.setTitle("Update Username");
final EditText titleBox = new EditText(getContext());
titleBox.setText(user.getDisplayName());
dialog.setView(titleBox);
dialog.setPositiveButton("Update", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
updateProfile(titleBox.getText().toString().trim());
}
});
dialog.show();
}
});
email.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog(EMAIL_CONSTANT);
}
});
changePw.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showDialog(PW_CONSTANT);
}
});
return view;
}
private void updateProfile(String profileName){
UserProfileChangeRequest.Builder profileUpdatesBuilder = new UserProfileChangeRequest.Builder();
if (!TextUtils.isEmpty(profileName)){
profileUpdatesBuilder.setDisplayName(profileName);
}
UserProfileChangeRequest profileUpdates = profileUpdatesBuilder.build();
user.updateProfile(profileUpdates)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User profile updated.");
viewController.reloadDrawer();
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getContext(), "Update Failed", Toast.LENGTH_SHORT).show();
}
});
}
private void changeCredentials(String email, String password, final String changeText, final String selector){
// Get auth credentials from the user for re-authentication
AuthCredential credential = EmailAuthProvider
.getCredential(email, password); // Current Login Credentials \\
// Prompt the user to re-provide their sign-in credentials
user.reauthenticate(credential)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.d(TAG, "User re-authenticated.");
user = FirebaseAuth.getInstance().getCurrentUser();
if (selector.equals(EMAIL_CONSTANT)){
user.updateEmail(changeText)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User email address updated.");
Toast.makeText(getContext(), "Update Successful", Toast.LENGTH_SHORT).show();
viewController.reloadDrawer();
}
}
});
}
if (selector.equals(PW_CONSTANT)){
user.updatePassword(changeText)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User email address updated.");
Toast.makeText(getContext(), "Update Successful", Toast.LENGTH_SHORT).show();
}
}
});
}
}
});
}
private void showDialog(final String update){
//Make new Dialog
AlertDialog.Builder dialog = new AlertDialog.Builder(getContext());
dialog.setTitle("Update " + update);
LinearLayout layout = new LinearLayout(getContext());
layout.setOrientation(LinearLayout.VERTICAL);
layout.setPadding(28,0,56,0);
final EditText box1 = new EditText(getContext());
box1.setHint("Current Email Address");
box1.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
layout.addView(box1); // Notice this is an add method
final EditText box2 = new EditText(getContext());
box2.setHint("Current Password");
box2.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
layout.addView(box2); // Another add method
final EditText box3 = new EditText(getContext());
if (update.equals(PW_CONSTANT)){
box3.setInputType(InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
}else {
box3.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
}
box3.setHint("New " + update);
layout.addView(box3); // Another add method
dialog.setView(layout);
dialog.setPositiveButton("Update", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String email = box1.getText().toString().trim();
String password = box2.getText().toString().trim();
String textThree = box3.getText().toString().trim();
changeCredentials(email,password,textThree,update);
}
});
dialog.show();
}
}

View File

@@ -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 auth: FirebaseAuthSource,
private val database: FirebaseDatabaseSource,
private val storage: FirebaseStorageSource
) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T {
with(modelClass){
return when{
isAssignableFrom(UserViewModel::class.java) -> UserViewModel(auth)
isAssignableFrom(MainViewModel::class.java) -> MainViewModel(auth, database)
isAssignableFrom(UpdateUserViewModel::class.java) -> UpdateUserViewModel(auth, storage)
isAssignableFrom(DriverLicenseViewModel::class.java) -> DriverLicenseViewModel(auth, database, storage)
isAssignableFrom(DriverProfileViewModel::class.java) -> DriverProfileViewModel(auth, database, storage)
isAssignableFrom(PrivateHireLicenseViewModel::class.java) -> PrivateHireLicenseViewModel(auth, database, storage)
isAssignableFrom(VehicleProfileViewModel::class.java) -> VehicleProfileViewModel(auth, database, storage)
isAssignableFrom(InsuranceViewModel::class.java) -> InsuranceViewModel(auth, database, storage)
isAssignableFrom(MotViewModel::class.java) -> MotViewModel(auth, database, storage)
isAssignableFrom(LogbookViewModel::class.java) -> LogbookViewModel(auth, database, storage)
isAssignableFrom(PrivateHireVehicleViewModel::class.java) -> PrivateHireVehicleViewModel(auth, database, storage)
else -> throw IllegalArgumentException("Unknown ViewModel class")
} as T
}
}
}

View File

@@ -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()) }
}
}

View File

@@ -0,0 +1,123 @@
package h_mal.appttude.com.driver.base
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams
import android.view.ViewGroup.LayoutParams.*
import androidx.activity.viewModels
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)
private var loading: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
configureObserver()
setContentView(layoutId)
}
/**
* Creates a loading view which to be shown during async operations
*
* #setOnClickListener(null) is an ugly work around to prevent under being clicked during
* loading
*/
private fun instantiateLoadingView(){
loadingView = layoutInflater.inflate(R.layout.progress_layout, null)
loadingView.setOnClickListener(null)
addContentView(loadingView, LayoutParams(MATCH_PARENT, MATCH_PARENT))
loadingView.hide()
}
override fun onStart() {
super.onStart()
instantiateLoadingView()
}
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()
}
}

View File

@@ -0,0 +1,145 @@
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 { clip ->
val list = clip.takeIf { it.size > 10 }?.let{
clip.subList(0, 9)
} ?: clip
onImageGalleryResult(list)
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)
}
}

View File

@@ -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
}
}
}
}

View File

@@ -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
}
}

View File

@@ -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() } }
}

View File

@@ -0,0 +1,7 @@
package h_mal.appttude.com.driver.data
sealed class DataFieldState {
object DefaultState : DataFieldState()
object NonUserStateUpdated: DataFieldState()
object UserUpdateState: DataFieldState()
}

View File

@@ -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()
}

View File

@@ -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()
}

View File

@@ -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>?
}

View File

@@ -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()
}

View File

@@ -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)
}

Some files were not shown because too many files have changed in this diff Show More