This commit is contained in:
2026-03-03 16:30:57 +07:00
parent a13304e40e
commit c253e1a370
7569 changed files with 1324841 additions and 0 deletions

9
OnTime_Driver_live/.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
*.iml
.gradle
/local.properties
/.idea/workspace.xml
/.idea/libraries
.DS_Store
/build
/captures
.externalNativeBuild

1
OnTime_Driver_live/app/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/build

View File

@@ -0,0 +1,94 @@
apply plugin: 'com.android.application'
apply plugin: 'realm-android'
android {
namespace "id.ontime.driver"
signingConfigs {
debug {
// Use default debug keystore on this machine
}
}
compileSdk 33
defaultConfig {
applicationId "id.ontime.driver"
minSdkVersion 21
targetSdkVersion 33
versionCode 10
versionName '1.1.0'
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
productFlavors {
}
buildTypes {
release {
signingConfig signingConfigs.debug
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
signingConfig signingConfigs.debug
}
}
lintOptions {
checkReleaseBuilds false
abortOnError false
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation('com.mikepenz:fastadapter:2.0.0@aar') {
transitive = true
}
//noinspection GradleCompatible
implementation 'com.google.android.gms:play-services-location:19.0.1'
implementation 'com.google.android.libraries.places:places:2.5.0'
implementation 'com.google.android.gms:play-services-maps:18.0.2'
implementation 'com.google.android.gms:play-services-auth:20.1.0'
implementation 'com.google.firebase:firebase-database:20.0.3'
implementation 'com.google.firebase:firebase-storage:20.0.0'
implementation 'com.google.firebase:firebase-core:20.1.0'
implementation 'com.google.firebase:firebase-messaging:20.2.0'
implementation 'com.google.firebase:firebase-auth:19.3.1'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.multidex:multidex:2.0.1'
implementation 'com.facebook.shimmer:shimmer:0.1.0@aar'
implementation 'com.google.guava:guava:25.0-android'
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'
implementation 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0'
implementation 'me.relex:circleindicator:1.2.1@aar'
implementation 'com.squareup.okhttp3:okhttp:5.0.0-alpha.2'
implementation 'com.facebook.shimmer:shimmer:0.1.0@aar'
implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation 'com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2'
implementation 'com.mobsandgeeks:android-saripaar:2.0.3'
implementation 'net.the4thdimension:audio-wife:1.0.3'
implementation 'org.greenrobot:eventbus:3.0.0'
implementation 'com.makeramen:roundedimageview:2.2.1'
implementation 'com.squareup.picasso:picasso:2.5.2'
implementation 'com.github.siyamed:android-shape-imageview:0.9.3'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'de.hdodenhof:circleimageview:3.1.0'
implementation 'com.github.yesterselga:country-picker-android:1.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'com.wdullaer:materialdatetimepicker:3.2.0'
implementation 'org.jsoup:jsoup:1.11.3'
implementation "androidx.exifinterface:exifinterface:1.3.3"
testImplementation 'junit:junit:4.13.2'
}
apply plugin: 'com.google.gms.google-services'

View File

@@ -0,0 +1,10 @@
# ButterKnife config start
# Retain generated class which implement Unbinder.
-keep public class * implements butterknife.Unbinder { public <init>(...); }
# Prevent obfuscation of types which use ButterKnife annotations since the simple name
# is used to reflectively look up the generated ViewBinding.
-keep class butterknife.*
-keepclasseswithmembernames class * { @butterknife.* <methods>; }
-keepclasseswithmembernames class * { @butterknife.* <fields>; }
# ButterKnife config end

View File

@@ -0,0 +1,31 @@
# Configuration for Guava 18.0
#
# disagrees with instructions provided by Guava project: https://code.google.com/p/guava-libraries/wiki/UsingProGuardWithGuava
-keep class com.google.common.io.Resources {
public static <methods>;
}
-keep class com.google.common.collect.Lists {
public static ** reverse(**);
}
-keep class com.google.common.base.Charsets {
public static <fields>;
}
-keep class com.google.common.base.Joiner {
public static com.google.common.base.Joiner on(java.lang.String);
public ** join(...);
}
-keep class com.google.common.collect.MapMakerInternalMap$ReferenceEntry
-keep class com.google.common.cache.LocalCache$ReferenceEntry
# http://stackoverflow.com/questions/9120338/proguard-configuration-for-guava-with-obfuscation-and-optimization
-dontwarn javax.annotation.**
-dontwarn javax.inject.**
-dontwarn sun.misc.Unsafe
# Guava 19.0
-dontwarn java.lang.ClassValue
-dontwarn com.google.j2objc.annotations.Weak
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement

View File

@@ -0,0 +1,7 @@
# OkHttp
-keepattributes Signature
-keepattributes *Annotation*
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-dontwarn okhttp3.**
-dontwarn okio.**

View File

@@ -0,0 +1,141 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in D:\bradhawk\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
#-dontwarn ourdevelopsgoeks.**
# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
#-dontwarn retrofit2.**
#-keep class retrofit2.** { *; }
#-keepattributes Signature
#-keepattributes Exceptions
#
-dontwarn com.squareup.picasso.**
#-keep class co.squareup.picasso.** { *; }
#
#-dontwarn co.google.common.**
#-keep class co.google.common.** { *; }
#
#-dontwarn okio.**
#-keep class okio.** { *; }
#
#-dontwarn android.**
#-keep class android.** { *; }
#
#-dontwarn android.content.**
#-keep class android.content.** { *; }
##
#-dontwarn android.graphics.**
#-keep class android.graphics.** { *; }
##
#-dontwarn android.util.**
#-keep class android.util.** { *; }
##
#-dontwarn android.view.**
#-keep class android.view.** { *; }
#
-dontwarn com.balqisstuido.goeks.**
-keep class ourdevelops.goeks.** { *; }
#
## Optimization is turned off by default. Dex does not like code run
## through the ProGuard optimize and preverify steps (and performs some
## of these optimizations on its own).
##-dontoptimize
##-dontpreverify
#
## If you want to enable optimization, you should include the
## following:
#-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
#-optimizationpasses 5
#-allowaccessmodification
##
## Note that you cannot just include these flags in your own
## configuration file; if you are including this file, optimization
## will be turned off. You'll need to either edit this file, or
## duplicate the contents of this file and remove the include of this
## file from your project's proguard.config path property.
#
#-keep public class * extends android.app.Activity
#-keep public class * extends android.app.Application
#-keep public class * extends android.app.Service
#-keep public class * extends android.content.BroadcastReceiver
#-keep public class * extends android.content.ContentProvider
#-keep public class * extends android.app.backup.BackupAgent
#-keep public class * extends android.preference.Preference
#-keep public class * extends android.support.v4.app.Fragment
#-keep public class * extends android.support.v4.app.DialogFragment
#-keep public class * extends co.actionbarsherlock.app.SherlockListFragment
#-keep public class * extends co.actionbarsherlock.app.SherlockFragment
#-keep public class * extends co.actionbarsherlock.app.SherlockFragmentActivity
#-keep public class * extends android.app.Fragment
#-keep public class co.android.vending.licensing.ILicensingService
#
## For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
#-keepclasseswithmembernames class * {
# native <methods>;
#}
#
#-keep public class * extends android.view.View {
# public <init>(android.content.Context);
# public <init>(android.content.Context, android.util.AttributeSet);
# public <init>(android.content.Context, android.util.AttributeSet, int);
# public void set*(...);
#}
#
#-keepclasseswithmembers class * {
# public <init>(android.content.Context, android.util.AttributeSet);
#}
#
#-keepclasseswithmembers class * {
# public <init>(android.content.Context, android.util.AttributeSet, int);
#}
#
#-keepclassmembers class * extends android.app.Activity {
# public void *(android.view.View);
#}
#
## For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
#-keepclassmembers enum * {
# public static **[] values();
# public static ** valueOf(java.lang.String);
#}
#
#-keep class * implements android.os.Parcelable {
# public static final android.os.Parcelable$Creator *;
#}
#
#-keepclassmembers class **.R$* {
# public static <fields>;
#}
#
#-keep class android.support.v4.app.** { *; }
#-keep interface android.support.v4.app.** { *; }
#-keep class co.actionbarsherlock.** { *; }
#-keep interface co.actionbarsherlock.** { *; }
## The support library contains references to newer platform versions.
## Don't warn about those in case this app is linking against an older
## platform version. We know about them, and they are safe.
#-dontwarn android.support.**
#-dontwarn co.google.ads.**

View File

@@ -0,0 +1,20 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "id.ontime.driver",
"variantName": "release",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 10,
"versionName": "1.1.0",
"outputFile": "app-release.apk"
}
],
"elementType": "File"
}

View File

@@ -0,0 +1,10 @@
# Platform calls Class.forName on types which do not exist on Android to determine platform.
-dontnote retrofit2.Platform
# Platform used when running on RoboVM on iOS. Will not be used at runtime.
-dontnote retrofit2.Platform$IOS$MainThreadExecutor
# Platform used when running on Java 8 VMs. Will not be used at runtime.
-dontwarn retrofit2.Platform$Java8
# Retain generic type information for use by reflection by converters and adapters.
-keepattributes Signature
# Retain declared checked exceptions for use by a Proxy instance.
-keepattributes Exceptions

View File

@@ -0,0 +1,2 @@
-keep class com.mobsandgeeks.saripaar.** {*;}
-keep @com.mobsandgeeks.saripaar.annotation.ValidateUsing class * {*;}

View File

@@ -0,0 +1,176 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="id.ontime.driver"
android:installLocation="auto">
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
tools:ignore="ScopedStorage" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<application
android:name="id.ontime.driver.constants.BaseApp"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:largeHeap="true"
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="false"
android:theme="@style/AppTheme"
tools:replace="android:supportsRtl"
tools:targetApi="n">
<activity
android:name="id.ontime.driver.activity.ConfirmWAActivity"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name="id.ontime.driver.activity.NewOrderActivity"
android:screenOrientation="portrait"
android:theme="@style/Login_phone"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<receiver android:name="id.ontime.driver.utils.MyLocationService" />
<service android:name="id.ontime.driver.utils.api.service.MessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<activity
android:name="id.ontime.driver.activity.WalletActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/noActionBar"/>
<activity
android:name="id.ontime.driver.activity.ChatActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/noActionBar"/>
<activity
android:name="id.ontime.driver.activity.WithdrawActivity"
android:screenOrientation="portrait"
android:theme="@style/Login_phone"
android:exported="false"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity
android:name="id.ontime.driver.activity.SplashActivity"
android:exported="true"
android:noHistory="true"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="id.ontime.driver.activity.IntroActivity"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name="id.ontime.driver.activity.TopupSaldoActivity"
android:exported="false"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity
android:name="id.ontime.driver.activity.PrivacyActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/noActionBar" />
<activity
android:name="id.ontime.driver.activity.RegisterActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/noActionBar" />
<activity
android:name="id.ontime.driver.activity.OrderDetailActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/noActionBar" />
<activity
android:name="id.ontime.driver.activity.EditKendaraanActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/Login_phone" />
<activity
android:name="id.ontime.driver.activity.ChangepassActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/Login_phone" />
<activity
android:name="id.ontime.driver.activity.EditProfileActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/noActionBar" />
<activity
android:name="id.ontime.driver.activity.LoginActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/Login_phone"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity
android:name="id.ontime.driver.activity.LupapassActivity"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@style/Login_phone"
android:windowSoftInputMode="stateAlwaysHidden|adjustPan" />
<activity
android:name="id.ontime.driver.activity.MainActivity"
android:exported="false"
android:screenOrientation="portrait" />
<activity
android:name="com.google.firebase.auth.internal.FederatedSignInActivity"
android:excludeFromRecents="true"
android:exported="true"
android:launchMode="singleInstance"
android:permission="com.google.firebase.auth.api.gms.permission.LAUNCH_FEDERATED_SIGN_IN"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
tools:replace="android:launchMode" />
<service android:name="com.google.firebase.components.ComponentDiscoveryService"
android:exported="false"/>
<meta-data
android:name="com.google.firebase.components:com.google.firebase.auth.FirebaseAuthRegistrar"
android:value="com.google.firebase.components.ComponentRegistrar" />
<meta-data
android:name="com.google.firebase.components:com.google.firebase.analytics.connector.internal.AnalyticsConnectorRegistrar"
android:value="com.google.firebase.components.ComponentRegistrar" />
<meta-data
android:name="com.google.firebase.components:com.google.firebase.iid.Registrar"
android:value="com.google.firebase.components.ComponentRegistrar" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
</application>
</manifest>

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -0,0 +1,169 @@
package
customfonts;
import
android.content.Context;
import
android.graphics.Typeface;
import
android.util.AttributeSet;
public
class
AutoCompleteTextViewSFProDisplayRegular
extends
androidx.appcompat.widget.AppCompatAutoCompleteTextView
{
public
AutoCompleteTextViewSFProDisplayRegular(Context
context,
AttributeSet
attrs,
int
defStyle)
{
super(context,
attrs,
defStyle);
init();
}
public
AutoCompleteTextViewSFProDisplayRegular(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
init();
}
public
AutoCompleteTextViewSFProDisplayRegular(Context
context)
{
super(context);
init();
}
private
void
init()
{
if
(!isInEditMode())
{
setTypeface(Typeface.createFromAsset(getContext().getAssets(),
"fonts/Montserrat_SemiBold.ttf"));
}
}
}

View File

@@ -0,0 +1,169 @@
package
customfonts;
import
android.content.Context;
import
android.graphics.Typeface;
import
android.util.AttributeSet;
public
class
Button_SF_Pro_Display_Medium
extends
androidx.appcompat.widget.AppCompatButton
{
public
Button_SF_Pro_Display_Medium(Context
context,
AttributeSet
attrs,
int
defStyle)
{
super(context,
attrs,
defStyle);
init();
}
public
Button_SF_Pro_Display_Medium(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
init();
}
public
Button_SF_Pro_Display_Medium(Context
context)
{
super(context);
init();
}
private
void
init()
{
if
(!isInEditMode())
{
setTypeface(Typeface.createFromAsset(getContext().getAssets(),
"fonts/Montserrat_Bold.ttf"));
}
}
}

View File

@@ -0,0 +1,169 @@
package
customfonts;
import
android.content.Context;
import
android.graphics.Typeface;
import
android.util.AttributeSet;
public
class
EditTextSFProDisplayMedium
extends
androidx.appcompat.widget.AppCompatEditText
{
public
EditTextSFProDisplayMedium(Context
context,
AttributeSet
attrs,
int
defStyle)
{
super(context,
attrs,
defStyle);
init();
}
public
EditTextSFProDisplayMedium(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
init();
}
public
EditTextSFProDisplayMedium(Context
context)
{
super(context);
init();
}
private
void
init()
{
if
(!isInEditMode())
{
setTypeface(Typeface.createFromAsset(getContext().getAssets(),
"fonts/Montserrat_Bold.ttf"));
}
}
}

View File

@@ -0,0 +1,169 @@
package
customfonts;
import
android.content.Context;
import
android.graphics.Typeface;
import
android.util.AttributeSet;
public
class
EditTextSFProDisplayRegular
extends
androidx.appcompat.widget.AppCompatEditText
{
public
EditTextSFProDisplayRegular(Context
context,
AttributeSet
attrs,
int
defStyle)
{
super(context,
attrs,
defStyle);
init();
}
public
EditTextSFProDisplayRegular(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
init();
}
public
EditTextSFProDisplayRegular(Context
context)
{
super(context);
init();
}
private
void
init()
{
if
(!isInEditMode())
{
setTypeface(Typeface.createFromAsset(getContext().getAssets(),
"fonts/Montserrat_SemiBold.ttf"));
}
}
}

View File

@@ -0,0 +1,174 @@
package
customfonts;
import
android.annotation.SuppressLint;
import
android.content.Context;
import
android.graphics.Typeface;
import
android.util.AttributeSet;
import
android.widget.RadioButton;
@SuppressLint("AppCompatCustomView")
public
class
RadioButton_SF_Pro_Display_Medium
extends
RadioButton
{
public
RadioButton_SF_Pro_Display_Medium(Context
context,
AttributeSet
attrs,
int
defStyle)
{
super(context,
attrs,
defStyle);
init();
}
public
RadioButton_SF_Pro_Display_Medium(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
init();
}
public
RadioButton_SF_Pro_Display_Medium(Context
context)
{
super(context);
init();
}
private
void
init()
{
if
(!isInEditMode())
{
setTypeface(Typeface.createFromAsset(getContext().getAssets(),
"fonts/Montserrat_Bold.ttf"));
}
}
}

View File

@@ -0,0 +1,169 @@
package
customfonts;
import
android.content.Context;
import
android.graphics.Typeface;
import
android.util.AttributeSet;
public
class
TextViewSFProDisplayMedium
extends
androidx.appcompat.widget.AppCompatTextView
{
public
TextViewSFProDisplayMedium(Context
context,
AttributeSet
attrs,
int
defStyle)
{
super(context,
attrs,
defStyle);
init();
}
public
TextViewSFProDisplayMedium(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
init();
}
public
TextViewSFProDisplayMedium(Context
context)
{
super(context);
init();
}
private
void
init()
{
if
(!isInEditMode())
{
setTypeface(Typeface.createFromAsset(getContext().getAssets(),
"fonts/Montserrat_Bold.ttf"));
}
}
}

View File

@@ -0,0 +1,28 @@
package
customfonts;
import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
public class TextViewSFProDisplayRegular extends androidx.appcompat.widget.AppCompatTextView {
public TextViewSFProDisplayRegular(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
public TextViewSFProDisplayRegular(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public TextViewSFProDisplayRegular(Context context) {
super(context);
init();
}
private void init() {
if (!isInEditMode()) {
setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/Montserrat_SemiBold.ttf"));
}
}
}

View File

@@ -0,0 +1,168 @@
package id.ontime.driver.activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import id.ontime.driver.R;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.json.ChangePassRequestJson;
import id.ontime.driver.json.LoginResponseJson;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import id.ontime.driver.models.FirebaseToken;
import id.ontime.driver.models.User;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.Objects;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import io.realm.Realm;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class ChangepassActivity extends AppCompatActivity {
ImageView backbtn;
Button submit;
EditText pass, passbaru;
TextView notiftext;
RelativeLayout rlnotif, rlprogress;
String disableback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_changepassword);
backbtn = findViewById(R.id.back_btn_verify);
submit = findViewById(R.id.buttonconfirm);
pass = findViewById(R.id.password);
passbaru = findViewById(R.id.newpassword);
notiftext = findViewById(R.id.textnotif2);
rlnotif = findViewById(R.id.rlnotif2);
rlprogress = findViewById(R.id.rlprogress);
disableback = "false";
backbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (pass.getText().toString().isEmpty()) {
notif("old password cant be empty!");
} else if (passbaru.getText().toString().isEmpty()) {
notif("please input your new password!");
} else {
get();
}
}
});
}
private void get() {
progressshow();
ChangePassRequestJson request = new ChangePassRequestJson();
User loginuser = BaseApp.getInstance(ChangepassActivity.this).getLoginUser();
request.setNotelepon(loginuser.getNoTelepon());
request.setPassword(pass.getText().toString());
request.setNewPassword(passbaru.getText().toString());
DriverService service = ServiceGenerator.createService(DriverService.class, request.getNotelepon(), request.getPassword());
service.changepass(request).enqueue(new Callback<LoginResponseJson>() {
@Override
public void onResponse(@NonNull Call<LoginResponseJson> call,@NonNull Response<LoginResponseJson> response) {
progresshide();
if (response.isSuccessful()) {
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("found")) {
User user = response.body().getData().get(0);
saveUser(user);
finish();
} else {
notif(response.body().getMessage());
}
}
}
@Override
public void onFailure(@NonNull Call<LoginResponseJson> call,@NonNull Throwable t) {
progresshide();
t.printStackTrace();
notif("error");
}
});
}
public void progressshow() {
rlprogress.setVisibility(View.VISIBLE);
disableback = "true";
}
public void progresshide() {
rlprogress.setVisibility(View.GONE);
disableback = "false";
}
@Override
public void onBackPressed() {
if (!disableback.equals("true")) {
finish();
}
}
public void notif(String text) {
rlnotif.setVisibility(View.VISIBLE);
notiftext.setText(text);
new Handler().postDelayed(new Runnable() {
public void run() {
rlnotif.setVisibility(View.GONE);
}
}, 3000);
}
private void saveUser(User user) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.delete(User.class);
realm.copyToRealm(user);
realm.commitTransaction();
BaseApp.getInstance(ChangepassActivity.this).setLoginUser(user);
}
@SuppressWarnings("unused")
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onMessageEvent(FirebaseToken response) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.delete(FirebaseToken.class);
realm.copyToRealm(response);
realm.commitTransaction();
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,97 @@
package id.ontime.driver.activity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import id.ontime.driver.R;
import id.ontime.driver.utils.SettingPreference;
public class ConfirmWAActivity extends AppCompatActivity {
EditText nominaltopup, namabank, norekening, nama, nohp;
Button submit;
TextView notif;
ImageView backbtn, images;
RelativeLayout rlnotif, rlprogress;
String disableback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_confirm_wa);
disableback = "false";
nominaltopup = findViewById(R.id.nominaltopup);
namabank = findViewById(R.id.namabank);
norekening = findViewById(R.id.norekening);
nama = findViewById(R.id.nama);
nohp = findViewById(R.id.nohp);
backbtn = findViewById(R.id.back_btn);
submit = findViewById(R.id.submit);
rlnotif = findViewById(R.id.rlnotif);
notif = findViewById(R.id.textnotif);
rlprogress = findViewById(R.id.rlprogress);
images = findViewById(R.id.imagebackground);
submit.setOnClickListener(v -> {
String isinominal = nominaltopup.getText().toString();
String isinamabank = namabank.getText().toString();
String isinorekening = norekening.getText().toString();
String isinama = nama.getText().toString();
String isinohp = nohp.getText().toString();
// boolean installed = appInstalledOrNot("co.whatsapp");
// if (installed) {
SettingPreference sp = new SettingPreference(v.getContext());
String phoneNumber = sp.getSetting()[7];
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://api.whatsapp.com/send?phone=" + "+62" + phoneNumber + "&text=Hai admin, Saya mau Konfirmasi TOPUP saldo Driver %0A%0AJumlah Topup : " + isinominal + "%0ANama Bank : " + isinamabank +"%0ANo. Rekening saya: " + isinorekening + " %0AAtas Nama : " + isinama + " %0ANo. HP terdaftar : " +isinohp));
startActivity(intent);
// }else{
// Toast.makeText( ConfirmWAActivity.this, "install whatsapp agar bisa menghubungi team Admin", Toast.LENGTH_SHORT).show();
// }
});
backbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
/* private boolean appInstalledOrNot(String url) {
PackageManager packageManager = getPackageManager();
boolean app_installed;
try {
packageManager.getPackageInfo(url, packageManager.GET_ACTIVITIES);
app_installed = true;
} catch (PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed;
} */
public void onBackPressed() {
if (!disableback.equals("true")) {
finish();
}
}
public void progressshow() {
rlprogress.setVisibility(View.VISIBLE);
disableback = "true";
}
public void progresshide() {
rlprogress.setVisibility(View.GONE);
disableback = "false";
}
}

View File

@@ -0,0 +1,167 @@
package id.ontime.driver.activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import id.ontime.driver.R;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.json.LoginResponseJson;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import id.ontime.driver.json.EditKendaraanRequestJson;
import id.ontime.driver.models.FirebaseToken;
import id.ontime.driver.models.User;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.Objects;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import io.realm.Realm;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class EditKendaraanActivity extends AppCompatActivity {
ImageView backbtn;
EditText brand, type, platnomor, warna;
TextView notiftext;
RelativeLayout rlnotif, rlprogress;
String disableback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_editkendaraan);
User driver = BaseApp.getInstance(this).getLoginUser();
backbtn = findViewById(R.id.back_btn_verify);
brand = findViewById(R.id.brand);
type = findViewById(R.id.type);
platnomor = findViewById(R.id.platnomor);
warna = findViewById(R.id.color);
notiftext = findViewById(R.id.textnotif2);
rlnotif = findViewById(R.id.rlnotif2);
rlprogress = findViewById(R.id.rlprogress);
disableback = "false";
brand.setText(driver.getMerek());
type.setText(driver.getTipe());
platnomor.setText(driver.getNomorkendaraan());
warna.setText(driver.getWarna());
backbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
private void get() {
progressshow();
EditKendaraanRequestJson request = new EditKendaraanRequestJson();
User loginuser = BaseApp.getInstance(EditKendaraanActivity.this).getLoginUser();
request.setNoTelepon(loginuser.getNoTelepon());
request.setId(loginuser.getId());
request.setId_kendaraan(loginuser.getIdk());
request.setMerek(brand.getText().toString());
request.setTipe(type.getText().toString());
request.setNo_kendaraan(platnomor.getText().toString());
request.setWarna(warna.getText().toString());
DriverService service = ServiceGenerator.createService(DriverService.class, request.getNoTelepon(), loginuser.getPassword());
service.editKendaraan(request).enqueue(new Callback<LoginResponseJson>() {
@Override
public void onResponse(@NonNull Call<LoginResponseJson> call, @NonNull Response<LoginResponseJson> response) {
progresshide();
if (response.isSuccessful()) {
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("success")) {
User user = response.body().getData().get(0);
saveUser(user);
finish();
} else {
notif(response.body().getMessage());
}
}
}
@Override
public void onFailure(@NonNull Call<LoginResponseJson> call, @NonNull Throwable t) {
progresshide();
t.printStackTrace();
notif("error");
}
});
}
public void progressshow() {
rlprogress.setVisibility(View.VISIBLE);
disableback = "true";
}
public void progresshide() {
rlprogress.setVisibility(View.GONE);
disableback = "false";
}
@Override
public void onBackPressed() {
if (!disableback.equals("true")) {
finish();
}
}
public void notif(String text) {
rlnotif.setVisibility(View.VISIBLE);
notiftext.setText(text);
new Handler().postDelayed(new Runnable() {
public void run() {
rlnotif.setVisibility(View.GONE);
}
}, 3000);
}
private void saveUser(User user) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.delete(User.class);
realm.copyToRealm(user);
realm.commitTransaction();
BaseApp.getInstance(EditKendaraanActivity.this).setLoginUser(user);
}
@SuppressWarnings("unused")
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onMessageEvent(FirebaseToken response) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.delete(FirebaseToken.class);
realm.copyToRealm(response);
realm.commitTransaction();
}
}

View File

@@ -0,0 +1,503 @@
package id.ontime.driver.activity;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.cardview.widget.CardView;
import androidx.core.content.ContextCompat;
import androidx.appcompat.app.AppCompatActivity;
import android.text.TextUtils;
import android.util.Base64;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import id.ontime.driver.R;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.json.LoginResponseJson;
import id.ontime.driver.json.EditprofileRequestJson;
import id.ontime.driver.models.User;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import id.ontime.driver.utils.PicassoTrustAll;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.wdullaer.materialdatetimepicker.date.DatePickerDialog;
import com.ybs.countrypicker.CountryPicker;
import com.ybs.countrypicker.CountryPickerListener;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.Objects;
import androidx.exifinterface.media.ExifInterface;
import io.realm.Realm;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class EditProfileActivity extends AppCompatActivity {
ImageView foto, gantifoto, backbtn, backButtonverify;
EditText phone, nama, email;
TextView tanggal, countryCode, textnotif;
Button submit;
RelativeLayout rlnotif;
private SimpleDateFormat dateFormatter, dateFormatterview;
byte[] imageByteArray;
Bitmap decoded;
String dateview, disableback, onsubmit;
private final int GALLERY = 7;
private final int CAMERA = 8;
private BottomSheetDialog mBottomSheetDialog;
private BottomSheetBehavior mBehavior;
String country_iso_code = "en";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_editprofile);
View bottom_sheet = findViewById(R.id.bottom_sheet);
mBehavior = BottomSheetBehavior.from(bottom_sheet);
foto = findViewById(R.id.foto);
gantifoto = findViewById(R.id.editfoto);
backbtn = findViewById(R.id.back_btn);
phone = findViewById(R.id.phonenumber);
nama = findViewById(R.id.nama);
email = findViewById(R.id.email);
tanggal = findViewById(R.id.tanggal);
submit = findViewById(R.id.submit);
rlnotif = findViewById(R.id.rlnotif);
textnotif = findViewById(R.id.textnotif);
countryCode = findViewById(R.id.countrycode);
backButtonverify = findViewById(R.id.back_btn_verify);
backbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
onsubmit = "true";
User loginUser = BaseApp.getInstance(this).getLoginUser();
PicassoTrustAll.getInstance(this)
.load(Constants.IMAGESDRIVER + loginUser.getFotodriver())
.placeholder(R.drawable.image_placeholder)
.resize(250, 250)
.into(foto);
phone.setText(loginUser.getPhone());
nama.setText(loginUser.getFullnama());
email.setText(loginUser.getEmail());
dateview = loginUser.getTglLahir();
countryCode.setText(loginUser.getCountrycode());
gantifoto.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(View v) {
selectImage();
}
});
foto.setOnClickListener(new View.OnClickListener() {
@RequiresApi(api = Build.VERSION_CODES.M)
@Override
public void onClick(View v) {
selectImage();
}
});
countryCode.setOnClickListener(new View.OnClickListener() {
@SuppressLint("WrongConstant")
@Override
public void onClick(View v) {
final CountryPicker picker = CountryPicker.newInstance("Select Country");
picker.setListener(new CountryPickerListener() {
@Override
public void onSelectCountry(String name, String code, String dialCode, int flagDrawableResID) {
countryCode.setText(dialCode);
picker.dismiss();
country_iso_code = code;
}
});
picker.setStyle(R.style.countrypicker_style, R.style.countrypicker_style);
picker.show(getSupportFragmentManager(), "Select Country");
}
});
Date myDate = null;
dateFormatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
dateFormatterview = new SimpleDateFormat("dd MMM yyyy", Locale.US);
try {
if (loginUser.getTglLahir() != null) {
myDate = dateFormatter.parse(loginUser.getTglLahir());
}
} catch (ParseException e) {
e.printStackTrace();
}
String finalDate = dateFormatterview.format(Objects.requireNonNull(myDate));
tanggal.setText(finalDate);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String emailPattern = "[a-zA-Z0-9._-]+@[a-z]+\\.+[a-z]+";
final String emailvalidate = email.getText().toString();
if (TextUtils.isEmpty(phone.getText().toString())) {
notif(getString(R.string.phoneempty));
} else if (TextUtils.isEmpty(nama.getText().toString())) {
notif("Name cant be empty");
} else if (TextUtils.isEmpty(email.getText().toString())) {
notif(getString(R.string.emailempty));
} else if (TextUtils.isEmpty(tanggal.getText().toString())) {
notif("birthday cant be empty!");
} else if (!emailvalidate.matches(emailPattern)) {
notif("wrong email format!");
} else {
if (onsubmit.equals("true")) {
submit.setText(getString(R.string.waiting_pleaseWait));
submit.setBackground(getResources().getDrawable(R.drawable.rounded_corners_button));
editprofile();
}
}
}
});
tanggal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showTanggal();
}
});
disableback = "false";
}
private void showTanggal() {
DatePickerDialog datePicker = DatePickerDialog.newInstance(
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, monthOfYear);
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
long date_ship_millis = calendar.getTimeInMillis();
tanggal.setText(dateFormatterview.format(date_ship_millis));
dateview = dateFormatter.format(date_ship_millis);
}
}
);
datePicker.setThemeDark(false);
datePicker.setAccentColor(getResources().getColor(R.color.colorgradient));
datePicker.show(getFragmentManager(), "Datepickerdialog");
}
public void notif(String text) {
rlnotif.setVisibility(View.VISIBLE);
textnotif.setText(text);
new Handler().postDelayed(new Runnable() {
public void run() {
rlnotif.setVisibility(View.GONE);
}
}, 3000);
}
/**
* uploadfoto-------------start.
*/
private boolean check_ReadStoragepermission() {
if (ContextCompat.checkSelfPermission(this.getApplicationContext(),
Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
return true;
} else {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
Constants.permission_Read_data);
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
return false;
}
@RequiresApi(api = Build.VERSION_CODES.M)
private void selectImage() {
boolean pick = true;
if (pick) {
if (!checkCameraPermission()) {
requestCameraPermission();
} else PickImage();
} else {
if (!checkStoragePermission()) {
requestStoragePermission();
} else PickImage();
}
}
private void PickImage() {
if (mBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
mBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
@SuppressLint("InflateParams") final View mDialog = getLayoutInflater().inflate(R.layout.sheet_upload, null);
CardView Galery = mDialog.findViewById(R.id.ll_gallery_intent);
CardView Camera = mDialog.findViewById(R.id.ll_camera_intent);
Galery.setOnClickListener(v -> choosePhotoFromGallery());
Camera.setOnClickListener(v -> takePhotoFromCamera());
mBottomSheetDialog = new BottomSheetDialog(this);
mBottomSheetDialog.setContentView(mDialog);
mBottomSheetDialog.show();
// mBottomSheetDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
mBottomSheetDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
mBottomSheetDialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation;
mBottomSheetDialog.getWindow().setGravity(Gravity.BOTTOM);
mBottomSheetDialog.setOnDismissListener(dialog -> mBottomSheetDialog = null);
}
public void choosePhotoFromGallery() {
Intent galleryIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, GALLERY);
mBottomSheetDialog.dismiss();
}
private void takePhotoFromCamera() {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA);
mBottomSheetDialog.dismiss();
}
@RequiresApi(api = Build.VERSION_CODES.M)
private void requestStoragePermission() {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
}
@RequiresApi(api = Build.VERSION_CODES.M)
private void requestCameraPermission() {
requestPermissions(new String[]{Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE}, 100);
}
private boolean checkStoragePermission() {
if (ContextCompat.checkSelfPermission(this.getApplicationContext(),
Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED) {
return true;
} else {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
Constants.permission_Read_data);
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
return false;
}
private boolean checkCameraPermission() {
boolean res1 = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED;
boolean res2 = ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
return res1 && res2;
}
public String getPath(Uri uri) {
String result = null;
String[] proj = {MediaStore.Images.Media.DATA};
Cursor cursor = this.getContentResolver().query(uri, proj, null, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
int column_index = cursor.getColumnIndexOrThrow(proj[0]);
result = cursor.getString(column_index);
}
cursor.close();
}
if (result == null) {
result = "Not found";
}
return result;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_CANCELED) {
return;
}
Uri contentURI = data.getData();
if (requestCode == GALLERY) {
if (data != null) {
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), contentURI);
String path = saveImage(bitmap);
foto.setImageBitmap(bitmap);
// Toast.makeText(this, "Image Saved!", Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(this, "Failed!", Toast.LENGTH_SHORT).show();
}
}
} else if (requestCode == CAMERA) {
Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
foto.setImageBitmap(thumbnail);
saveImage(thumbnail);
// Toast.makeText(this, "Image Saved!", Toast.LENGTH_SHORT).show();
/*Intent i = new Intent(this,MainActivity.class);
i.putExtra("imagepath", contentURI.toString());
startActivity(i);
*/
}
}
public String saveImage(Bitmap myBitmap) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.JPEG, 90, bytes);
imageByteArray = bytes.toByteArray();
decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(bytes.toByteArray()));
return "";
}
public String getStringImage(Bitmap bmp) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 20, baos);
imageByteArray = baos.toByteArray();
return Base64.encodeToString(imageByteArray, Base64.DEFAULT);
}
private void editprofile() {
onsubmit = "false";
User loginUser = BaseApp.getInstance(this).getLoginUser();
EditprofileRequestJson request = new EditprofileRequestJson();
request.setFullNama(nama.getText().toString());
request.setEmail(email.getText().toString());
request.setEmaillama(loginUser.getEmail());
request.setId(loginUser.getId());
request.setNoTelepon(countryCode.getText().toString().replace("+", "") + phone.getText().toString());
request.setPhone(phone.getText().toString());
request.setCountrycode(countryCode.getText().toString());
request.setPhonelama(loginUser.getNoTelepon());
if (imageByteArray != null) {
request.setFotopelangganlama(loginUser.getFotodriver());
request.setFotopelanggan(getStringImage(decoded));
}
request.setTglLahir(dateview);
DriverService service = ServiceGenerator.createService(DriverService.class, loginUser.getEmail(), loginUser.getPassword());
service.editProfile(request).enqueue(new Callback<LoginResponseJson>() {
@SuppressLint("SetTextI18n")
@Override
public void onResponse(@NonNull Call<LoginResponseJson> call, @NonNull Response<LoginResponseJson> response) {
if (response.isSuccessful()) {
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("success")) {
User user = response.body().getData().get(0);
saveUser(user);
finish();
onsubmit = "true";
} else {
onsubmit = "true";
submit.setText("Submit");
submit.setBackground(getResources().getDrawable(R.drawable.button_round_1));
notif(response.body().getMessage());
}
} else {
onsubmit = "true";
submit.setText("Submit");
submit.setBackground(getResources().getDrawable(R.drawable.button_round_1));
notif("error");
}
}
@Override
public void onFailure(@NonNull Call<LoginResponseJson> call, @NonNull Throwable t) {
t.printStackTrace();
notif("error!");
}
});
}
private void saveUser(User user) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.delete(User.class);
realm.copyToRealm(user);
realm.commitTransaction();
BaseApp.getInstance(EditProfileActivity.this).setLoginUser(user);
}
}

View File

@@ -0,0 +1,161 @@
package id.ontime.driver.activity;
import android.annotation.SuppressLint;
import android.app.NotificationManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import id.ontime.driver.R;
import id.ontime.driver.utils.AppIntroPagerAdapter;
import id.ontime.driver.utils.ProjectUtils;
import id.ontime.driver.utils.SharedPrefrence;
import java.util.Objects;
public class IntroActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
ViewPager mViewPager;
private AppIntroPagerAdapter mAdapter;
private LinearLayout viewPagerCountDots;
private int dotsCount;
private ImageView[] dots;
public SharedPrefrence preference;
private Context mContext;
Button buttonSign;
int[] mResources = {R.drawable.slide_one, R.drawable.slide_two, R.drawable.slide_three};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ProjectUtils.Fullscreen(IntroActivity.this);
setContentView(R.layout.activity_intro);
mContext = IntroActivity.this;
preference = SharedPrefrence.getInstance(mContext);
removeNotif();
buttonSign = findViewById(R.id.tombolstar);
buttonSign.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(IntroActivity.this, LoginActivity.class);
startActivity(i);
}
});
mViewPager = findViewById(R.id.viewpager);
viewPagerCountDots = findViewById(R.id.viewPagerCountDots);
mAdapter = new AppIntroPagerAdapter(IntroActivity.this, mContext, mResources);
mViewPager.setAdapter(mAdapter);
mViewPager.setCurrentItem(0);
mViewPager.setOnPageChangeListener(this);
setPageViewIndicator();
}
@SuppressLint("ClickableViewAccessibility")
private void setPageViewIndicator() {
Log.d("###setPageViewIndicator", " : called");
dotsCount = mAdapter.getCount();
dots = new ImageView[dotsCount];
for (int i = 0; i < dotsCount; i++) {
dots[i] = new ImageView(mContext);
dots[i].setImageDrawable(getResources().getDrawable(R.drawable.nonselecteditem_dot));
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
25,
25
);
params.setMargins(4, 20, 4, 0);
final int presentPosition = i;
dots[presentPosition].setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
mViewPager.setCurrentItem(presentPosition);
return true;
}
});
viewPagerCountDots.addView(dots[i], params);
}
dots[0].setImageDrawable(getResources().getDrawable(R.drawable.selecteditem_dot));
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
Log.e("###onPageSelected, pos ", String.valueOf(position));
for (int i = 0; i < dotsCount; i++) {
dots[i].setImageDrawable(getResources().getDrawable(R.drawable.nonselecteditem_dot));
}
dots[position].setImageDrawable(getResources().getDrawable(R.drawable.selecteditem_dot));
}
@Override
public void onPageScrollStateChanged(int state) {
}
public void scrollPage(int position) {
mViewPager.setCurrentItem(position);
}
@Override
public void onBackPressed() {
clickDone();
}
public void clickDone() {
new AlertDialog.Builder(this)
.setIcon(R.mipmap.ic_launcher)
.setTitle(getString(R.string.app_name))
.setMessage(getString(R.string.exit))
.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
})
.setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.show();
}
private void removeNotif() {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Objects.requireNonNull(notificationManager).cancel(0);
}
}

View File

@@ -0,0 +1,568 @@
package id.ontime.driver.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.text.Editable;
import android.text.Html;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.ViewFlipper;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseException;
import com.google.firebase.FirebaseTooManyRequestsException;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException;
import com.google.firebase.auth.PhoneAuthCredential;
import com.google.firebase.auth.PhoneAuthProvider;
import com.google.firebase.iid.FirebaseInstanceId;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.R;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.models.FirebaseToken;
import id.ontime.driver.models.User;
import id.ontime.driver.utils.NetworkUtils;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import id.ontime.driver.json.LoginRequestJson;
import id.ontime.driver.json.LoginResponseJson;
import com.ybs.countrypicker.CountryPicker;
import com.ybs.countrypicker.CountryPickerListener;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import io.realm.Realm;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class LoginActivity extends AppCompatActivity {
private String phoneVerificationId;
private PhoneAuthProvider.OnVerificationStateChangedCallbacks verificationCallbacks;
private PhoneAuthProvider.ForceResendingToken resendToken;
private FirebaseAuth fbAuth;
EditText phoneText, password, numOne, numTwo, numThree, numFour, numFive, numSix, email;
TextView countryCode, sendTo, privacypolicy, textnotif, daftar, textnotif2, lupapass;
Button buttonLogin, confirmButton;
ImageView backButton, backButtonverify;
ViewFlipper viewFlipper;
String phoneNumber, disableback;
FirebaseAuth mAuth;
RelativeLayout rlprogress, rlnotif, rlnotif2, rldaftar;
String verify;
SharedPreferences sharedPreferences;
String country_iso_code = "en";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
try {
fbAuth = FirebaseAuth.getInstance();
mAuth = FirebaseAuth.getInstance();
} catch (IllegalStateException e) {
fbAuth = null;
mAuth = null;
}
numOne = findViewById(R.id.numone);
numTwo = findViewById(R.id.numtwo);
numThree = findViewById(R.id.numthree);
numFour = findViewById(R.id.numfour);
numFive = findViewById(R.id.numfive);
numSix = findViewById(R.id.numsix);
privacypolicy = findViewById(R.id.privacypolice);
daftar = findViewById(R.id.clickdaftar);
rldaftar = findViewById(R.id.rldaftar);
lupapass = findViewById(R.id.lupapass);
phoneText = findViewById(R.id.phonenumber);
email = findViewById(R.id.email);
countryCode = findViewById(R.id.countrycode);
buttonLogin = findViewById(R.id.buttonlogin);
backButton = findViewById(R.id.back_btn);
confirmButton = findViewById(R.id.buttonconfirm);
sendTo = findViewById(R.id.sendtotxt);
viewFlipper = findViewById(R.id.viewflipper);
backButtonverify = findViewById(R.id.back_btn_verify);
rlprogress = findViewById(R.id.rlprogress);
password = findViewById(R.id.password);
rlnotif = findViewById(R.id.rlnotif);
textnotif = findViewById(R.id.textnotif);
rlnotif2 = findViewById(R.id.rlnotif2);
textnotif2 = findViewById(R.id.textnotif2);
sharedPreferences = getSharedPreferences(Constants.PREF_NAME, MODE_PRIVATE);
String priv = getResources().getString(R.string.privacy);
privacypolicy.setText(Html.fromHtml(priv));
verify = "false";
buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String emailText = email != null ? email.getText().toString() : "";
String phonetext = phoneText.getText().toString();
String pass = password.getText().toString();
boolean hasEmail = !TextUtils.isEmpty(emailText);
if (TextUtils.isEmpty(pass)) {
notif(getString(R.string.passempty));
} else if (!hasEmail && TextUtils.isEmpty(phonetext)) {
notif(getString(R.string.phonepass));
} else {
if (NetworkUtils.isConnected(LoginActivity.this)) {
verify = hasEmail ? "true" : "false";
if (!hasEmail) {
phoneNumber = countryCode.getText().toString() + phonetext;
}
progressshow();
onSignInClick();
} else {
progresshide();
notif(getString(R.string.text_noInternet));
}
}
}
});
countryCode.setOnClickListener(new View.OnClickListener() {
@SuppressLint("WrongConstant")
@Override
public void onClick(View v) {
final CountryPicker picker = CountryPicker.newInstance("Select Country");
picker.setListener(new CountryPickerListener() {
@Override
public void onSelectCountry(String name, String code, String dialCode, int flagDrawableResID) {
countryCode.setText(dialCode);
picker.dismiss();
country_iso_code = code;
}
});
picker.setStyle(R.style.countrypicker_style, R.style.countrypicker_style);
picker.show(getSupportFragmentManager(), "Select Country");
}
});
lupapass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(LoginActivity.this, LupapassActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
});
daftar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(LoginActivity.this, RegisterActivity.class);
startActivity(i);
}
});
privacypolicy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(LoginActivity.this, PrivacyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
});
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
backButtonverify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
confirmButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
verifyCode(viewFlipper);
}
});
disableback = "false";
codenumber();
}
@Override
public void onBackPressed() {
if (!disableback.equals("true")) {
finish();
}
}
public void notif(String text) {
rlnotif.setVisibility(View.VISIBLE);
textnotif.setText(text);
new Handler().postDelayed(new Runnable() {
public void run() {
rlnotif.setVisibility(View.GONE);
}
}, 3000);
}
public void notif2(String text) {
rlnotif2.setVisibility(View.VISIBLE);
textnotif2.setText(text);
new Handler().postDelayed(new Runnable() {
public void run() {
rlnotif2.setVisibility(View.GONE);
}
}, 3000);
}
public void progressshow() {
rlprogress.setVisibility(View.VISIBLE);
disableback = "true";
}
public void progresshide() {
rlprogress.setVisibility(View.GONE);
disableback = "false";
}
public void codenumber() {
numOne.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (numOne.getText().toString().length() == 0) {
numTwo.requestFocus();
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
numTwo.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (numTwo.getText().toString().length() == 0) {
numThree.requestFocus();
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
numThree.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (numThree.getText().toString().length() == 0) {
numFour.requestFocus();
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
numFour.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (numFour.getText().toString().length() == 0) {
numFive.requestFocus();
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
numFive.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if (numFive.getText().toString().length() == 0) {
numSix.requestFocus();
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
public void Nextbtn(View view) {
phoneNumber = countryCode.getText().toString() + phoneText.getText().toString();
String ccode = countryCode.getText().toString();
if ((!TextUtils.isEmpty(phoneNumber) && !TextUtils.isEmpty(ccode)) && phoneNumber.length() > 5) {
progressshow();
Send_Number_tofirebase(phoneNumber);
} else {
notif(getString(R.string.wrongnumber));
}
}
public void Send_Number_tofirebase(String phoneNumber) {
setUpVerificatonCallbacks();
PhoneAuthProvider.getInstance().verifyPhoneNumber(
phoneNumber,
120,
TimeUnit.SECONDS,
this,
verificationCallbacks);
}
private void setUpVerificatonCallbacks() {
verificationCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential credential) {
signInWithPhoneAuthCredential(credential);
}
@Override
public void onVerificationFailed(@NonNull FirebaseException e) {
progresshide();
android.util.Log.d("respon", e.toString());
notif2("Verifikasi Gagal!");
if (e instanceof FirebaseAuthInvalidCredentialsException) {
notif2("wrong code!");
} else if (e instanceof FirebaseTooManyRequestsException) {
notif2("Too Many Requests, please try with other phone number!");
notif("Too Many Requests, please try with other phone number!");
}
}
@SuppressLint("SetTextI18n")
@Override
public void onCodeSent(@NonNull String verificationId, @NonNull PhoneAuthProvider.ForceResendingToken token) {
phoneVerificationId = verificationId;
resendToken = token;
sendTo.setText("Send To ( " + phoneNumber + " )");
progresshide();
viewFlipper.setInAnimation(LoginActivity.this, R.anim.from_right);
viewFlipper.setOutAnimation(LoginActivity.this, R.anim.to_left);
viewFlipper.setDisplayedChild(1);
}
};
}
public void verifyCode(View view) {
backButton.setVisibility(View.GONE);
rldaftar.setVisibility(View.GONE);
String code = "" + numOne.getText().toString() + numTwo.getText().toString() + numThree.getText().toString() + numFour.getText().toString() + numFive.getText().toString() + numSix.getText().toString();
if (!code.equals("")) {
progressshow();
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(phoneVerificationId, code);
signInWithPhoneAuthCredential(credential);
} else {
notif2("kode verifikasi masih kosong");
}
}
private void signInWithPhoneAuthCredential(PhoneAuthCredential credential) {
fbAuth.signInWithCredential(credential)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
//Getuser();
verify = "true";
onSignInClick();
} else {
progresshide();
if (task.getException() instanceof FirebaseAuthInvalidCredentialsException) {
notif2("wrong code!");
} else if (task.getException() instanceof FirebaseTooManyRequestsException) {
notif2("Too Many Requests, please try with other phone number!");
notif("Too Many Requests, please try with other phone number!");
}
}
}
});
}
public void resendCode(View view) {
setUpVerificatonCallbacks();
PhoneAuthProvider.getInstance().verifyPhoneNumber(
phoneNumber,
120,
TimeUnit.SECONDS,
this,
verificationCallbacks,
resendToken);
}
private void onSignInClick() {
progressshow();
LoginRequestJson request = new LoginRequestJson();
String emailText = email != null ? email.getText().toString().trim() : "";
String phoneDigits = phoneText.getText().toString().trim();
if (!TextUtils.isEmpty(emailText)) {
request.setEmail(emailText);
request.setNotelepon("");
} else {
request.setEmail(null);
request.setNotelepon(countryCode.getText().toString().replace("+", "") + phoneDigits);
}
request.setPassword(password.getText().toString());
try {
FirebaseInstanceId token = FirebaseInstanceId.getInstance();
request.setRegId(token.getToken());
} catch (Exception e) {
request.setRegId(null);
}
String basicUser = !TextUtils.isEmpty(emailText) ? emailText : request.getNotelepon();
DriverService service = ServiceGenerator.createService(DriverService.class, basicUser, request.getPassword());
service.login(request).enqueue(new Callback<LoginResponseJson>() {
@Override
public void onResponse(@NonNull Call<LoginResponseJson> call, @NonNull Response<LoginResponseJson> response) {
progresshide();
if (response.isSuccessful()) {
LoginResponseJson body = response.body();
if (body != null && body.getMessage().equalsIgnoreCase("found")) {
User user = body.getData().get(0);
saveUser(user);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
} else {
notif(getString(R.string.phoneemailwrong));
}
}
}
@Override
public void onFailure(@NonNull Call<LoginResponseJson> call, @NonNull Throwable t) {
progresshide();
t.printStackTrace();
notif("error");
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RegisterActivity.SIGNUP_ID) {
if (resultCode == Activity.RESULT_OK) {
if (verify.equals("true")) {
User user = (User) data.getSerializableExtra(RegisterActivity.USER_KEY);
saveUser(user);
Intent intent = new Intent(LoginActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}
}
}
}
private void saveUser(User user) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.delete(User.class);
realm.copyToRealm(user);
realm.commitTransaction();
BaseApp.getInstance(LoginActivity.this).setLoginUser(user);
}
@SuppressWarnings("unused")
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onMessageEvent(FirebaseToken response) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.delete(FirebaseToken.class);
realm.copyToRealm(response);
realm.commitTransaction();
}
}

View File

@@ -0,0 +1,132 @@
package id.ontime.driver.activity;
import android.os.Bundle;
import android.os.Handler;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import id.ontime.driver.R;
import id.ontime.driver.json.LoginRequestJson;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import id.ontime.driver.json.LoginResponseJson;
import java.util.Objects;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class LupapassActivity extends AppCompatActivity {
ImageView backbtn;
Button submit;
TextView email, notiftext;
RelativeLayout rlnotif, rlprogress;
String disableback;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lupapassword);
backbtn = findViewById(R.id.back_btn_verify);
submit = findViewById(R.id.buttonconfirm);
email = findViewById(R.id.email);
notiftext = findViewById(R.id.textnotif2);
rlnotif = findViewById(R.id.rlnotif2);
rlprogress = findViewById(R.id.rlprogress);
disableback = "false";
backbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (email.getText().toString().isEmpty()) {
notif(getString(R.string.emailempty));
} else {
get();
}
}
});
}
private void get() {
progressshow();
LoginRequestJson request = new LoginRequestJson();
request.setEmail(email.getText().toString());
DriverService service = ServiceGenerator.createService(DriverService.class, request.getEmail(), "12345");
service.forgot(request).enqueue(new Callback<LoginResponseJson>() {
@Override
public void onResponse(@NonNull Call<LoginResponseJson> call, @NonNull Response<LoginResponseJson> response) {
progresshide();
if (response.isSuccessful()) {
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("found")) {
notif("email send!");
} else {
notif(getString(R.string.phoneemailwrong));
}
}
}
@Override
public void onFailure(@NonNull Call<LoginResponseJson> call, @NonNull Throwable t) {
progresshide();
t.printStackTrace();
notif("error");
}
});
}
public void progressshow() {
rlprogress.setVisibility(View.VISIBLE);
disableback = "true";
}
public void progresshide() {
rlprogress.setVisibility(View.GONE);
disableback = "false";
}
@Override
public void onBackPressed() {
if (!disableback.equals("true")) {
finish();
}
}
public void notif(String text) {
rlnotif.setVisibility(View.VISIBLE);
notiftext.setText(text);
new Handler().postDelayed(new Runnable() {
public void run() {
rlnotif.setVisibility(View.GONE);
}
}, 3000);
}
}

View File

@@ -0,0 +1,400 @@
package id.ontime.driver.activity;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.PendingIntent;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.bottomnavigation.LabelVisibilityMode;
import com.google.android.material.navigation.NavigationBarView;
import id.ontime.driver.R;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.constants.VersionChecker;
import id.ontime.driver.fragment.HomeFragment;
import id.ontime.driver.fragment.OrderFragment;
import id.ontime.driver.json.GetHomeRequestJson;
import id.ontime.driver.json.GetHomeResponseJson;
import id.ontime.driver.json.UpdateLocationRequestJson;
import id.ontime.driver.utils.MyLocationService;
import id.ontime.driver.fragment.HistoryFragment;
import id.ontime.driver.fragment.MessageFragment;
import id.ontime.driver.fragment.ProfileFragment;
import id.ontime.driver.json.ResponseJson;
import id.ontime.driver.models.TransaksiModel;
import id.ontime.driver.models.User;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import id.ontime.driver.utils.SettingPreference;
import java.util.Objects;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import io.realm.Realm;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class MainActivity extends AppCompatActivity {
long mBackPressed;
public static String apikey;
LinearLayout mAdViewLayout;
RelativeLayout toolbar;
@SuppressLint("StaticFieldLeak")
public static MainActivity mainActivity;
private FragmentManager fragmentManager;
BottomNavigationView navigation;
int previousSelect = 0;
SettingPreference sp;
OrderFragment orderFragment;
HomeFragment homeFragment;
LocationRequest locationRequest;
RelativeLayout rlprogress;
FusedLocationProviderClient fusedLocationProviderClient;
boolean canceled;
public static MainActivity getInstance() {
return mainActivity;
}
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Menu menu = navigation.getMenu();
menu.findItem(R.id.home).setIcon(R.drawable.ic_home);
menu.findItem(R.id.order).setIcon(R.drawable.ic_transaksi);
menu.findItem(R.id.chat).setIcon(R.drawable.ic_pesan);
menu.findItem(R.id.profile).setIcon(R.drawable.ic_profil);
TransaksiModel transaksi = new TransaksiModel();
int itemId = item.getItemId();
if (itemId == R.id.home) {
canceled = false;
navigationItemSelected(0);
item.setIcon(R.drawable.ic_home_s);
gethome();
toolbar.setVisibility(View.VISIBLE);
return true;
} else if (itemId == R.id.order) {
canceled = true;
rlprogress.setVisibility(View.GONE);
HistoryFragment listFragment = new HistoryFragment();
navigationItemSelected(1);
item.setIcon(R.drawable.ic_transaksi_s);
loadFrag2(listFragment, getString(R.string.menu_home), fragmentManager, transaksi, "", "");
toolbar.setVisibility(View.VISIBLE);
return true;
} else if (itemId == R.id.chat) {
canceled = true;
rlprogress.setVisibility(View.GONE);
MessageFragment pesanFragment = new MessageFragment();
navigationItemSelected(2);
item.setIcon(R.drawable.ic_pesan_s);
loadFrag2(pesanFragment, getString(R.string.menu_chat), fragmentManager, transaksi, "", "");
toolbar.setVisibility(View.VISIBLE);
return true;
} else if (itemId == R.id.profile) {
canceled = true;
rlprogress.setVisibility(View.GONE);
ProfileFragment profilFragment = new ProfileFragment();
navigationItemSelected(3);
item.setIcon(R.drawable.ic_profil_s);
loadFrag2(profilFragment, getString(R.string.menu_profile), fragmentManager, transaksi, "", "");
toolbar.setVisibility(View.VISIBLE);
return true;
}
return false;
}
};
@RequiresApi(api = Build.VERSION_CODES.S)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAdViewLayout = findViewById(R.id.adView);
fragmentManager = getSupportFragmentManager();
navigation = findViewById(R.id.navigation);
sp = new SettingPreference(this);
orderFragment = new OrderFragment();
homeFragment = new HomeFragment();
navigation.setLabelVisibilityMode(NavigationBarView.LABEL_VISIBILITY_LABELED);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
navigation.setItemIconTintList(null);
Menu menu = navigation.getMenu();
toolbar = findViewById(R.id.rltoolbar);
toolbar.setVisibility(View.VISIBLE);
rlprogress = findViewById(R.id.rlprogress);
menu.findItem(R.id.home).setIcon(R.drawable.ic_home_s);
canceled = false;
User loginUser = BaseApp.getInstance(this).getLoginUser();
Constants.TOKEN = loginUser.getToken();
Constants.USERID = loginUser.getId();
apikey = getString(R.string.google_maps_key);
PackageInfo packageInfo = null;
try {
packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
Constants.versionname = Objects.requireNonNull(packageInfo).versionName;
updatelocation();
gethome();
if (sp.getSetting()[19].equals("2") || sp.getSetting()[19].equals("3")) {
navigation.setVisibility(View.GONE);
} else {
navigation.setVisibility(View.VISIBLE);
}
}
@Override
protected void onResume() {
super.onResume();
Check_version();
}
public void Check_version(){
VersionChecker versionChecker = new VersionChecker(this);
versionChecker.execute();
}
@Override
public void onBackPressed() {
int count = this.getSupportFragmentManager().getBackStackEntryCount();
if (count == 0) {
if (mBackPressed + 2000 > System.currentTimeMillis()) {
super.onBackPressed();
} else {
clickDone();
}
} else {
super.onBackPressed();
}
}
public void clickDone() {
new AlertDialog.Builder(this)
.setIcon(R.mipmap.ic_launcher)
.setTitle(getString(R.string.app_name))
.setMessage(getString(R.string.exit))
.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
finish();
}
})
.setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.show();
}
private void gethome() {
rlprogress.setVisibility(View.VISIBLE);
User loginUser = BaseApp.getInstance(this).getLoginUser();
DriverService userService = ServiceGenerator.createService(
DriverService.class, loginUser.getNoTelepon(), loginUser.getPassword());
GetHomeRequestJson param = new GetHomeRequestJson();
param.setId(loginUser.getId());
param.setPhone(loginUser.getNoTelepon());
userService.home(param).enqueue(new Callback<GetHomeResponseJson>() {
@Override
public void onResponse(@NonNull Call<GetHomeResponseJson> call, @NonNull final Response<GetHomeResponseJson> response) {
if (response.isSuccessful()) {
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("success")) {
Constants.CURRENCY = response.body().getCurrency();
sp.updateCurrency(response.body().getCurrency());
sp.updateabout(response.body().getAboutus());
sp.updateemail(response.body().getEmail());
sp.updatephone(response.body().getPhone());
sp.updateweb(response.body().getWebsite());
sp.updatempstatus(response.body().getMpstatus());
sp.updatempactive(response.body().getMpactive());
sp.updateMobilepulsausername(response.body().getMobilepulsausername());
sp.updateMobilepulsaapikey(response.body().getMobilepulsaapikey());
sp.updateStatusdriver(response.body().getDriverstatus());
TransaksiModel transaksifake = new TransaksiModel();
if (!canceled) {
if (response.body().getDriverstatus().equals("3") || response.body().getDriverstatus().equals("2")) {
TransaksiModel transaksi = response.body().getTransaksi().get(0);
navigation.setVisibility(View.GONE);
loadFrag2(orderFragment, getString(R.string.menu_home), fragmentManager, transaksi, response.body().getSaldo(), response.body().getDriverstatus());
} else {
navigation.setVisibility(View.VISIBLE);
loadFrag2(homeFragment, getString(R.string.menu_home), fragmentManager, transaksifake, response.body().getSaldo(), response.body().getDriverstatus());
}
}
User user = response.body().getDatadriver().get(0);
saveUser(user);
if (mainActivity != null) {
Realm realm = BaseApp.getInstance(MainActivity.this).getRealmInstance();
User loginUser = BaseApp.getInstance(MainActivity.this).getLoginUser();
realm.beginTransaction();
loginUser.setWalletSaldo(Long.parseLong(response.body().getSaldo()));
realm.commitTransaction();
}
rlprogress.setVisibility(View.GONE);
} else {
Realm realm = BaseApp.getInstance(MainActivity.this).getRealmInstance();
realm.beginTransaction();
realm.delete(User.class);
realm.commitTransaction();
BaseApp.getInstance(MainActivity.this).setLoginUser(null);
startActivity(new Intent(MainActivity.this, IntroActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK));
finish();
Toast.makeText(MainActivity.this, "Your account has been suspended, please contact admin!", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onFailure(@NonNull Call<GetHomeResponseJson> call, @NonNull Throwable t) {
}
});
}
private void saveUser(User user) {
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.delete(User.class);
realm.copyToRealm(user);
realm.commitTransaction();
BaseApp.getInstance(MainActivity.this).setLoginUser(user);
}
public void loadFrag2(Fragment f1, String name, FragmentManager fm, TransaksiModel transaksi, String saldo, String status) {
for (int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
Bundle args = new Bundle();
args.putString("id_pelanggan", transaksi.getIdPelanggan());
args.putString("id_transaksi", transaksi.getId());
args.putString("response", String.valueOf(transaksi.status));
args.putString("saldo", saldo);
args.putString("status", status);
f1.setArguments(args);
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.Container, f1, name);
ft.commitAllowingStateLoss();
}
public void navigationItemSelected(int position) {
previousSelect = position;
}
@RequiresApi(api = Build.VERSION_CODES.S)
private void updatelocation() {
buildlocation();
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
fusedLocationProviderClient.requestLocationUpdates(locationRequest, getPendingIntent());
}
@RequiresApi(api = Build.VERSION_CODES.S)
private PendingIntent getPendingIntent() {
Intent intent = new Intent(this, MyLocationService.class);
intent.setAction(MyLocationService.ACTION_PROCESS_UPDATE);
return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_MUTABLE);
}
private void buildlocation() {
locationRequest = new LocationRequest();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(5000);
locationRequest.setFastestInterval(3000);
locationRequest.setSmallestDisplacement(10f);
}
public void Updatelocationdata(final Location location) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
onLocationChanged(location);
}
});
}
public void onLocationChanged(Location location) {
if (location != null) {
User loginUser = BaseApp.getInstance(this).getLoginUser();
DriverService service = ServiceGenerator.createService(DriverService.class, loginUser.getEmail(), loginUser.getPassword());
UpdateLocationRequestJson param = new UpdateLocationRequestJson();
param.setId(loginUser.getId());
param.setLatitude(String.valueOf(location.getLatitude()));
param.setLongitude(String.valueOf(location.getLongitude()));
param.setBearing(String.valueOf(location.getBearing()));
service.updatelocation(param).enqueue(new Callback<ResponseJson>() {
@Override
public void onResponse(@NonNull Call<ResponseJson> call, @NonNull Response<ResponseJson> response) {
if (response.isSuccessful()) {
Log.e("location", response.message());
}
}
@Override
public void onFailure(@NonNull retrofit2.Call<ResponseJson> call, @NonNull Throwable t) {
}
});
}
}
}

View File

@@ -0,0 +1,374 @@
package id.ontime.driver.activity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import android.annotation.SuppressLint;
import android.app.KeyguardManager;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Vibrator;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import id.ontime.driver.R;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.json.AcceptRequestJson;
import id.ontime.driver.json.AcceptResponseJson;
import id.ontime.driver.utils.api.FCMHelper;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import id.ontime.driver.json.fcm.FCMMessage;
import id.ontime.driver.models.OrderFCM;
import id.ontime.driver.models.User;
import id.ontime.driver.utils.SettingPreference;
import id.ontime.driver.utils.Utility;
import id.ontime.driver.utils.PicassoTrustAll;
import java.io.IOException;
import java.util.Objects;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
public class NewOrderActivity extends AppCompatActivity {
private static final int REQUEST_PERMISSION_LOCATION = 991;
private static final int REQUEST_PERMISSION_CALL = 992;
TextView layanantext;
LinearLayout sendDetailLayout;
TextView produk;
TextView sendername;
TextView receivername;
Button senderphone;
Button receiverphone;
TextView layanandesctext;
TextView pickuptext;
TextView destinationtext;
TextView estimatetext;
TextView distancetext;
TextView costtext;
TextView pricetext;
TextView totaltext;
ImageView icon;
TextView timer;
TextView time;
TextView distancetextes;
TextView costtextes;
Button cancel;
Button order;
RelativeLayout rlprogress;
LinearLayout lldestination;
LinearLayout lldistance;
String waktuorder,iconfitur, layanan, layanandesc, alamatasal, alamattujuan, estimasitime, hargatotal, cost, distance, idtrans, regid, orderfitur,tokenmerchant,idpelanggan,idtransmerchant;
String wallett;
MediaPlayer BG;
Vibrator v;
SettingPreference sp;
@SuppressLint("SetTextI18n")
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_order);
layanantext = findViewById(R.id.layanan);
sendDetailLayout = findViewById(R.id.senddetail);
produk = findViewById(R.id.produk);
sendername = findViewById(R.id.sendername);
receivername = findViewById(R.id.receivername);
senderphone = findViewById(R.id.senderphone);
receiverphone = findViewById(R.id.receiverphone);
layanandesctext = findViewById(R.id.layanandes);
pickuptext = findViewById(R.id.pickUpText);
destinationtext = findViewById(R.id.destinationText);
estimatetext = findViewById(R.id.fitur);
distancetext = findViewById(R.id.distance);
costtext = findViewById(R.id.cost);
pricetext = findViewById(R.id.price);
totaltext = findViewById(R.id.totaltext);
icon = findViewById(R.id.image);
timer = findViewById(R.id.timer);
time = findViewById(R.id.time);
distancetextes = findViewById(R.id.distancetext);
costtextes = findViewById(R.id.costtext);
cancel = findViewById(R.id.cancel);
order = findViewById(R.id.order);
rlprogress = findViewById(R.id.rlprogress);
lldestination = findViewById(R.id.lldestination);
lldistance = findViewById(R.id.lldistance);
setScreenOnFlags();
sp = new SettingPreference(this);
sp.updateNotif("ON");
Intent intent = getIntent();
iconfitur = intent.getStringExtra("icon");
layanan = intent.getStringExtra("layanan");
layanandesc = intent.getStringExtra("layanandesc");
alamatasal = intent.getStringExtra("alamat_asal");
alamattujuan = intent.getStringExtra("alamat_tujuan");
estimasitime = intent.getStringExtra("estimasi_time");
hargatotal = intent.getStringExtra("harga");
cost = intent.getStringExtra("biaya");
distance = intent.getStringExtra("distance");
idtrans = intent.getStringExtra("id_transaksi");
regid = intent.getStringExtra("reg_id");
wallett = intent.getStringExtra("pakai_wallet");
orderfitur = intent.getStringExtra("order_fitur");
tokenmerchant = intent.getStringExtra("token_merchant");
idpelanggan = intent.getStringExtra("id_pelanggan");
idtransmerchant = intent.getStringExtra("id_trans_merchant");
waktuorder = intent.getStringExtra("waktu_order");
if (orderfitur.equalsIgnoreCase("3")) {
lldestination.setVisibility(View.GONE);
lldistance.setVisibility(View.GONE);
}
if (orderfitur.equalsIgnoreCase("2")) {
sendDetailLayout.setVisibility(View.VISIBLE);
//getData();
}
if (orderfitur.equalsIgnoreCase("4")) {
estimatetext.setText(estimasitime);
time.setText("Merchant");
distancetextes.setText("Delivery Fee");
costtextes.setText("Biaya Pesanan");
Utility.currencyTXT(distancetext, distance, this);
Utility.currencyTXT(costtext, cost, this);
} else {
estimatetext.setText(estimasitime);
distancetext.setText(distance);
costtext.setText(cost);
}
System.out.println("Order MASUK"+layanan);
layanantext.setText(layanan);
layanandesctext.setText(layanandesc);
pickuptext.setText(alamatasal);
destinationtext.setText(alamattujuan);
Utility.currencyTXT(pricetext, hargatotal, this);
if (wallett.equalsIgnoreCase("true")) {
totaltext.setText("Total (SALDO)");
} else {
totaltext.setText("Total (TUNAI)");
}
PicassoTrustAll.getInstance(this)
.load(Constants.IMAGESFITUR + iconfitur)
.placeholder(R.drawable.logo)
.resize(100, 100)
.into(icon);
cancel.setOnClickListener(new View.OnClickListener() {
@SuppressLint("MissingPermission")
@Override
public void onClick(View view) {
if (BG != null && BG.isPlaying()) {
BG.stop();
v.cancel();
}
timerplay.cancel();
Intent toOrder = new Intent(NewOrderActivity.this, MainActivity.class);
toOrder.addFlags(FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(toOrder);
}
});
if (new SettingPreference(this).getSetting()[0].equals("OFF")) {
timerplay.start();
playSound();
removeNotif();
order.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getaccept(false);
}
});
} else {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
removeNotif();
if (BG != null && BG.isPlaying()) {
BG.stop();
v.cancel();
}
}
}, 2000);
getaccept(true);
}
}
CountDownTimer timerplay = new CountDownTimer(20000, 1000) {
@SuppressLint("SetTextI18n")
public void onTick(long millisUntilFinished) {
timer.setText("" + millisUntilFinished / 1000);
}
@SuppressLint("MissingPermission")
public void onFinish() {
if (BG != null && BG.isPlaying()) {
BG.stop();
v.cancel();
}
timer.setText("0");
Intent toOrder = new Intent(NewOrderActivity.this, MainActivity.class);
toOrder.addFlags(FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(toOrder);
}
}.start();
@SuppressLint("MissingPermission")
private void playSound() {
v = (Vibrator) this.getSystemService(VIBRATOR_SERVICE);
long[] pattern = {0, 100, 700};
Objects.requireNonNull(v).vibrate(pattern, 0);
try {
Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
BG = MediaPlayer.create(getBaseContext(), notification);
} catch (Exception e) {
e.printStackTrace();
}
BG.setLooping(true);
BG.setVolume(100, 100);
BG.start();
}
@Override
public void onBackPressed() {
}
@SuppressLint("MissingPermission")
private void getaccept(boolean isAutoBid) {
if (!isAutoBid) {
if (BG != null && BG.isPlaying()) {
BG.stop();
v.cancel();
}
timerplay.cancel();
}
rlprogress.setVisibility(View.VISIBLE);
final User loginUser = BaseApp.getInstance(this).getLoginUser();
DriverService userService = ServiceGenerator.createService(
DriverService.class, loginUser.getNoTelepon(), loginUser.getPassword());
AcceptRequestJson param = new AcceptRequestJson();
param.setId(loginUser.getId());
param.setIdtrans(idtrans);
userService.accept(param).enqueue(new Callback<AcceptResponseJson>() {
@Override
public void onResponse(@NonNull Call<AcceptResponseJson> call, @NonNull final Response<AcceptResponseJson> response) {
if (response.isSuccessful()) {
sp.updateNotif("OFF");
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("berhasil")) {
rlprogress.setVisibility(View.GONE);
Intent i = new Intent(NewOrderActivity.this, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
OrderFCM orderfcm = new OrderFCM();
orderfcm.id_driver = loginUser.getId();
orderfcm.id_transaksi = idtrans;
orderfcm.response = "2";
if (orderfitur.equalsIgnoreCase("4")) {
orderfcm.desc = "pengemudi sedang ambil pesanan";
orderfcm.id_pelanggan = idpelanggan;
orderfcm.invoice = "INV-"+idtrans+idtransmerchant;
orderfcm.ordertime = waktuorder;
sendMessageToDriver(tokenmerchant, orderfcm);
} else {
orderfcm.desc = getString(R.string.notification_start);
}
sendMessageToDriver(regid, orderfcm);
} else {
sp.updateNotif("OFF");
rlprogress.setVisibility(View.GONE);
Intent i = new Intent(NewOrderActivity.this, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
Toast.makeText(NewOrderActivity.this, "Pesanan tidak lagi tersedia!", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onFailure(@NonNull Call<AcceptResponseJson> call, @NonNull Throwable t) {
Toast.makeText(NewOrderActivity.this, "Error Koneksi!", Toast.LENGTH_SHORT).show();
rlprogress.setVisibility(View.GONE);
sp.updateNotif("OFF");
rlprogress.setVisibility(View.GONE);
Intent i = new Intent(NewOrderActivity.this, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
});
}
private void sendMessageToDriver(final String regIDTujuan, final OrderFCM response) {
final FCMMessage message = new FCMMessage();
message.setTo(regIDTujuan);
message.setData(response);
FCMHelper.sendMessage(message).enqueue(new okhttp3.Callback() {
@Override
public void onResponse(@NonNull okhttp3.Call call, @NonNull okhttp3.Response response) {
Log.e("REQUEST TO DRIVER", message.getData().toString());
}
@Override
public void onFailure(@NonNull okhttp3.Call call, @NonNull IOException e) {
e.printStackTrace();
}
});
}
private void removeNotif() {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Objects.requireNonNull(notificationManager).cancel(0);
}
private void setScreenOnFlags() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(true);
setTurnScreenOn(true);
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
Objects.requireNonNull(keyguardManager).requestDismissKeyguard(this, null);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
} else {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
}
}

View File

@@ -0,0 +1,560 @@
package id.ontime.driver.activity;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.facebook.shimmer.ShimmerFrameLayout;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MapStyleOptions;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import id.ontime.driver.R;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.gmap.directions.Directions;
import id.ontime.driver.gmap.directions.Route;
import id.ontime.driver.item.ItemPesananItem;
import id.ontime.driver.utils.api.MapDirectionAPI;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import id.ontime.driver.json.DetailRequestJson;
import id.ontime.driver.json.DetailTransResponseJson;
import id.ontime.driver.models.PelangganModel;
import id.ontime.driver.models.TransaksiModel;
import id.ontime.driver.models.User;
import id.ontime.driver.utils.Log;
import id.ontime.driver.utils.Utility;
import id.ontime.driver.utils.PicassoTrustAll;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import javax.annotation.Nullable;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.core.widget.NestedScrollView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import de.hdodenhof.circleimageview.CircleImageView;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class OrderDetailActivity extends AppCompatActivity implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
LinearLayout bottomsheet;
TextView layanan;
TextView layanandesk;
LinearLayout llchat;
CircleImageView foto;
TextView pickUpText;
TextView destinationText;
TextView fiturtext;
TextView distanceText;
TextView priceText;
TextView namamerchant;
Button orderButton;
RelativeLayout rlprogress;
TextView textprogress;
ImageView phone;
ImageView chat;
LinearLayout llchatmerchant;
LinearLayout lldestination;
LinearLayout lldistance;
LinearLayout lldetailsend;
TextView produk;
TextView sendername;
TextView receivername;
Button senderphone;
Button receiverphone;
NestedScrollView scrollView;
ImageView backbutton;
LinearLayout llrating;
LinearLayout llbutton;
TextView cost;
TextView deliveryfee;
LinearLayout llorderdetail;
LinearLayout llmerchantdetail;
LinearLayout llmerchantinfo;
ShimmerFrameLayout shimmerlayanan;
ShimmerFrameLayout shimmerpickup;
ShimmerFrameLayout shimmerdestination;
ShimmerFrameLayout shimmerfitur;
ShimmerFrameLayout shimmerdistance;
ShimmerFrameLayout shimmerprice;
RecyclerView rvmerchantnear;
private GoogleMap gMap;
private static final int REQUEST_PERMISSION_LOCATION = 991;
private static final int REQUEST_PERMISSION_CALL = 992;
private GoogleApiClient googleApiClient;
private LatLng pickUpLatLng;
private LatLng destinationLatLng;
private Polyline directionLine;
private Marker pickUpMarker;
private Marker destinationMarker;
String idtrans, idpelanggan, response, fitur;
ItemPesananItem itemPesananItem;
TextView totaltext;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail_order);
bottomsheet = findViewById(R.id.bottom_sheet);
layanan = findViewById(R.id.layanan);
layanandesk = findViewById(R.id.layanandes);
llchat = findViewById(R.id.llchat);
foto = findViewById(R.id.background);
pickUpText = findViewById(R.id.pickUpText);
destinationText = findViewById(R.id.destinationText);
fiturtext = findViewById(R.id.fitur);
distanceText = findViewById(R.id.distance);
priceText = findViewById(R.id.price);
namamerchant = findViewById(R.id.namamerchant);
orderButton = findViewById(R.id.order);
rlprogress = findViewById(R.id.rlprogress);
textprogress = findViewById(R.id.textprogress);
phone = findViewById(R.id.phonenumber);
chat = findViewById(R.id.chat);
llchatmerchant = findViewById(R.id.llchatmerchant);
lldestination = findViewById(R.id.lldestination);
lldistance = findViewById(R.id.lldistance);
lldetailsend = findViewById(R.id.senddetail);
produk = findViewById(R.id.produk);
sendername = findViewById(R.id.sendername);
receivername = findViewById(R.id.receivername);
senderphone = findViewById(R.id.senderphone);
receiverphone = findViewById(R.id.receiverphone);
scrollView = findViewById(R.id.scroller);
backbutton = findViewById(R.id.back_btn);
llrating = findViewById(R.id.status);
llbutton = findViewById(R.id.llbutton);
cost = findViewById(R.id.cost);
deliveryfee = findViewById(R.id.deliveryfee);
llorderdetail = findViewById(R.id.orderdetail);
llmerchantdetail = findViewById(R.id.merchantdetail);
llmerchantinfo = findViewById(R.id.merchantinfo);
shimmerlayanan = findViewById(R.id.shimmerlayanan);
shimmerpickup = findViewById(R.id.shimmerpickup);
shimmerdestination = findViewById(R.id.shimmerdestination);
shimmerfitur = findViewById(R.id.shimmerfitur);
shimmerdistance = findViewById(R.id.shimmerdistance);
shimmerprice = findViewById(R.id.shimmerprice);
rvmerchantnear = findViewById(R.id.merchantnear);
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomsheet);
behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
behavior.setPeekHeight(300);
llrating.setVisibility(View.VISIBLE);
backbutton.setVisibility(View.VISIBLE);
llbutton.setVisibility(View.GONE);
llchat.setVisibility(View.GONE);
llchatmerchant.setVisibility(View.GONE);
totaltext = findViewById(R.id.totaltext);
shimmerload();
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.mapView);
Objects.requireNonNull(mapFragment).getMapAsync(this);
if (googleApiClient == null) {
googleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
backbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
rvmerchantnear.setHasFixedSize(true);
rvmerchantnear.setNestedScrollingEnabled(false);
rvmerchantnear.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
Intent intent = getIntent();
idpelanggan = intent.getStringExtra("id_pelanggan");
idtrans = intent.getStringExtra("id_transaksi");
response = intent.getStringExtra("response");
if (Objects.equals(response, "2")) {
llchat.setVisibility(View.VISIBLE);
layanandesk.setText(getString(R.string.notification_accept));
} else if (Objects.equals(response, "3")) {
llchat.setVisibility(View.VISIBLE);
orderButton.setVisibility(View.GONE);
layanandesk.setText(getString(R.string.notification_start));
} else if (Objects.equals(response, "4")) {
scrollView.setPadding(0,0,0,10);
llchat.setVisibility(View.GONE);
orderButton.setVisibility(View.GONE);
layanandesk.setText(getString(R.string.notification_finish));
} else if (Objects.equals(response, "5")) {
scrollView.setPadding(0,0,0,10);
llchat.setVisibility(View.GONE);
orderButton.setVisibility(View.GONE);
layanandesk.setText(getString(R.string.notification_cancel));
}
}
private void getData(final String idtrans, final String idpelanggan) {
User loginUser = BaseApp.getInstance(this).getLoginUser();
DriverService service = ServiceGenerator.createService(DriverService.class, loginUser.getEmail(), loginUser.getPassword());
DetailRequestJson param = new DetailRequestJson();
param.setId(idtrans);
param.setIdPelanggan(idpelanggan);
service.detailtrans(param).enqueue(new Callback<DetailTransResponseJson>() {
@Override
public void onResponse(@NonNull Call<DetailTransResponseJson> call, @NonNull Response<DetailTransResponseJson> responsedata) {
if (responsedata.isSuccessful()) {
shimmertutup();
Log.e("", String.valueOf(Objects.requireNonNull(responsedata.body()).getData().get(0)));
final TransaksiModel transaksi = responsedata.body().getData().get(0);
PelangganModel pelanggan = responsedata.body().getPelanggan().get(0);
pickUpLatLng = new LatLng(transaksi.getStartLatitude(), transaksi.getStartLongitude());
destinationLatLng = new LatLng(transaksi.getEndLatitude(), transaksi.getEndLongitude());
fitur = transaksi.getOrderFitur();
switch (transaksi.getHome()) {
case "3":
lldestination.setVisibility(View.GONE);
lldistance.setVisibility(View.GONE);
fiturtext.setText(transaksi.getEstimasi());
break;
case "4":
llorderdetail.setVisibility(View.VISIBLE);
llmerchantdetail.setVisibility(View.VISIBLE);
llmerchantinfo.setVisibility(View.VISIBLE);
Utility.currencyTXT(deliveryfee, String.valueOf(transaksi.getHarga()), OrderDetailActivity.this);
Utility.currencyTXT(cost, String.valueOf(transaksi.getTotal_biaya()), OrderDetailActivity.this);
namamerchant.setText(transaksi.getNama_merchant());
itemPesananItem = new ItemPesananItem(responsedata.body().getItem(), R.layout.item_pesanan);
rvmerchantnear.setAdapter(itemPesananItem);
break;
case "2":
requestRoute();
lldetailsend.setVisibility(View.VISIBLE);
produk.setText(transaksi.getNamaBarang());
sendername.setText(transaksi.namaPengirim);
receivername.setText(transaksi.namaPenerima);
senderphone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(OrderDetailActivity.this, R.style.DialogStyle);
alertDialogBuilder.setTitle("Call Driver");
alertDialogBuilder.setMessage("You want to call " + transaksi.getNamaPengirim() + "(" + transaksi.teleponPengirim + ")?");
alertDialogBuilder.setPositiveButton("yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
if (ActivityCompat.checkSelfPermission(OrderDetailActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(OrderDetailActivity.this, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_PERMISSION_CALL);
return;
}
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + transaksi.teleponPengirim));
startActivity(callIntent);
}
});
alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
});
receiverphone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(OrderDetailActivity.this, R.style.DialogStyle);
alertDialogBuilder.setTitle("Call Driver");
alertDialogBuilder.setMessage("You want to call " + transaksi.getNamaPenerima() + "(" + transaksi.teleponPenerima + ")?");
alertDialogBuilder.setPositiveButton("yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
if (ActivityCompat.checkSelfPermission(OrderDetailActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(OrderDetailActivity.this, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_PERMISSION_CALL);
return;
}
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + transaksi.teleponPenerima));
startActivity(callIntent);
}
});
alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
});
break;
}
if (pickUpMarker != null) pickUpMarker.remove();
pickUpMarker = gMap.addMarker(new MarkerOptions()
.position(pickUpLatLng)
.title("Ambil")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.pickup)));
if (destinationMarker != null) destinationMarker.remove();
destinationMarker = gMap.addMarker(new MarkerOptions()
.position(destinationLatLng)
.title("Tujuan")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.destination)));
updateLastLocation();
parsedata(transaksi, pelanggan);
}
}
@Override
public void onFailure(@NonNull retrofit2.Call<DetailTransResponseJson> call, @NonNull Throwable t) {
}
});
}
private void shimmerload() {
shimmerlayanan.startShimmerAnimation();
shimmerpickup.startShimmerAnimation();
shimmerdestination.startShimmerAnimation();
shimmerfitur.startShimmerAnimation();
shimmerdistance.startShimmerAnimation();
shimmerprice.startShimmerAnimation();
layanan.setVisibility(View.GONE);
layanandesk.setVisibility(View.GONE);
pickUpText.setVisibility(View.GONE);
destinationText.setVisibility(View.GONE);
fiturtext.setVisibility(View.GONE);
priceText.setVisibility(View.GONE);
}
private void shimmertutup() {
shimmerlayanan.stopShimmerAnimation();
shimmerpickup.stopShimmerAnimation();
shimmerdestination.stopShimmerAnimation();
shimmerfitur.stopShimmerAnimation();
shimmerdistance.stopShimmerAnimation();
shimmerprice.stopShimmerAnimation();
shimmerlayanan.setVisibility(View.GONE);
shimmerpickup.setVisibility(View.GONE);
shimmerdestination.setVisibility(View.GONE);
shimmerfitur.setVisibility(View.GONE);
shimmerdistance.setVisibility(View.GONE);
shimmerprice.setVisibility(View.GONE);
layanan.setVisibility(View.VISIBLE);
layanandesk.setVisibility(View.VISIBLE);
pickUpText.setVisibility(View.VISIBLE);
destinationText.setVisibility(View.VISIBLE);
distanceText.setVisibility(View.VISIBLE);
fiturtext.setVisibility(View.VISIBLE);
priceText.setVisibility(View.VISIBLE);
}
@SuppressLint("SetTextI18n")
private void parsedata(TransaksiModel request, final PelangganModel pelanggan) {
requestRoute();
rlprogress.setVisibility(View.GONE);
pickUpLatLng = new LatLng(request.getStartLatitude(), request.getStartLongitude());
destinationLatLng = new LatLng(request.getEndLatitude(), request.getEndLongitude());
PicassoTrustAll.getInstance(this)
.load(Constants.IMAGESUSER + pelanggan.getFoto())
.placeholder(R.drawable.image_placeholder)
.into(foto);
if (request.isPakaiWallet()) {
totaltext.setText("Total (Saldo)");
} else {
totaltext.setText("Total (Tunai)");
}
// Rating display is disabled because the third-party rating-view dependency
// is no longer included. You can re-enable it by wiring this value into
// a standard RatingBar or another UI component.
layanan.setText(pelanggan.getFullnama());
pickUpText.setText(request.getAlamatAsal());
destinationText.setText(request.getAlamatTujuan());
if (request.getHome().equals("4")) {
double totalbiaya = Double.parseDouble(request.getTotal_biaya());
Utility.currencyTXT(priceText, String.valueOf(request.getHarga()+ totalbiaya), this);
} else {
Utility.currencyTXT(priceText, String.valueOf(request.getHarga()), this);
}
}
private void updateLastLocation() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_PERMISSION_LOCATION);
return;
}
LocationServices.FusedLocationApi.getLastLocation(
googleApiClient);
gMap.setMyLocationEnabled(true);
if (pickUpLatLng != null) {
gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
pickUpLatLng, 15f)
);
gMap.animateCamera(CameraUpdateFactory.zoomTo(15f));
}
}
private okhttp3.Callback updateRouteCallback = new okhttp3.Callback() {
@Override
public void onFailure(@NonNull okhttp3.Call call, @NonNull IOException e) {
}
@Override
public void onResponse(@NonNull okhttp3.Call call, okhttp3.Response response) throws IOException {
if (response.isSuccessful()) {
final String json = Objects.requireNonNull(response.body()).string();
final String error = MapDirectionAPI.getDirectionErrorMessage(json);
if (error != null) {
return;
}
final long distance = MapDirectionAPI.getDistance(OrderDetailActivity.this, json);
final String time = MapDirectionAPI.getTimeDistance(OrderDetailActivity.this, json);
if (distance >= 0) {
runOnUiThread(new Runnable() {
@Override
public void run() {
updateLineDestination(json);
float km = ((float) (distance)) / 1000f;
String format = String.format(Locale.US, "%.1f", km);
distanceText.setText(format);
fiturtext.setText(time);
}
});
}
}
}
};
private void requestRoute() {
if (pickUpLatLng != null && destinationLatLng != null) {
MapDirectionAPI.getDirection(OrderDetailActivity.this, pickUpLatLng, destinationLatLng)
.enqueue(updateRouteCallback);
}
}
private void updateLineDestination(String json) {
Directions directions = new Directions(this);
try {
List<Route> routes = directions.parse(json);
if (directionLine != null) directionLine.remove();
if (routes.size() > 0) {
directionLine = gMap.addPolyline((new PolylineOptions())
.addAll(routes.get(0).getOverviewPolyLine())
.color(ContextCompat.getColor(this, R.color.colorgradient))
.width(8));
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onConnected(@androidx.annotation.Nullable Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override
public void onMapReady(GoogleMap googleMap) {
gMap = googleMap;
gMap.getUiSettings().setMyLocationButtonEnabled(true);
try {
boolean success = googleMap.setMapStyle(
MapStyleOptions.loadRawResourceStyle(
this, R.raw.style_json));
if (!success) {
android.util.Log.e("", "Style parsing failed.");
}
} catch (Resources.NotFoundException e) {
android.util.Log.e("", "Can't find style. Error: ", e);
}
getData(idtrans, idpelanggan);
}
}

View File

@@ -0,0 +1,102 @@
package id.ontime.driver.activity;
import android.graphics.Color;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.webkit.WebView;
import android.widget.ImageView;
import id.ontime.driver.R;
import id.ontime.driver.json.PrivacyRequestJson;
import id.ontime.driver.json.PrivacyResponseJson;
import id.ontime.driver.models.SettingsModel;
import id.ontime.driver.utils.NetworkUtils;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import java.util.Objects;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class PrivacyActivity extends AppCompatActivity {
WebView webView;
ImageView backbtn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_privacy);
webView = findViewById(R.id.webView);
backbtn = findViewById(R.id.back_btn);
webView.setBackgroundColor(Color.TRANSPARENT);
if (NetworkUtils.isConnected(PrivacyActivity.this)) {
get();
}
backbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
private void get() {
PrivacyRequestJson request = new PrivacyRequestJson();
DriverService service = ServiceGenerator.createService(DriverService.class, "admin", "12345");
service.privacy(request).enqueue(new Callback<PrivacyResponseJson>() {
@Override
public void onResponse(@NonNull Call<PrivacyResponseJson> call, @NonNull Response<PrivacyResponseJson> response) {
if (response.isSuccessful()) {
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("found")) {
SettingsModel model = response.body().getData().get(0);
setResult(model);
}
}
}
@Override
public void onFailure(@NonNull Call<PrivacyResponseJson> call, @NonNull Throwable t) {
t.printStackTrace();
}
});
}
private void setResult(SettingsModel getprivacy) {
String mimeType = "text/html";
String encoding = "utf-8";
String htmlText = getprivacy.getPrivacy();
String text = "<html dir=" + "><head>"
+ "<style type=\"text/css\">@font-face {font-family: MyFont;src: url(\"file:///android_asset/fonts/Montserrat_Regular.ttf\")}body{font-family: MyFont;color: #000000;text-align:justify;line-height:1.2}"
+ "</style></head>"
+ "<body>"
+ htmlText
+ "</body></html>";
webView.loadDataWithBaseURL(null, text, mimeType, encoding, null);
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
if (menuItem.getItemId() == android.R.id.home) {
onBackPressed();
} else {
return super.onOptionsItemSelected(menuItem);
}
return true;
}
}

View File

@@ -0,0 +1,158 @@
package id.ontime.driver.activity;
import android.Manifest;
import android.app.NotificationManager;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Toast;
import androidx.core.app.ActivityCompat;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentTransaction;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.tasks.OnSuccessListener;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.R;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.fragment.EnableLlocationFragment;
import id.ontime.driver.models.User;
import java.util.Objects;
public class SplashActivity extends AppCompatActivity {
SharedPreferences sharedPreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_splash);
final User user = BaseApp.getInstance(this).getLoginUser();
removeNotif();
sharedPreferences = getSharedPreferences(Constants.PREF_NAME, MODE_PRIVATE);
new Handler().postDelayed(new Runnable() {
public void run() {
if (user != null) {
if (ActivityCompat.checkSelfPermission(SplashActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(SplashActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
enable_location();
} else {
Intent intent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(intent);
finish();
}
} else {
if (ActivityCompat.checkSelfPermission(SplashActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(SplashActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
enable_location();
} else {
Intent intent = new Intent(SplashActivity.this, IntroActivity.class);
startActivity(intent);
finish();
}
}
}
}, 2000);
}
public void GPSStatus() {
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
boolean GpsStatus = Objects.requireNonNull(locationManager).isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!GpsStatus) {
Toast.makeText(this, "On Location in High Accuracy", Toast.LENGTH_SHORT).show();
startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), 2);
} else {
GetCurrentlocation();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 2) {
GPSStatus();
}
}
private void GetCurrentlocation() {
FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
enable_location();
return;
}
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// Got last known location. In some rare situations this can be null.
if (location != null) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(String.valueOf(Constants.LATITUDE), "" + location.getLatitude());
editor.putString(String.valueOf(Constants.LONGITUDE), "" + location.getLongitude());
editor.apply();
Constants.LATITUDE = location.getLatitude();
Constants.LONGITUDE = location.getLongitude();
startActivity(new Intent(SplashActivity.this, MainActivity.class));
overridePendingTransition(R.anim.from_right, R.anim.to_left);
finish();
} else {
if (sharedPreferences.getString(String.valueOf(Constants.LATITUDE), "").equals("") || sharedPreferences.getString(String.valueOf(Constants.LONGITUDE), "").equals("")) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(String.valueOf(Constants.LATITUDE), "33.738045");
editor.putString(String.valueOf(Constants.LONGITUDE), "73.084488");
editor.apply();
Constants.LATITUDE = Double.valueOf("33.738045");
Constants.LONGITUDE = Double.valueOf("73.084488");
}
startActivity(new Intent(SplashActivity.this, MainActivity.class));
overridePendingTransition(R.anim.from_right, R.anim.to_left);
finish();
}
}
});
}
private void enable_location() {
EnableLlocationFragment enable_llocationFragment = new EnableLlocationFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.from_right, R.anim.to_left, R.anim.from_left, R.anim.to_right);
getSupportFragmentManager().popBackStackImmediate();
transaction.replace(R.id.splash, enable_llocationFragment).addToBackStack(null).commit();
}
private void removeNotif() {
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Objects.requireNonNull(notificationManager).cancel(0);
}
}

View File

@@ -0,0 +1,296 @@
package id.ontime.driver.activity;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.cardview.widget.CardView;
import id.ontime.driver.R;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.json.ResponseJson;
import id.ontime.driver.json.WithdrawRequestJson;
import id.ontime.driver.json.fcm.FCMMessage;
import id.ontime.driver.models.Notif;
import id.ontime.driver.models.User;
import id.ontime.driver.utils.SettingPreference;
import id.ontime.driver.utils.Utility;
import id.ontime.driver.utils.api.FCMHelper;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Objects;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class TopupSaldoActivity extends AppCompatActivity {
EditText nominal;
CardView text1, text2, text3, text4, text5, text6;
RelativeLayout rlnotif, rlprogress;
TextView textnotif, privacy;
Button whatsapp;
String disableback;
LinearLayout banktransfer;
private String paymentAmount;
SettingPreference sp;
ImageView backBtn;
boolean debug;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_topup);
View bottom_sheet = findViewById(R.id.bottom_sheet);
BottomSheetBehavior.from(bottom_sheet);
sp = new SettingPreference(this);
nominal = findViewById(R.id.saldo);
text1 = findViewById(R.id.text1);
text2 = findViewById(R.id.text2);
text3 = findViewById(R.id.text3);
text4 = findViewById(R.id.text4);
text5 = findViewById(R.id.text5);
text6 = findViewById(R.id.text6);
rlnotif = findViewById(R.id.rlnotif);
textnotif = findViewById(R.id.textnotif);
rlprogress = findViewById(R.id.rlprogress);
backBtn = findViewById(R.id.back_btn);
banktransfer = findViewById(R.id.banktransfer);
whatsapp = findViewById(R.id.whatsapp);
privacy = findViewById(R.id.privacy);
nominal.addTextChangedListener(Utility.currencyTW(nominal,this));
banktransfer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!nominal.getText().toString().isEmpty()) {
sheetlist();
} else {
notif("nominal tidak boleh kosong!");
}
}
});
whatsapp.setOnClickListener(v -> {
Intent i = new Intent(TopupSaldoActivity.this, ConfirmWAActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
});
privacy.setOnClickListener(v -> {
Intent i = new Intent(TopupSaldoActivity.this, PrivacyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
});
text1.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick(View v) {
nominal.setText("20.000");
}
});
text2.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick(View v) {
nominal.setText("50.000");
}
});
text3.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick(View v) {
nominal.setText("100.000");
}
});
text4.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick(View v) {
nominal.setText("200.000");
}
});
text5.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick(View v) {
nominal.setText("300.000");
}
});
text6.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick(View v) {
nominal.setText("500.000");
}
});
backBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
disableback = "false";
}
public void notif(String text) {
rlnotif.setVisibility(View.VISIBLE);
textnotif.setText(text);
new Handler().postDelayed(new Runnable() {
public void run() {
rlnotif.setVisibility(View.GONE);
}
}, 2000);
}
@Override
public void onBackPressed() {
if (!disableback.equals("true")) {
finish();
}
}
public String convertAngka(String value) {
return (((((value + "")
.replaceAll(sp.getSetting()[4], ""))
.replaceAll(" ", ""))
.replaceAll(",", ""))
.replaceAll("[$.]", ""));
}
private void sheetlist() {
Intent i = new Intent(TopupSaldoActivity.this, WithdrawActivity.class);
i.putExtra("type","topup");
i.putExtra("nominal", convertAngka(nominal.getText().toString()));
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
private void submit() {
progressshow();
paymentAmount = nominal.getText().toString();
final User user = BaseApp.getInstance(this).getLoginUser();
WithdrawRequestJson request = new WithdrawRequestJson();
request.setId(user.getId());
request.setBank("midtrans");
request.setName(user.getFullnama());
request.setAmount(convertAngka(paymentAmount.replace(sp.getSetting()[4],"")));
request.setCard("1234");
request.setNotelepon(user.getNoTelepon());
request.setEmail(user.getEmail());
DriverService service = ServiceGenerator.createService(DriverService.class, user.getNoTelepon(), user.getPassword());
service.topupmidtrans(request).enqueue(new Callback<ResponseJson>() {
@Override
public void onResponse(@NonNull Call<ResponseJson> call, @NonNull Response<ResponseJson> response) {
progresshide();
if (response.isSuccessful()) {
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("success")) {
Intent i = new Intent(TopupSaldoActivity.this,MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
Notif notif = new Notif();
notif.title = "Topup";
notif.message = "topup berhasil";
sendNotif(user.getToken(), notif);
} else {
notif("error, silahkan cek akun anda!");
}
} else {
notif("error!");
}
}
@Override
public void onFailure(@NonNull Call<ResponseJson> call, @NonNull Throwable t) {
progresshide();
t.printStackTrace();
notif("error");
}
});
}
public void progressshow() {
rlprogress.setVisibility(View.VISIBLE);
disableback = "true";
}
public void progresshide() {
rlprogress.setVisibility(View.GONE);
disableback = "false";
}
private void sendNotif(final String regIDTujuan, final Notif notif) {
final FCMMessage message = new FCMMessage();
message.setTo(regIDTujuan);
message.setData(notif);
FCMHelper.sendMessage(message).enqueue(new okhttp3.Callback() {
@Override
public void onResponse(@NonNull okhttp3.Call call, @NonNull okhttp3.Response response) {
}
@Override
public void onFailure(@NonNull okhttp3.Call call, @NonNull IOException e) {
e.printStackTrace();
}
});
}
public static String hashCal(String str) {
byte[] hashseq = str.getBytes();
StringBuilder hexString = new StringBuilder();
try {
MessageDigest algorithm = MessageDigest.getInstance("SHA-512");
algorithm.reset();
algorithm.update(hashseq);
byte[] messageDigest = algorithm.digest();
for (byte aMessageDigest : messageDigest) {
String hex = Integer.toHexString(0xFF & aMessageDigest);
if (hex.length() == 1) {
hexString.append("0");
}
hexString.append(hex);
}
} catch (NoSuchAlgorithmException ignored) {
}
return hexString.toString();
}
}

View File

@@ -0,0 +1,116 @@
package id.ontime.driver.activity;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.facebook.shimmer.ShimmerFrameLayout;
import id.ontime.driver.R;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.item.WalletItem;
import id.ontime.driver.json.WalletRequestJson;
import id.ontime.driver.json.WalletResponseJson;
import id.ontime.driver.models.User;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import java.util.Objects;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class WalletActivity extends AppCompatActivity {
ImageView backbtn;
ShimmerFrameLayout shimmer;
RecyclerView recycle;
WalletItem walletItem;
RelativeLayout rlnodata;
Button whatsapp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wallet);
shimmer = findViewById(R.id.shimmerwallet);
recycle = findViewById(R.id.recycle);
rlnodata = findViewById(R.id.rlnodata);
backbtn = findViewById(R.id.back_btn);
whatsapp = findViewById(R.id.whatsapp);
recycle.setHasFixedSize(true);
recycle.setLayoutManager(new GridLayoutManager(this, 1));
backbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
whatsapp.setOnClickListener(v -> {
Intent i = new Intent(WalletActivity.this, ConfirmWAActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
});
getdatawallet();
}
private void shimmershow() {
recycle.setVisibility(View.GONE);
shimmer.setVisibility(View.VISIBLE);
shimmer.startShimmerAnimation();
}
private void shimmertutup() {
recycle.setVisibility(View.VISIBLE);
shimmer.setVisibility(View.GONE);
shimmer.stopShimmerAnimation();
}
private void getdatawallet() {
shimmershow();
User loginUser = BaseApp.getInstance(this).getLoginUser();
DriverService driverService = ServiceGenerator.createService(
DriverService.class, loginUser.getNoTelepon(), loginUser.getPassword());
WalletRequestJson param = new WalletRequestJson();
param.setId(loginUser.getId());
driverService.wallet(param).enqueue(new Callback<WalletResponseJson>() {
@Override
public void onResponse(@NonNull Call<WalletResponseJson> call, @NonNull Response<WalletResponseJson> response) {
if (response.isSuccessful()) {
shimmertutup();
walletItem = new WalletItem(WalletActivity.this, Objects.requireNonNull(response.body()).getData(), R.layout.item_wallet);
recycle.setAdapter(walletItem);
if (response.body().getData().isEmpty()) {
recycle.setVisibility(View.GONE);
rlnodata.setVisibility(View.VISIBLE);
} else {
recycle.setVisibility(View.VISIBLE);
rlnodata.setVisibility(View.GONE);
}
}
}
@Override
public void onFailure(@NonNull Call<WalletResponseJson> call, @NonNull Throwable t) {
}
});
}
}

View File

@@ -0,0 +1,256 @@
package id.ontime.driver.activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import id.ontime.driver.R;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.item.BankItem;
import id.ontime.driver.json.BankResponseJson;
import id.ontime.driver.json.WithdrawRequestJson;
import id.ontime.driver.json.WithdrawResponseJson;
import id.ontime.driver.json.fcm.FCMMessage;
import id.ontime.driver.models.Notif;
import id.ontime.driver.models.User;
import id.ontime.driver.utils.SettingPreference;
import id.ontime.driver.utils.Utility;
import id.ontime.driver.utils.api.FCMHelper;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import java.io.IOException;
import java.util.Objects;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class WithdrawActivity extends AppCompatActivity {
EditText amount, bank, accnumber, nama;
Button submit;
TextView notif;
ImageView backbtn, images;
RelativeLayout rlnotif, rlprogress;
String disableback, type, nominal;
SettingPreference sp;
RecyclerView petunjuk;
LinearLayout llpentunjuk;
BankItem bankItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_withdraw);
disableback = "false";
amount = findViewById(R.id.amount);
bank = findViewById(R.id.bank);
accnumber = findViewById(R.id.accnumber);
backbtn = findViewById(R.id.back_btn);
submit = findViewById(R.id.submit);
rlnotif = findViewById(R.id.rlnotif);
notif = findViewById(R.id.textnotif);
rlprogress = findViewById(R.id.rlprogress);
nama = findViewById(R.id.namanumber);
images = findViewById(R.id.imagebackground);
sp = new SettingPreference(this);
llpentunjuk = findViewById(R.id.llpentunjuk);
petunjuk = findViewById(R.id.petunjuk);
sp = new SettingPreference(this);
Intent intent = getIntent();
type = intent.getStringExtra("type");
if (Objects.equals(type, "topup")) {
images.setImageResource(R.drawable.atm);
images.setScaleType(ImageView.ScaleType.FIT_XY);
nominal = intent.getStringExtra("nominal");
Utility.currencyTXT(amount, Objects.requireNonNull(nominal), WithdrawActivity.this);
petunjuk.setHasFixedSize(true);
petunjuk.setNestedScrollingEnabled(false);
petunjuk.setLayoutManager(new GridLayoutManager(this, 1));
getpetunjuk();
}
amount.addTextChangedListener(Utility.currencyTW(amount, this));
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
User userLogin = BaseApp.getInstance(WithdrawActivity.this).getLoginUser();
if (type.equals("withdraw")) {
if (amount.getText().toString().isEmpty()) {
notif("Jumlah tidak boleh kosong!");
} else if (Long.parseLong(amount.getText()
.toString()
.replace(".", "")
.replace(",", "")
.replace(sp.getSetting()[4], "")) > userLogin.getWalletSaldo()) {
notif("saldo Anda tidak cukup!");
} else if (bank.getText().toString().isEmpty()) {
notif("bank tidak boleh kosong!");
} else if (accnumber.getText().toString().isEmpty()) {
notif("nomor rekening tidak boleh kosong!");
} else {
submit();
}
} else {
if (amount.getText().toString().isEmpty()) {
notif("jumlah tidak boleh kosong!");
} else if (bank.getText().toString().isEmpty()) {
notif("bank tidak boleh kosong!");
} else if (accnumber.getText().toString().isEmpty()) {
notif("nomor rekening tidak boleh kosong!");
} else {
submit();
}
}
}
});
backbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
private void submit() {
progressshow();
final User user = BaseApp.getInstance(this).getLoginUser();
WithdrawRequestJson request = new WithdrawRequestJson();
request.setId(user.getId());
request.setBank(bank.getText().toString());
request.setName(nama.getText().toString());
request.setAmount(amount.getText().toString().replace(".", "").replace(sp.getSetting()[4], ""));
request.setCard(accnumber.getText().toString());
request.setNotelepon(user.getNoTelepon());
request.setEmail(user.getEmail());
request.setType(type);
DriverService service = ServiceGenerator.createService(DriverService.class, user.getNoTelepon(), user.getPassword());
service.withdraw(request).enqueue(new Callback<WithdrawResponseJson>() {
@Override
public void onResponse(@NonNull Call<WithdrawResponseJson> call, @NonNull Response<WithdrawResponseJson> response) {
progresshide();
if (response.isSuccessful()) {
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("success")) {
Intent intent = new Intent(WithdrawActivity.this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();
Notif notif = new Notif();
if (type.equals("withdraw")) {
notif.title = "Withdraw";
notif.message = "Permintaan penarikan telah berhasil, kami akan mengirimkan pemberitahuan setelah kami mengirim dana ke akun Anda";
} else {
notif.title = "Topup";
notif.message = "Permintaan TopUp telah berhasil, Segera Transfer dan Konfirmasi Pembayaran ke Admin";
}
sendNotif(user.getToken(), notif);
} else {
notif("error, silahkan cek data akun anda!");
}
} else {
notif("error!");
}
}
@Override
public void onFailure(@NonNull Call<WithdrawResponseJson> call, @NonNull Throwable t) {
progresshide();
t.printStackTrace();
notif("error");
}
});
}
public void onBackPressed() {
if (!disableback.equals("true")) {
finish();
}
}
public void notif(String text) {
rlnotif.setVisibility(View.VISIBLE);
notif.setText(text);
new Handler().postDelayed(new Runnable() {
public void run() {
rlnotif.setVisibility(View.GONE);
}
}, 3000);
}
public void progressshow() {
rlprogress.setVisibility(View.VISIBLE);
disableback = "true";
}
public void progresshide() {
rlprogress.setVisibility(View.GONE);
disableback = "false";
}
private void sendNotif(final String regIDTujuan, final Notif notif) {
final FCMMessage message = new FCMMessage();
message.setTo(regIDTujuan);
message.setData(notif);
FCMHelper.sendMessage(message).enqueue(new okhttp3.Callback() {
@Override
public void onResponse(@NonNull okhttp3.Call call, @NonNull okhttp3.Response response) {
}
@Override
public void onFailure(@NonNull okhttp3.Call call, @NonNull IOException e) {
e.printStackTrace();
}
});
}
private void getpetunjuk() {
User user = BaseApp.getInstance(this).getLoginUser();
WithdrawRequestJson request = new WithdrawRequestJson();
DriverService service = ServiceGenerator.createService(DriverService.class, user.getNoTelepon(), user.getPassword());
service.listbank(request).enqueue(new Callback<BankResponseJson>() {
@Override
public void onResponse(@NonNull Call<BankResponseJson> call, @NonNull Response<BankResponseJson> response) {
if (response.isSuccessful()) {
llpentunjuk.setVisibility(View.VISIBLE);
bankItem = new BankItem(WithdrawActivity.this, Objects.requireNonNull(response.body()).getData(), R.layout.item_bank);
petunjuk.setAdapter(bankItem);
}
}
@Override
public void onFailure(@NonNull Call<BankResponseJson> call, @NonNull Throwable t) {
t.printStackTrace();
}
});
}
}

View File

@@ -0,0 +1,187 @@
package id.ontime.driver.constants;
import android.Manifest;
import android.app.Application;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.location.Location;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationRequest;
import com.google.android.gms.location.LocationServices;
import com.google.firebase.FirebaseApp;
import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.messaging.FirebaseMessaging;
import id.ontime.driver.json.UpdateLocationRequestJson;
import id.ontime.driver.utils.MyLocationService;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import id.ontime.driver.json.ResponseJson;
import id.ontime.driver.models.FirebaseToken;
import id.ontime.driver.models.User;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.core.app.ActivityCompat;
import androidx.multidex.MultiDex;
import io.realm.Realm;
import io.realm.RealmConfiguration;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class BaseApp extends Application {
private static final int SCHEMA_VERSION = 0;
private User loginUser;
private Realm realmInstance;
public static BaseApp getInstance(Context context) {
return (BaseApp) context.getApplicationContext();
}
LocationRequest locationRequest;
FusedLocationProviderClient fusedLocationProviderClient;
@RequiresApi(api = Build.VERSION_CODES.S)
@Override
public void onCreate() {
super.onCreate();
Realm.init(this);
RealmConfiguration config = new RealmConfiguration.Builder()
.schemaVersion(SCHEMA_VERSION)
.deleteRealmIfMigrationNeeded()
.build();
Realm.setDefaultConfiguration(config);
// realmInstance = Realm.getInstance(config);
realmInstance = Realm.getDefaultInstance();
// Best-effort Firebase initialization and token registration for driver.
// If Firebase is not configured, ignore failures so the app can still run.
try {
FirebaseApp app = FirebaseApp.initializeApp(this);
if (app != null) {
String fcmToken = FirebaseInstanceId.getInstance().getToken();
if (fcmToken != null) {
FirebaseToken token = new FirebaseToken(fcmToken);
FirebaseMessaging.getInstance().subscribeToTopic("ouride");
FirebaseMessaging.getInstance().subscribeToTopic("driver");
realmInstance.beginTransaction();
realmInstance.delete(FirebaseToken.class);
realmInstance.copyToRealm(token);
realmInstance.commitTransaction();
}
}
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
updatelocation();
start();
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
public User getLoginUser() {
return loginUser;
}
public void setLoginUser(User loginUser) {
this.loginUser = loginUser;
}
public final Realm getRealmInstance() {
return realmInstance;
}
private void start() {
Realm realm = getRealmInstance();
User user = realm.where(User.class).findFirst();
if (user != null) {
setLoginUser(user);
}
}
@RequiresApi(api = Build.VERSION_CODES.S)
private void updatelocation() {
buildlocation();
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
fusedLocationProviderClient.requestLocationUpdates(locationRequest, getPendingIntent());
}
@RequiresApi(api = Build.VERSION_CODES.S)
private PendingIntent getPendingIntent() {
Intent intent = new Intent(this, MyLocationService.class);
intent.setAction(MyLocationService.ACTION_PROCESS_UPDATE);
return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_MUTABLE);
}
private void buildlocation() {
locationRequest = new LocationRequest();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(5000);
locationRequest.setFastestInterval(3000);
locationRequest.setSmallestDisplacement(10f);
}
public void Updatelocationdata(final Location location) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
onLocationChanged(location);
}
});
}
public void onLocationChanged(Location location) {
if (location != null) {
User loginUser = getLoginUser();
DriverService service = ServiceGenerator.createService(DriverService.class, loginUser.getEmail(), loginUser.getPassword());
UpdateLocationRequestJson param = new UpdateLocationRequestJson();
param.setId(loginUser.getId());
param.setLatitude(String.valueOf(location.getLatitude()));
param.setLongitude(String.valueOf(location.getLongitude()));
param.setBearing(String.valueOf(location.getBearing()));
service.updatelocation(param).enqueue(new Callback<ResponseJson>() {
@Override
public void onResponse(@NonNull Call<ResponseJson> call, @NonNull Response<ResponseJson> response) {
if (response.isSuccessful()) {
Log.e("location", response.message());
}
}
@Override
public void onFailure(@NonNull retrofit2.Call<ResponseJson> call, @NonNull Throwable t) {
}
});
}
}
}

View File

@@ -0,0 +1,39 @@
package id.ontime.driver.constants;
import java.text.SimpleDateFormat;
import java.util.Locale;
public class Constants {
private static final String BASE_URL = "https://apitest.semestaterpadu.my.id/";
public static final String URL = "https://panic.on-time.id/"; //panicButton
public static final String CONNECTION = BASE_URL + "api/";
public static final String IMAGESFITUR = BASE_URL + "images/fitur/";
public static final String IMAGESBANK = BASE_URL + "images/bank/";
public static final String IMAGESDRIVER = BASE_URL + "images/fotodriver/";
public static final String IMAGESUSER = BASE_URL + "images/pelanggan/";
public static final String IMAGESMERCHANT = BASE_URL + "images/merchant/";
public static String CURRENCY = "";
public static Double LATITUDE;
public static Double LONGITUDE;
public static String LOCATION;
public static String TOKEN = "token";
public static String USERID = "uid";
public static String PREF_NAME = "pref_name";
public static int permission_camera_code = 786;
public static int permission_write_data = 788;
public static int permission_Read_data = 789;
public static int permission_Recording_audio = 790;
public static SimpleDateFormat df =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH);
public static String versionname = "1.0";
}

View File

@@ -0,0 +1,24 @@
package id.ontime.driver.constants;
import android.app.Activity;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import java.util.Objects;
/**
* Created by Ourdevelops Team on 10/20/2018.
*/
public class Functions {
public static void hideSoftKeyboard(Activity activity) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
View view = activity.getCurrentFocus();
if (view == null) {
view = new View(activity);
}
Objects.requireNonNull(imm).hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}

View File

@@ -0,0 +1,85 @@
package id.ontime.driver.constants;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.AsyncTask;
import id.ontime.driver.R;
import org.jsoup.Jsoup;
import java.io.IOException;
import java.util.Objects;
/**
* Created by ontime on 12/4/2018.
*/
public class VersionChecker extends AsyncTask<String, String, String> {
private String newVersion;
@SuppressLint("StaticFieldLeak")
private Activity context;
public VersionChecker(Activity context) {
this.context = context;
}
@Override
protected String doInBackground(String... params) {
try {
newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + context.getPackageName() + "&hl=en")
.timeout(30000)
.userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
.referrer("http://www.google.com")
.get()
.select(".IQ1z0d .htlgb")
.get(7)
.ownText();
} catch (IOException e) {
e.printStackTrace();
}
return newVersion;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
PackageInfo pInfo = null;
try {
pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if (newVersion != null) {
int latestVersion = Integer.parseInt(newVersion.replace(".", ""));
int versionCode = Integer.parseInt(Objects.requireNonNull(pInfo).versionName.replace(".", ""));
if (versionCode < latestVersion) {
AlertDialog.Builder alert = new AlertDialog.Builder(context, R.style.DialogStyle);
alert.setTitle(R.string.app_name)
.setIcon(R.mipmap.ic_launcher)
.setMessage("Please update" + " " + context.getString(R.string.app_name) + " " + "app. you have an old version.")
.setNegativeButton("Update", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + context.getPackageName())));
context.finish();
}
});
alert.setCancelable(false);
alert.show();
}
}
}
}

View File

@@ -0,0 +1,195 @@
package id.ontime.driver.fragment;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.widget.Button;
import android.widget.Toast;
import com.google.android.gms.location.FusedLocationProviderClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.tasks.OnSuccessListener;
import id.ontime.driver.activity.MainActivity;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.R;
import id.ontime.driver.activity.IntroActivity;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.models.User;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import static android.content.Context.MODE_PRIVATE;
public class EnableLlocationFragment extends Fragment {
private Context context;
private SharedPreferences sharedPreferences;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View getView = inflater.inflate(R.layout.fragment_enablelocation, container, false);
context = getContext();
sharedPreferences = Objects.requireNonNull(context).getSharedPreferences(Constants.PREF_NAME, MODE_PRIVATE);
Button enableLocation = getView.findViewById(R.id.enable_location_btn);
enableLocation.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getLocationPermission();
}
});
return getView;
}
@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
// Skip custom fragment animations now that the third-party library has been removed.
if (enter) {
GPSStatus();
}
return super.onCreateAnimation(transit, enter, nextAnim);
}
private void getLocationPermission() {
requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION},
123);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 123) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
GetCurrentlocation();
} else {
Toast.makeText(context, "Please Grant permission", Toast.LENGTH_SHORT).show();
}
}
}
private void GPSStatus() {
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
boolean GpsStatus = Objects.requireNonNull(locationManager).isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!GpsStatus) {
Toast.makeText(context, "On Location in High Accuracy", Toast.LENGTH_SHORT).show();
startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), 2);
} else {
GetCurrentlocation();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 2) {
GPSStatus();
}
}
private void GetCurrentlocation() {
FusedLocationProviderClient mFusedLocationClient = LocationServices.getFusedLocationProviderClient(context);
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
getLocationPermission();
return;
}
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(requireActivity(), new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
if (location != null) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(String.valueOf(Constants.LATITUDE), "" + location.getLatitude());
editor.putString(String.valueOf(Constants.LONGITUDE), "" + location.getLongitude());
editor.apply();
Constants.LATITUDE = location.getLatitude();
Constants.LONGITUDE = location.getLongitude();
try {
Geocoder geocoder = new Geocoder(getActivity(), Locale.getDefault());
final List<Address> addresses = geocoder.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
if (!addresses.isEmpty()) {
addresses.size();
String address = addresses.get(0).getAddressLine(0);
Constants.LOCATION = String.valueOf(address);
} else {
Constants.LOCATION = "not Availeble";
}
} catch (IOException e) {
e.printStackTrace();
}
GoToNext_Activty();
} else {
if (sharedPreferences.getString(String.valueOf(Constants.LATITUDE), "").equals("") || sharedPreferences.getString(String.valueOf(Constants.LONGITUDE), "").equals("")) {
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(String.valueOf(Constants.LATITUDE), "33.738045");
editor.putString(String.valueOf(Constants.LONGITUDE), "73.084488");
editor.apply();
}
GoToNext_Activty();
}
}
});
}
private void GoToNext_Activty() {
final User user = BaseApp.getInstance(context).getLoginUser();
if (user != null) {
Intent intent = new Intent(getActivity(), MainActivity.class);
startActivity(intent);
requireActivity().finish();
} else {
Intent intent = new Intent(getActivity(), IntroActivity.class);
startActivity(intent);
requireActivity().finish();
}
}
}

View File

@@ -0,0 +1,124 @@
package id.ontime.driver.fragment;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.Toast;
import id.ontime.driver.R;
import com.squareup.picasso.Callback;
import id.ontime.driver.utils.PicassoTrustAll;
import java.io.File;
import java.util.Objects;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
public class FullImageFragment extends Fragment {
private Context context;
private String chat_id;
private ProgressBar progressBar;
private File fullpath;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View getView = inflater.inflate(R.layout.fragment_fullimage, container, false);
context = getContext();
DisplayMetrics displayMetrics = new DisplayMetrics();
Objects.requireNonNull(getActivity()).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
String imageUrl = Objects.requireNonNull(getArguments()).getString("image_url");
chat_id = getArguments().getString("chat_id");
Button savebtn2 = getView.findViewById(R.id.savebtn2);
ImageView closeGallery = getView.findViewById(R.id.close_gallery);
closeGallery.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Objects.requireNonNull(getActivity()).onBackPressed();
}
});
fullpath = new File(Environment.getExternalStorageDirectory() + "/ourride/" + chat_id + ".jpg");
Button savebtn = getView.findViewById(R.id.savebtn);
if (fullpath.exists()) {
savebtn.setVisibility(View.GONE);
savebtn2.setVisibility(View.VISIBLE);
}
savebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "Save not available in this build.", Toast.LENGTH_SHORT).show();
}
});
progressBar = getView.findViewById(R.id.progress);
ImageView singleImage = getView.findViewById(R.id.single_image);
if (fullpath.exists()) {
Uri uri = Uri.parse(fullpath.getAbsolutePath());
singleImage.setImageURI(uri);
} else {
progressBar.setVisibility(View.VISIBLE);
PicassoTrustAll.getInstance(context).load(imageUrl).placeholder(R.drawable.image_placeholder)
.into(singleImage, new Callback() {
@Override
public void onSuccess() {
progressBar.setVisibility(View.GONE);
}
@Override
public void onError() {
// TODO Auto-generated method stub
progressBar.setVisibility(View.GONE);
}
});
}
View sharebtn = getView.findViewById(R.id.sharebtn);
sharebtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharePicture();
}
});
return getView;
}
private void SharePicture() {
// Simple share stub: share the image URL as text.
String imageUrl = Objects.requireNonNull(getArguments()).getString("image_url");
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, imageUrl);
startActivity(Intent.createChooser(intent, ""));
}
private void Savepicture(final boolean isfromshare) {
// Download/save is not supported anymore; keep method to satisfy old call sites.
Toast.makeText(context, "Save not available in this build.", Toast.LENGTH_SHORT).show();
}
}

View File

@@ -0,0 +1,105 @@
package id.ontime.driver.fragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import com.facebook.shimmer.ShimmerFrameLayout;
import id.ontime.driver.R;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.item.HistoryItem;
import id.ontime.driver.json.AllTransResponseJson;
import id.ontime.driver.json.DetailRequestJson;
import id.ontime.driver.models.User;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import java.util.Objects;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class HistoryFragment extends Fragment {
private Context context;
private ShimmerFrameLayout shimmer;
private RecyclerView recycle;
private HistoryItem historyItem;
private RelativeLayout rlnodata;
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View getView = inflater.inflate(R.layout.fragment_recycle, container, false);
context = getContext();
shimmer = getView.findViewById(R.id.shimmerwallet);
recycle = getView.findViewById(R.id.inboxlist);
rlnodata = getView.findViewById(R.id.rlnodata);
recycle.setHasFixedSize(true);
recycle.setLayoutManager(new GridLayoutManager(context, 1));
return getView;
}
private void shimmershow() {
recycle.setVisibility(View.GONE);
shimmer.setVisibility(View.VISIBLE);
shimmer.startShimmerAnimation();
}
private void shimmertutup() {
recycle.setVisibility(View.VISIBLE);
shimmer.setVisibility(View.GONE);
shimmer.stopShimmerAnimation();
}
private void getdatatrans() {
shimmershow();
User loginUser = BaseApp.getInstance(context).getLoginUser();
DriverService driverService = ServiceGenerator.createService(
DriverService.class, loginUser.getNoTelepon(), loginUser.getPassword());
DetailRequestJson param = new DetailRequestJson();
param.setId(loginUser.getId());
driverService.history(param).enqueue(new Callback<AllTransResponseJson>() {
@Override
public void onResponse(@NonNull Call<AllTransResponseJson> call, @NonNull Response<AllTransResponseJson> response) {
if (response.isSuccessful()) {
shimmertutup();
historyItem = new HistoryItem(context, Objects.requireNonNull(response.body()).getData(), R.layout.item_order);
recycle.setAdapter(historyItem);
if (response.body().getData().isEmpty()) {
recycle.setVisibility(View.GONE);
rlnodata.setVisibility(View.VISIBLE);
} else {
recycle.setVisibility(View.VISIBLE);
rlnodata.setVisibility(View.GONE);
}
}
}
@Override
public void onFailure(@NonNull Call<AllTransResponseJson> call, @NonNull Throwable t) {
}
});
}
@Override
public void onResume() {
super.onResume();
getdatatrans();
}
}

View File

@@ -0,0 +1,383 @@
package id.ontime.driver.fragment;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MapStyleOptions;
import id.ontime.driver.R;
import id.ontime.driver.activity.TopupSaldoActivity;
import id.ontime.driver.activity.WalletActivity;
import id.ontime.driver.activity.WithdrawActivity;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.json.GetOnRequestJson;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import id.ontime.driver.item.BanklistItem;
import id.ontime.driver.json.ResponseJson;
import id.ontime.driver.models.BankModels;
import id.ontime.driver.models.User;
import id.ontime.driver.utils.SettingPreference;
import id.ontime.driver.utils.Utility;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
public class HomeFragment extends Fragment implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private static final String TAG = "Home";
private Context context;
private GoogleMap gMap;
private static final int REQUEST_PERMISSION_LOCATION = 991;
private GoogleApiClient googleApiClient;
private TextView saldo;
private TextView nama;
private ImageView foto;
private RelativeLayout rlprogress;
private Button onoff, uangbelanja, autobid;
private SettingPreference sp;
private ArrayList<BankModels> mList;
private String statusdriver, saldodriver;
@SuppressLint("SetTextI18n")
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View getView = inflater.inflate(R.layout.fragment_home, container, false);
context = getContext();
nama = getView.findViewById(R.id.username);
foto = getView.findViewById(R.id.userphoto);
RelativeLayout topup = getView.findViewById(R.id.topup);
RelativeLayout withdraw = getView.findViewById(R.id.withdraw);
RelativeLayout detail = getView.findViewById(R.id.detail);
saldo = getView.findViewById(R.id.saldo);
autobid = getView.findViewById(R.id.autobid);
uangbelanja = getView.findViewById(R.id.maks);
onoff = getView.findViewById(R.id.onoff);
mList = new ArrayList<>();
sp = new SettingPreference(context);
rlprogress = getView.findViewById(R.id.rlprogress);
topup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(context, TopupSaldoActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
});
sp.updateNotif("OFF");
withdraw.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(context, WithdrawActivity.class);
i.putExtra("type","withdraw");
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
});
detail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(context, WalletActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
});
uangbelanja.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog();
}
});
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.mapView);
Objects.requireNonNull(mapFragment).getMapAsync(this);
if (googleApiClient == null) {
googleApiClient = new GoogleApiClient.Builder(context)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
if (sp.getSetting()[0].equals("OFF")) {
autobid.setSelected(false);
} else {
autobid.setSelected(true);
}
//rlprogress.setVisibility(View.VISIBLE);
Bundle bundle = getArguments();
if (bundle != null) {
statusdriver = bundle.getString("status");
saldodriver = bundle.getString("saldo");
}
if (statusdriver.equals("1")) {
rlprogress.setVisibility(View.GONE);
sp.updateKerja("ON");
onoff.setSelected(true);
onoff.setText("ON");
} else if (statusdriver.equals("4")) {
rlprogress.setVisibility(View.GONE);
onoff.setSelected(false);
onoff.setText("OFF");
sp.updateKerja("OFF");
}
onoff.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getturnon();
}
});
if (sp.getSetting()[1].isEmpty()) {
Utility.currencyTXT(uangbelanja, "10000", context);
} else if (sp.getSetting()[1].equals("Unlimited")) {
uangbelanja.setText(sp.getSetting()[1]);
} else {
Utility.currencyTXT(uangbelanja, sp.getSetting()[1], context);
}
List<BankModels> items = getPeopleData(context);
mList.addAll(items);
return getView;
}
private static List<BankModels> getPeopleData(Context ctx) {
List<BankModels> items = new ArrayList<>();
@SuppressLint("Recycle") TypedArray drw_arr = ctx.getResources().obtainTypedArray(R.array.list_maximum);
String[] name_arr = ctx.getResources().getStringArray(R.array.list_maximum);
for (int i = 0; i < drw_arr.length(); i++) {
BankModels obj = new BankModels();
obj.setText(name_arr[i]);
items.add(obj);
}
return items;
}
@Override
public void onMapReady(GoogleMap googleMap) {
gMap = googleMap;
gMap.getUiSettings().setMyLocationButtonEnabled(true);
gMap.getUiSettings().setMapToolbarEnabled(true);
try {
boolean success = googleMap.setMapStyle(
MapStyleOptions.loadRawResourceStyle(
context, R.raw.style_json));
if (!success) {
Log.e(TAG, "Style parsing failed.");
}
} catch (Resources.NotFoundException e) {
Log.e(TAG, "Can't find style. Error: ", e);
}
updateLastLocation();
}
private void updateLastLocation() {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_PERMISSION_LOCATION);
return;
}
Location lastKnownLocation = LocationServices.FusedLocationApi.getLastLocation(
googleApiClient);
gMap.setMyLocationEnabled(true);
if (lastKnownLocation != null) {
gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
new LatLng(lastKnownLocation.getLatitude(), lastKnownLocation.getLongitude()), 15f)
);
gMap.animateCamera(CameraUpdateFactory.zoomTo(15f));
}
}
@Override
public void onConnected(@Nullable Bundle bundle) {
updateLastLocation();
}
@Override
public void onConnectionSuspended(int i) {
updateLastLocation();
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
updateLastLocation();
}
@Override
public void onStart() {
googleApiClient.connect();
super.onStart();
}
@Override
public void onStop() {
googleApiClient.disconnect();
super.onStop();
}
@Override
public void onResume() {
super.onResume();
User loginUser = BaseApp.getInstance(context).getLoginUser();
nama.setText(loginUser.getFullnama());
autobid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (sp.getSetting()[0].equals("OFF")) {
sp.updateAutoBid("ON");
autobid.setSelected(true);
} else {
sp.updateAutoBid("OFF");
autobid.setSelected(false);
}
}
});
Utility.currencyTXT(saldo, saldodriver, context);
}
private void getturnon() {
rlprogress.setVisibility(View.VISIBLE);
User loginUser = BaseApp.getInstance(context).getLoginUser();
DriverService userService = ServiceGenerator.createService(
DriverService.class, loginUser.getNoTelepon(), loginUser.getPassword());
GetOnRequestJson param = new GetOnRequestJson();
param.setId(loginUser.getId());
if (statusdriver.equals("1")) {
param.setOn(false);
} else {
param.setOn(true);
}
userService.turnon(param).enqueue(new Callback<ResponseJson>() {
@SuppressLint("SetTextI18n")
@Override
public void onResponse(@NonNull Call<ResponseJson> call, @NonNull Response<ResponseJson> response) {
if (response.isSuccessful()) {
rlprogress.setVisibility(View.GONE);
statusdriver = Objects.requireNonNull(response.body()).getData();
if (response.body().getData().equals("1")) {
sp.updateKerja("ON");
onoff.setSelected(true);
onoff.setText("ON");
} else if (response.body().getData().equals("4")) {
sp.updateKerja("OFF");
onoff.setSelected(false);
onoff.setText("OFF");
}
}
}
@Override
public void onFailure(@NonNull Call<ResponseJson> call, @NonNull Throwable t) {
}
});
}
private void dialog() {
final Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // before
dialog.setContentView(R.layout.dialog_bank);
dialog.setCancelable(true);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(Objects.requireNonNull(dialog.getWindow()).getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
final ImageView close = dialog.findViewById(R.id.close);
final RecyclerView list = dialog.findViewById(R.id.recycleview);
list.setHasFixedSize(true);
list.setLayoutManager(new GridLayoutManager(context, 1));
BanklistItem bankItem = new BanklistItem(context, mList, R.layout.item_petunjuk, new BanklistItem.OnItemClickListener() {
@Override
public void onItemClick(BankModels item) {
if (item.getText().equals("Unlimited")) {
uangbelanja.setText(item.getText());
} else {
Utility.currencyTXT(uangbelanja, item.getText(), context);
}
sp.updateMaksimalBelanja(item.getText());
dialog.dismiss();
}
});
list.setAdapter(bankItem);
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
dialog.getWindow().setAttributes(lp);
}
}

View File

@@ -0,0 +1,212 @@
package id.ontime.driver.fragment;
import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.facebook.shimmer.ShimmerFrameLayout;
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.Query;
import com.google.firebase.database.ValueEventListener;
import id.ontime.driver.R;
import id.ontime.driver.activity.ChatActivity;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.constants.Functions;
import id.ontime.driver.item.MessageItem;
import id.ontime.driver.models.MessageModels;
import id.ontime.driver.models.User;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Objects;
public class MessageFragment extends Fragment {
private View getView;
private Context context;
private RecyclerView inboxList;
private ArrayList<MessageModels> inboxArraylist;
private ShimmerFrameLayout shimmer;
private DatabaseReference rootRef;
private MessageItem inboxItem;
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getView = inflater.inflate(R.layout.fragment_recycle, container, false);
context = getContext();
try {
rootRef = FirebaseDatabase.getInstance().getReference();
} catch (IllegalStateException e) {
e.printStackTrace();
rootRef = null;
}
inboxList = getView.findViewById(R.id.inboxlist);
shimmer = getView.findViewById(R.id.shimmerwallet);
inboxArraylist =new ArrayList<>();
inboxList = getView.findViewById(R.id.inboxlist);
LinearLayoutManager layout = new LinearLayoutManager(context);
inboxList.setLayoutManager(layout);
inboxList.setHasFixedSize(false);
inboxItem = new MessageItem(context, inboxArraylist, new MessageItem.OnItemClickListener() {
@Override
public void onItemClick(MessageModels item) {
User loginuser = BaseApp.getInstance(context).getLoginUser();
if (checkReadStoragepermission()) {
Intent intent = new Intent(getActivity(), ChatActivity.class);
intent.putExtra("senderid", loginuser.getId());
intent.putExtra("receiverid", item.getId());
intent.putExtra("name", item.getName());
intent.putExtra("tokendriver", loginuser.getToken());
intent.putExtra("tokenku", item.getTokenuser());
intent.putExtra("pic", item.getPicture());
requireActivity().startActivity(intent);
}
}
});
inboxList.setAdapter(inboxItem);
getView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Functions.hideSoftKeyboard(requireActivity());
}
});
shimmershow();
return getView;
}
private ValueEventListener valueEventListener;
private Query inboxQuery;
private void shimmershow() {
inboxList.setVisibility(View.GONE);
shimmer.setVisibility(View.VISIBLE);
shimmer.startShimmerAnimation();
}
private void shimmertutup() {
inboxList.setVisibility(View.VISIBLE);
shimmer.setVisibility(View.GONE);
shimmer.stopShimmerAnimation();
}
@Override
public void onStart() {
super.onStart();
if (rootRef == null) {
shimmertutup();
if (getView != null) {
View empty = getView.findViewById(R.id.rlnodata);
if (empty != null) {
empty.setVisibility(View.VISIBLE);
}
}
return;
}
User loginuser = BaseApp.getInstance(context).getLoginUser();
inboxQuery = rootRef.child("Inbox").child(loginuser.getId()).orderByChild("date");
valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
shimmertutup();
inboxArraylist.clear();
for (DataSnapshot ds:dataSnapshot.getChildren()) {
MessageModels model = new MessageModels();
model.setId(ds.getKey());
model.setName(Objects.requireNonNull(ds.child("name").getValue()).toString());
model.setMessage(Objects.requireNonNull(ds.child("msg").getValue()).toString());
model.setTimestamp(Objects.requireNonNull(ds.child("date").getValue()).toString());
model.setStatus(Objects.requireNonNull(ds.child("status").getValue()).toString());
model.setPicture(Objects.requireNonNull(ds.child("pic").getValue()).toString());
model.setTokendriver(Objects.requireNonNull(ds.child("tokendriver").getValue()).toString());
model.setTokenuser(Objects.requireNonNull(ds.child("tokenuser").getValue()).toString());
inboxArraylist.add(model);
}
Collections.reverse(inboxArraylist);
inboxItem.notifyDataSetChanged();
if(inboxArraylist.isEmpty()){
getView.findViewById(R.id.rlnodata).setVisibility(View.VISIBLE);
}else {
getView.findViewById(R.id.rlnodata).setVisibility(View.GONE);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
};
inboxQuery.addValueEventListener(valueEventListener);
}
@Override
public void onStop() {
super.onStop();
if(inboxQuery !=null)
inboxQuery.removeEventListener(valueEventListener);
}
private boolean checkReadStoragepermission(){
if (ContextCompat.checkSelfPermission(Objects.requireNonNull(getActivity()).getApplicationContext(),
Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED){
return true;
}
else {
try {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
Constants.permission_Read_data );
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
return false;
}
}

View File

@@ -0,0 +1,853 @@
package id.ontime.driver.fragment;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.facebook.shimmer.ShimmerFrameLayout;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MapStyleOptions;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.android.gms.maps.model.Polyline;
import com.google.android.gms.maps.model.PolylineOptions;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import id.ontime.driver.R;
import id.ontime.driver.activity.ChatActivity;
import id.ontime.driver.activity.MainActivity;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.gmap.directions.Directions;
import id.ontime.driver.gmap.directions.Route;
import id.ontime.driver.item.ItemPesananItem;
import id.ontime.driver.json.AcceptRequestJson;
import id.ontime.driver.json.AcceptResponseJson;
import id.ontime.driver.json.ResponseJson;
import id.ontime.driver.json.VerifyRequestJson;
import id.ontime.driver.utils.api.FCMHelper;
import id.ontime.driver.utils.api.MapDirectionAPI;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import id.ontime.driver.json.DetailRequestJson;
import id.ontime.driver.json.DetailTransResponseJson;
import id.ontime.driver.json.fcm.FCMMessage;
import id.ontime.driver.models.OrderFCM;
import id.ontime.driver.models.PelangganModel;
import id.ontime.driver.models.TransaksiModel;
import id.ontime.driver.models.User;
import id.ontime.driver.utils.Log;
import id.ontime.driver.utils.Utility;
import id.ontime.driver.utils.PicassoTrustAll;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import de.hdodenhof.circleimageview.CircleImageView;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
public class OrderFragment extends Fragment implements OnMapReadyCallback, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
private Context context;
private GoogleMap gMap;
private static final int REQUEST_PERMISSION_LOCATION = 991;
private static final int REQUEST_PERMISSION_CALL = 992;
private GoogleApiClient googleApiClient;
private LatLng pickUpLatLng;
private LatLng destinationLatLng;
private Polyline directionLine;
private Marker pickUpMarker;
private Marker destinationMarker;
private String idtrans, idpelanggan, response, fitur, onsubmit;
LinearLayout bottomsheet;
TextView layanan;
TextView layanandesk;
TextView verify;
TextView namamerchant;
LinearLayout llchat;
CircleImageView foto;
TextView pickUpText;
TextView destinationText;
TextView fiturtext;
TextView distanceText;
TextView priceText;
RelativeLayout rlprogress;
TextView textprogress;
TextView cost;
TextView deliveryfee;
ImageView phone;
ImageView chat;
ImageView phonemerchant;
ImageView chatmerchant;
LinearLayout lldestination;
LinearLayout llorderdetail;
LinearLayout lldistance;
LinearLayout lldetailsend;
TextView produk;
TextView sendername;
TextView receivername;
Button senderphone;
Button receiverphone;
ShimmerFrameLayout shimmerlayanan;
ShimmerFrameLayout shimmerpickup;
ShimmerFrameLayout shimmerdestination;
ShimmerFrameLayout shimmerfitur;
ShimmerFrameLayout shimmerdistance;
ShimmerFrameLayout shimmerprice;
Button submit;
LinearLayout llmerchantdetail;
LinearLayout llmerchantinfo;
LinearLayout llbutton;
RecyclerView rvmerchantnear;
private ItemPesananItem itemPesananItem;
private TextView totaltext;
private String type;
@SuppressLint("SetTextI18n")
@Override
public View onCreateView(@Nullable LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View getView = Objects.requireNonNull(inflater).inflate(R.layout.activity_detail_order, container, false);
context = getContext();
bottomsheet = getView.findViewById(R.id.bottom_sheet);
layanan = getView.findViewById(R.id.layanan);
layanandesk = getView.findViewById(R.id.layanandes);
verify = getView.findViewById(R.id.verifycation);
namamerchant = getView.findViewById(R.id.namamerchant);
llchat = getView.findViewById(R.id.llchat);
foto = getView.findViewById(R.id.background);
pickUpText = getView.findViewById(R.id.pickUpText);
destinationText = getView.findViewById(R.id.destinationText);
fiturtext = getView.findViewById(R.id.fitur);
distanceText = getView.findViewById(R.id.distance);
priceText = getView.findViewById(R.id.price);
rlprogress = getView.findViewById(R.id.rlprogress);
textprogress = getView.findViewById(R.id.textprogress);
cost = getView.findViewById(R.id.cost);
deliveryfee = getView.findViewById(R.id.deliveryfee);
phone = getView.findViewById(R.id.phonenumber);
chat = getView.findViewById(R.id.chat);
phonemerchant = getView.findViewById(R.id.phonemerchant);
chatmerchant = getView.findViewById(R.id.chatmerchant);
lldestination = getView.findViewById(R.id.lldestination);
llorderdetail = getView.findViewById(R.id.orderdetail);
lldistance = getView.findViewById(R.id.lldistance);
lldetailsend = getView.findViewById(R.id.senddetail);
produk = getView.findViewById(R.id.produk);
sendername = getView.findViewById(R.id.sendername);
receivername = getView.findViewById(R.id.receivername);
senderphone = getView.findViewById(R.id.senderphone);
receiverphone = getView.findViewById(R.id.receiverphone);
shimmerlayanan = getView.findViewById(R.id.shimmerlayanan);
shimmerpickup = getView.findViewById(R.id.shimmerpickup);
shimmerdestination = getView.findViewById(R.id.shimmerdestination);
shimmerfitur = getView.findViewById(R.id.shimmerfitur);
shimmerdistance = getView.findViewById(R.id.shimmerdistance);
shimmerprice = getView.findViewById(R.id.shimmerprice);
submit = getView.findViewById(R.id.order);
llmerchantdetail = getView.findViewById(R.id.merchantdetail);
llmerchantinfo = getView.findViewById(R.id.merchantinfo);
llbutton = getView.findViewById(R.id.llbutton);
rvmerchantnear = getView.findViewById(R.id.merchantnear);
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomsheet);
behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
totaltext = getView.findViewById(R.id.totaltext);
fitur = "0";
type = "0";
Bundle bundle = getArguments();
if (bundle != null) {
idpelanggan = bundle.getString("id_pelanggan");
idtrans = bundle.getString("id_transaksi");
response = bundle.getString("response");
}
shimmerload();
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.mapView);
Objects.requireNonNull(mapFragment).getMapAsync(this);
if (googleApiClient == null) {
googleApiClient = new GoogleApiClient.Builder(context)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
switch (response) {
case "2":
onsubmit = "2";
llchat.setVisibility(View.VISIBLE);
break;
case "3":
onsubmit = "3";
llchat.setVisibility(View.VISIBLE);
submit.setVisibility(View.VISIBLE);
verify.setVisibility(View.GONE);
submit.setText("finish");
break;
case "4":
llchat.setVisibility(View.GONE);
submit.setVisibility(View.GONE);
layanandesk.setText(getString(R.string.notification_finish));
break;
case "5":
llchat.setVisibility(View.GONE);
layanandesk.setText(getString(R.string.notification_cancel));
break;
}
rvmerchantnear.setHasFixedSize(true);
rvmerchantnear.setNestedScrollingEnabled(false);
rvmerchantnear.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false));
rlprogress.setVisibility(View.GONE);
textprogress.setText(getString(R.string.waiting_pleaseWait));
return getView;
}
private void getData(final String idtrans, final String idpelanggan) {
final User loginUser = BaseApp.getInstance(context).getLoginUser();
DriverService service = ServiceGenerator.createService(DriverService.class, loginUser.getEmail(), loginUser.getPassword());
DetailRequestJson param = new DetailRequestJson();
param.setId(idtrans);
param.setIdPelanggan(idpelanggan);
service.detailtrans(param).enqueue(new Callback<DetailTransResponseJson>() {
@SuppressLint("SetTextI18n")
@Override
public void onResponse(@NonNull Call<DetailTransResponseJson> call, @NonNull Response<DetailTransResponseJson> responsedata) {
if (responsedata.isSuccessful()) {
shimmertutup();
Log.e("", String.valueOf(Objects.requireNonNull(responsedata.body()).getData().get(0)));
final TransaksiModel transaksi = responsedata.body().getData().get(0);
final PelangganModel pelanggan = responsedata.body().getPelanggan().get(0);
type = transaksi.getHome();
if (transaksi.isPakaiWallet()) {
totaltext.setText("Total (Saldo)");
} else {
totaltext.setText("Total (Tunai)");
}
if (onsubmit.equals("2")) {
if (transaksi.getHome().equals("4")) {
layanandesk.setText("Ambil Pesanan");
submit.setText("Mulai Pengiriman");
verify.setVisibility(View.VISIBLE);
} else {
layanandesk.setText(getString(R.string.notification_accept));
}
submit.setVisibility(View.VISIBLE);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (transaksi.getHome().equals("4")) {
if (verify.getText().toString().isEmpty()) {
Toast.makeText(context, "Masukan Kode Merchant!", Toast.LENGTH_SHORT).show();
} else {
SimpleDateFormat timeFormat = new SimpleDateFormat("dd MMM yyyy", Locale.US);
String finalDate = timeFormat.format(transaksi.getWaktuOrder());
rlprogress.setVisibility(View.VISIBLE);
verify(verify.getText().toString(), pelanggan, transaksi.getToken_merchant(), transaksi.idtransmerchant, finalDate);
}
} else {
start(pelanggan, transaksi.getToken_merchant(), transaksi.idtransmerchant, String.valueOf(transaksi.getWaktuOrder()));
}
}
});
} else if (onsubmit.equals("3")) {
if (transaksi.getHome().equals("4")) {
layanandesk.setText("Mulai Pengiriman");
} else {
layanandesk.setText(getString(R.string.notification_start));
}
verify.setVisibility(View.GONE);
submit.setText("Finish");
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish(pelanggan, transaksi.token_merchant);
}
});
}
fitur = transaksi.getOrderFitur();
if (transaksi.getHome().equals("3")) {
lldestination.setVisibility(View.GONE);
lldistance.setVisibility(View.GONE);
fiturtext.setText(transaksi.getEstimasi());
} else if (transaksi.getHome().equals("4")) {
llorderdetail.setVisibility(View.VISIBLE);
llmerchantdetail.setVisibility(View.VISIBLE);
llmerchantinfo.setVisibility(View.VISIBLE);
Utility.currencyTXT(deliveryfee, String.valueOf(transaksi.getHarga()), context);
Utility.currencyTXT(cost, String.valueOf(transaksi.getTotal_biaya()), context);
namamerchant.setText(transaksi.getNama_merchant());
itemPesananItem = new ItemPesananItem(responsedata.body().getItem(), R.layout.item_pesanan);
rvmerchantnear.setAdapter(itemPesananItem);
phonemerchant.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context, R.style.DialogStyle);
alertDialogBuilder.setTitle("Telpon Customer");
alertDialogBuilder.setMessage("Anda ingin menelepon Merchant (+" + transaksi.getTeleponmerchant() + ")?");
alertDialogBuilder.setPositiveButton("ya",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.CALL_PHONE}, REQUEST_PERMISSION_CALL);
return;
}
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:+" + transaksi.getTeleponmerchant()));
startActivity(callIntent);
}
});
alertDialogBuilder.setNegativeButton("Tidak", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
});
chatmerchant.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ChatActivity.class);
intent.putExtra("senderid", loginUser.getId());
intent.putExtra("receiverid", transaksi.getId_merchant());
intent.putExtra("tokendriver", loginUser.getToken());
intent.putExtra("tokenku", transaksi.getToken_merchant());
intent.putExtra("name", transaksi.getNama_merchant());
intent.putExtra("pic", Constants.IMAGESMERCHANT + transaksi.getFoto_merchant());
startActivity(intent);
}
});
} else if (transaksi.getHome().equalsIgnoreCase("2")) {
requestRoute();
lldetailsend.setVisibility(View.VISIBLE);
produk.setText(transaksi.getNamaBarang());
sendername.setText(transaksi.namaPengirim);
receivername.setText(transaksi.namaPenerima);
senderphone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context, R.style.DialogStyle);
alertDialogBuilder.setTitle("Telpon Driver");
alertDialogBuilder.setMessage("You want to call " + transaksi.getNamaPengirim() + "(" + transaksi.teleponPengirim + ")?");
alertDialogBuilder.setPositiveButton("yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.CALL_PHONE}, REQUEST_PERMISSION_CALL);
return;
}
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + transaksi.teleponPengirim));
startActivity(callIntent);
}
});
alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
});
receiverphone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context, R.style.DialogStyle);
alertDialogBuilder.setTitle("Call Driver");
alertDialogBuilder.setMessage("You want to call " + transaksi.getNamaPenerima() + "(" + transaksi.teleponPenerima + ")?");
alertDialogBuilder.setPositiveButton("yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.CALL_PHONE}, REQUEST_PERMISSION_CALL);
return;
}
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + transaksi.teleponPenerima));
startActivity(callIntent);
}
});
alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
});
}
pickUpLatLng = new LatLng(transaksi.getStartLatitude(), transaksi.getStartLongitude());
destinationLatLng = new LatLng(transaksi.getEndLatitude(), transaksi.getEndLongitude());
if (pickUpMarker != null) pickUpMarker.remove();
pickUpMarker = gMap.addMarker(new MarkerOptions()
.position(pickUpLatLng)
.title("Ambil")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.pickup)));
if (destinationMarker != null) destinationMarker.remove();
destinationMarker = gMap.addMarker(new MarkerOptions()
.position(destinationLatLng)
.title("Tujuan")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.destination)));
updateLastLocation();
parsedata(transaksi, pelanggan);
}
}
@Override
public void onFailure(@NonNull retrofit2.Call<DetailTransResponseJson> call, @NonNull Throwable t) {
}
});
}
private void shimmerload() {
shimmerlayanan.startShimmerAnimation();
shimmerpickup.startShimmerAnimation();
shimmerdestination.startShimmerAnimation();
shimmerfitur.startShimmerAnimation();
shimmerdistance.startShimmerAnimation();
shimmerprice.startShimmerAnimation();
layanan.setVisibility(View.GONE);
layanandesk.setVisibility(View.GONE);
pickUpText.setVisibility(View.GONE);
destinationText.setVisibility(View.GONE);
fiturtext.setVisibility(View.GONE);
priceText.setVisibility(View.GONE);
}
private void shimmertutup() {
shimmerlayanan.stopShimmerAnimation();
shimmerpickup.stopShimmerAnimation();
shimmerdestination.stopShimmerAnimation();
shimmerfitur.stopShimmerAnimation();
shimmerdistance.stopShimmerAnimation();
shimmerprice.stopShimmerAnimation();
shimmerlayanan.setVisibility(View.GONE);
shimmerpickup.setVisibility(View.GONE);
shimmerdestination.setVisibility(View.GONE);
shimmerfitur.setVisibility(View.GONE);
shimmerdistance.setVisibility(View.GONE);
shimmerprice.setVisibility(View.GONE);
layanan.setVisibility(View.VISIBLE);
layanandesk.setVisibility(View.VISIBLE);
pickUpText.setVisibility(View.VISIBLE);
destinationText.setVisibility(View.VISIBLE);
distanceText.setVisibility(View.VISIBLE);
fiturtext.setVisibility(View.VISIBLE);
priceText.setVisibility(View.VISIBLE);
}
private void parsedata(TransaksiModel request, final PelangganModel pelanggan) {
requestRoute();
final User loginUser = BaseApp.getInstance(context).getLoginUser();
rlprogress.setVisibility(View.GONE);
pickUpLatLng = new LatLng(request.getStartLatitude(), request.getStartLongitude());
destinationLatLng = new LatLng(request.getEndLatitude(), request.getEndLongitude());
PicassoTrustAll.getInstance(context)
.load(Constants.IMAGESUSER + pelanggan.getFoto())
.placeholder(R.drawable.image_placeholder)
.into(foto);
layanan.setText(pelanggan.getFullnama());
pickUpText.setText(request.getAlamatAsal());
destinationText.setText(request.getAlamatTujuan());
if (type.equals("4")) {
double totalbiaya = Double.parseDouble(request.getTotal_biaya());
Utility.currencyTXT(priceText, String.valueOf(request.getHarga() + totalbiaya), context);
} else {
Utility.currencyTXT(priceText, String.valueOf(request.getHarga()), context);
}
phone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context, R.style.DialogStyle);
alertDialogBuilder.setTitle("Call Customer");
alertDialogBuilder.setMessage("You want to call Costumer (+" + pelanggan.getNoTelepon() + ")?");
alertDialogBuilder.setPositiveButton("yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface arg0, int arg1) {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.CALL_PHONE}, REQUEST_PERMISSION_CALL);
return;
}
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:+" + pelanggan.getNoTelepon()));
startActivity(callIntent);
}
});
alertDialogBuilder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
});
chat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ChatActivity.class);
intent.putExtra("senderid", loginUser.getId());
intent.putExtra("receiverid", pelanggan.getId());
intent.putExtra("tokendriver", loginUser.getToken());
intent.putExtra("tokenku", pelanggan.getToken());
intent.putExtra("name", pelanggan.getFullnama());
intent.putExtra("pic", Constants.IMAGESUSER + pelanggan.getFoto());
startActivity(intent);
}
});
}
private void updateLastLocation() {
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_PERMISSION_LOCATION);
return;
}
LocationServices.FusedLocationApi.getLastLocation(
googleApiClient);
gMap.setMyLocationEnabled(true);
if (pickUpLatLng != null) {
gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(
pickUpLatLng, 15f)
);
gMap.animateCamera(CameraUpdateFactory.zoomTo(15f));
}
}
private okhttp3.Callback updateRouteCallback = new okhttp3.Callback() {
@Override
public void onFailure(@NonNull okhttp3.Call call, @NonNull IOException e) {
}
@Override
public void onResponse(@NonNull okhttp3.Call call, okhttp3.Response response) throws IOException {
if (response.isSuccessful()) {
final String json = Objects.requireNonNull(response.body()).string();
if (MapDirectionAPI.getDirectionErrorMessage(json) != null) {
return;
}
final long distance = MapDirectionAPI.getDistance(context, json);
final String time = MapDirectionAPI.getTimeDistance(context, json);
if (distance >= 0) {
if (getActivity() == null)
return;
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
updateLineDestination(json);
float km = ((float) (distance)) / 1000f;
String format = String.format(Locale.US, "%.1f", km);
distanceText.setText(format);
fiturtext.setText(time);
}
});
}
}
}
};
private void requestRoute() {
if (pickUpLatLng != null && destinationLatLng != null) {
MapDirectionAPI.getDirection(context, pickUpLatLng, destinationLatLng)
.enqueue(updateRouteCallback);
}
}
private void updateLineDestination(String json) {
Directions directions = new Directions(context);
try {
List<Route> routes = directions.parse(json);
if (directionLine != null) directionLine.remove();
if (routes.size() > 0) {
directionLine = gMap.addPolyline((new PolylineOptions())
.addAll(routes.get(0).getOverviewPolyLine())
.color(ContextCompat.getColor(context, R.color.colorgradient))
.width(8));
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onConnected(@Nullable Bundle bundle) {
}
@Override
public void onConnectionSuspended(int i) {
}
@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
}
@Override
public void onMapReady(GoogleMap googleMap) {
gMap = googleMap;
gMap.getUiSettings().setMyLocationButtonEnabled(true);
try {
boolean success = googleMap.setMapStyle(
MapStyleOptions.loadRawResourceStyle(
context, R.raw.style_json));
if (!success) {
android.util.Log.e("", "Style parsing failed.");
}
} catch (Resources.NotFoundException e) {
android.util.Log.e("", "Can't find style. Error: ", e);
}
getData(idtrans, idpelanggan);
}
private void start(final PelangganModel pelanggan, final String tokenmerchant, final String idtransmerchant, final String waktuorder) {
rlprogress.setVisibility(View.VISIBLE);
final User loginUser = BaseApp.getInstance(context).getLoginUser();
DriverService userService = ServiceGenerator.createService(
DriverService.class, loginUser.getNoTelepon(), loginUser.getPassword());
AcceptRequestJson param = new AcceptRequestJson();
param.setId(loginUser.getId());
param.setIdtrans(idtrans);
userService.startrequest(param).enqueue(new Callback<AcceptResponseJson>() {
@Override
public void onResponse(@NonNull Call<AcceptResponseJson> call, @NonNull final Response<AcceptResponseJson> response) {
if (response.isSuccessful()) {
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("berhasil")) {
rlprogress.setVisibility(View.GONE);
onsubmit = "3";
getData(idtrans, idpelanggan);
OrderFCM orderfcm = new OrderFCM();
orderfcm.id_driver = loginUser.getId();
orderfcm.id_transaksi = idtrans;
orderfcm.response = "3";
if (type.equals("4")) {
orderfcm.id_pelanggan = idpelanggan;
orderfcm.invoice = "INV-" + idtrans + idtransmerchant;
orderfcm.ordertime = waktuorder;
orderfcm.desc = "driver delivers the order";
sendMessageToDriver(tokenmerchant, orderfcm);
} else {
orderfcm.desc = getString(R.string.notification_start);
}
sendMessageToDriver(pelanggan.getToken(), orderfcm);
} else {
rlprogress.setVisibility(View.GONE);
Intent i = new Intent(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
Toast.makeText(context, "Order sudah tidak aktif!", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onFailure(@NonNull Call<AcceptResponseJson> call, @NonNull Throwable t) {
Toast.makeText(context, "Error Connection!", Toast.LENGTH_SHORT).show();
rlprogress.setVisibility(View.GONE);
}
});
}
private void verify(String verificode, final PelangganModel pelanggan, final String tokenmerchant, final String idtransmerchant, final String waktuorder) {
rlprogress.setVisibility(View.VISIBLE);
final User loginUser = BaseApp.getInstance(context).getLoginUser();
DriverService userService = ServiceGenerator.createService(
DriverService.class, loginUser.getNoTelepon(), loginUser.getPassword());
VerifyRequestJson param = new VerifyRequestJson();
param.setId(loginUser.getNoTelepon());
param.setIdtrans(idtrans);
param.setVerifycode(verificode);
userService.verifycode(param).enqueue(new Callback<ResponseJson>() {
@Override
public void onResponse(@NonNull Call<ResponseJson> call, @NonNull final Response<ResponseJson> response) {
if (response.isSuccessful()) {
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("success")) {
start(pelanggan, tokenmerchant, idtransmerchant, waktuorder);
} else {
rlprogress.setVisibility(View.GONE);
Toast.makeText(context, "verifikasi kode merchant tidak sesuai!", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onFailure(@NonNull Call<ResponseJson> call, @NonNull Throwable t) {
Toast.makeText(context, "Error Connection!", Toast.LENGTH_SHORT).show();
rlprogress.setVisibility(View.GONE);
}
});
}
private void finish(final PelangganModel pelanggan, final String tokenmerchant) {
rlprogress.setVisibility(View.VISIBLE);
final User loginUser = BaseApp.getInstance(context).getLoginUser();
DriverService userService = ServiceGenerator.createService(
DriverService.class, loginUser.getNoTelepon(), loginUser.getPassword());
AcceptRequestJson param = new AcceptRequestJson();
param.setId(loginUser.getId());
param.setIdtrans(idtrans);
userService.finishrequest(param).enqueue(new Callback<AcceptResponseJson>() {
@Override
public void onResponse(@NonNull Call<AcceptResponseJson> call, @NonNull final Response<AcceptResponseJson> response) {
if (response.isSuccessful()) {
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("berhasil")) {
rlprogress.setVisibility(View.GONE);
Intent i = new Intent(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
OrderFCM orderfcm = new OrderFCM();
orderfcm.id_driver = loginUser.getId();
orderfcm.id_transaksi = idtrans;
orderfcm.response = "4";
orderfcm.desc = getString(R.string.notification_finish);
if (type.equals("4")) {
sendMessageToDriver(tokenmerchant, orderfcm);
sendMessageToDriver(pelanggan.getToken(), orderfcm);
} else {
sendMessageToDriver(pelanggan.getToken(), orderfcm);
}
} else {
rlprogress.setVisibility(View.GONE);
Intent i = new Intent(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
Toast.makeText(context, "Order is no longer available!", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onFailure(@NonNull Call<AcceptResponseJson> call, @NonNull Throwable t) {
Toast.makeText(context, "Error Connection!", Toast.LENGTH_SHORT).show();
rlprogress.setVisibility(View.GONE);
}
});
}
private void sendMessageToDriver(final String regIDTujuan, final OrderFCM response) {
final FCMMessage message = new FCMMessage();
message.setTo(regIDTujuan);
message.setData(response);
FCMHelper.sendMessage(message).enqueue(new okhttp3.Callback() {
@Override
public void onResponse(@NonNull okhttp3.Call call, @NonNull okhttp3.Response response) {
android.util.Log.e("REQUEST TO DRIVER", message.getData().toString());
}
@Override
public void onFailure(@NonNull okhttp3.Call call, @NonNull IOException e) {
e.printStackTrace();
}
});
}
}

View File

@@ -0,0 +1,71 @@
package id.ontime.driver.fragment;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import id.ontime.driver.R;
import java.util.Objects;
import androidx.fragment.app.Fragment;
import nl.changer.audiowife.AudioWife;
public class PlayAudioFragment extends Fragment {
private AudioWife audioWife;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View getView = inflater.inflate(R.layout.fragment_playaudio, container, false);
Context context = getContext();
ImageView close_btn = getView.findViewById(R.id.close_btn);
ImageButton playBtn = getView.findViewById(R.id.playbtn);
ImageButton pauseBtn = getView.findViewById(R.id.pause_btn);
SeekBar seekBar = getView.findViewById(R.id.seekbar);
TextView durationTime = getView.findViewById(R.id.duration_time);
TextView totalTime = getView.findViewById(R.id.totaltime);
String filepath = Objects.requireNonNull(getArguments()).getString("path");
Uri uri = Uri.parse(filepath);
audioWife = AudioWife.getInstance();
audioWife.init(context, uri)
.setPlayView(playBtn)
.setPauseView(pauseBtn)
.setSeekBar(seekBar)
.setRuntimeView(durationTime)
.setTotalTimeView(totalTime);
audioWife.play();
close_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Objects.requireNonNull(getActivity()).onBackPressed();
}
});
return getView;
}
@Override
public void onDetach() {
super.onDetach();
audioWife.pause();
audioWife.release();
}
}

View File

@@ -0,0 +1,348 @@
package id.ontime.driver.fragment;
import android.Manifest;
import android.app.Dialog;
import android.app.NotificationManager;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.appcompat.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import id.ontime.driver.R;
import id.ontime.driver.activity.ChangepassActivity;
import id.ontime.driver.activity.EditKendaraanActivity;
import id.ontime.driver.activity.EditProfileActivity;
import id.ontime.driver.activity.IntroActivity;
import id.ontime.driver.activity.PrivacyActivity;
import id.ontime.driver.constants.BaseApp;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.json.GetHomeRequestJson;
import id.ontime.driver.json.GetHomeResponseJson;
import id.ontime.driver.utils.api.ServiceGenerator;
import id.ontime.driver.utils.api.service.DriverService;
import id.ontime.driver.models.User;
import id.ontime.driver.utils.SettingPreference;
import id.ontime.driver.utils.PicassoTrustAll;
import java.util.Locale;
import java.util.Objects;
import androidx.fragment.app.Fragment;
import io.realm.Realm;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import static android.content.Context.NOTIFICATION_SERVICE;
public class ProfileFragment extends Fragment {
private Context context;
private ImageView foto;
private TextView nama, iduser;
private TextView email;
private RelativeLayout rlprogress;
private SettingPreference sp;
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View getView = inflater.inflate(R.layout.fragment_profile, container, false);
context = getContext();
foto = getView.findViewById(R.id.userphoto);
nama = getView.findViewById(R.id.username);
iduser = getView.findViewById(R.id.iduser);
email = getView.findViewById(R.id.email);
LinearLayout aboutus = getView.findViewById(R.id.llaboutus);
LinearLayout privacy = getView.findViewById(R.id.llprivacypolicy);
LinearLayout shareapp = getView.findViewById(R.id.llshareapp);
LinearLayout rateapp = getView.findViewById(R.id.llrateapp);
LinearLayout editprofile = getView.findViewById(R.id.lleditprofile);
LinearLayout logout = getView.findViewById(R.id.lllogout);
LinearLayout llpassword = getView.findViewById(R.id.llpassword);
LinearLayout llkendaraan = getView.findViewById(R.id.llkendaraan);
rlprogress = getView.findViewById(R.id.rlprogress);
TextView rate = getView.findViewById(R.id.rate);
sp = new SettingPreference(context);
User driver = BaseApp.getInstance(context).getLoginUser();
String format = String.format(Locale.US, "%.1f", Float.valueOf(driver.getRating()));
rate.setText(format);
llpassword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(context, ChangepassActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
});
llkendaraan.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(context, EditKendaraanActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
});
privacy.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(context, PrivacyActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
});
aboutus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
aboutus();
}
});
shareapp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.app_name));
String shareMessage = "Download NGOJOL Driver - Daftar Mitra Driver Sekarang! ";
shareMessage = shareMessage + "https://play.google.com/store/apps/details?id=" + requireActivity().getPackageName() + "\n\n";
shareIntent.putExtra(Intent.EXTRA_TEXT, shareMessage);
startActivity(Intent.createChooser(shareIntent, "choose one"));
}
});
rateapp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Uri uri = Uri.parse("market://details?id=" + Objects.requireNonNull(getActivity()).getPackageName());
Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
}
try {
startActivity(goToMarket);
} catch (ActivityNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("http://play.google.com/store/apps/details?id=" + getActivity().getPackageName())));
}
}
});
editprofile.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(context, EditProfileActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
});
logout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickDone();
}
});
return getView;
}
private void clickDone() {
new AlertDialog.Builder(requireActivity(), R.style.DialogStyle)
.setIcon(R.mipmap.ic_launcher)
.setTitle(getString(R.string.app_name))
.setMessage(getString(R.string.exit))
.setPositiveButton(getString(R.string.yes), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
logout();
}
})
.setNegativeButton(getString(R.string.no), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.show();
}
private void aboutus() {
final Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); // before
dialog.setContentView(R.layout.dialog_aboutus);
dialog.setCancelable(true);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(Objects.requireNonNull(dialog.getWindow()).getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
final ImageView close = dialog.findViewById(R.id.bt_close);
final LinearLayout email = dialog.findViewById(R.id.email);
final LinearLayout phone = dialog.findViewById(R.id.phone);
final LinearLayout website = dialog.findViewById(R.id.website);
final WebView about = dialog.findViewById(R.id.aboutus);
String mimeType = "text/html";
String encoding = "utf-8";
String htmlText = sp.getSetting()[5];
String text = "<html dir=" + "><head>"
+ "<style type=\"text/css\">@font-face {font-family: MyFont;src: url(\"file:///android_asset/fonts/Montserrat_Regular.ttf\")}body{font-family: MyFont;color: #000000;text-align:justify;line-height:1.2}"
+ "</style></head>"
+ "<body>"
+ htmlText
+ "</body></html>";
about.loadDataWithBaseURL(null, text, mimeType, encoding, null);
phone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final int REQUEST_PHONE_CALL = 1;
Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:" + (sp.getSetting()[7])));
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(requireActivity(), Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(requireActivity(), new String[]{Manifest.permission.CALL_PHONE}, REQUEST_PHONE_CALL);
} else {
startActivity(callIntent);
}
}
}
});
email.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String[] TO = {(sp.getSetting()[6])};
Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/plain");
emailIntent.putExtra(Intent.EXTRA_EMAIL, TO);
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "halo");
emailIntent.putExtra(Intent.EXTRA_TEXT, "email" + "\n");
try {
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
} catch (android.content.ActivityNotFoundException ex) {
Toast.makeText(getActivity(),
"There is no email client installed.", Toast.LENGTH_SHORT).show();
}
}
});
website.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String url = sp.getSetting()[8];
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});
close.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
dialog.getWindow().setAttributes(lp);
}
@Override
public void onResume() {
super.onResume();
User loginUser = BaseApp.getInstance(context).getLoginUser();
nama.setText(loginUser.getFullnama());
iduser.setText(loginUser.getId());
email.setText(loginUser.getEmail());
PicassoTrustAll.getInstance(context)
.load(Constants.IMAGESDRIVER + loginUser.getFotodriver())
.placeholder(R.drawable.image_placeholder)
.resize(250, 250)
.into(foto);
}
private void logout() {
rlprogress.setVisibility(View.VISIBLE);
User driver = BaseApp.getInstance(context).getLoginUser();
GetHomeRequestJson request = new GetHomeRequestJson();
request.setId(driver.getId());
DriverService service = ServiceGenerator.createService(DriverService.class, driver.getEmail(), driver.getPassword());
service.logout(request).enqueue(new Callback<GetHomeResponseJson>() {
@Override
public void onResponse(@NonNull Call<GetHomeResponseJson> call, @NonNull Response<GetHomeResponseJson> response) {
if (response.isSuccessful()) {
rlprogress.setVisibility(View.GONE);
if (Objects.requireNonNull(response.body()).getMessage().equalsIgnoreCase("success")) {
removeNotif();
Realm realm = BaseApp.getInstance(context).getRealmInstance();
realm.beginTransaction();
realm.delete(User.class);
realm.commitTransaction();
BaseApp.getInstance(context).setLoginUser(null);
startActivity(new Intent(getContext(), IntroActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK));
Objects.requireNonNull(getActivity()).finish();
}
}
}
@Override
public void onFailure(@NonNull Call<GetHomeResponseJson> call, @NonNull Throwable t) {
rlprogress.setVisibility(View.GONE);
t.printStackTrace();
Toast.makeText(context, "error connection!", Toast.LENGTH_SHORT).show();
}
});
}
private void removeNotif() {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(NOTIFICATION_SERVICE);
Objects.requireNonNull(notificationManager).cancel(0);
}
}

View File

@@ -0,0 +1,16 @@
package id.ontime.driver.gmap;
import java.io.Serializable;
public class Direction implements Serializable {
/**
*
*/
private static final long serialVersionUID = -4198690398884769235L;
public String durationText;
public String html_instructions;
public String distanceText;
}

View File

@@ -0,0 +1,332 @@
package id.ontime.driver.gmap;
import com.google.android.gms.maps.model.LatLng;
import id.ontime.driver.activity.MainActivity;
import id.ontime.driver.utils.Log;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
public class GMapDirection {
public final static String MODE_DRIVING = "driving";
public final static String MODE_WALKING = "walking";
public GMapDirection() {
}
public String getUrl(LatLng start, LatLng end, String mode, boolean isAlternative) {
String url = "https://maps.googleapis.com/maps/api/directions/json?"
+ "origin=" + start.latitude + "," + start.longitude
+ "&destination=" + end.latitude + "," + end.longitude
+ "&sensor=false&units=metric&mode="+mode
+ "&key="+ MainActivity.apikey;
if (isAlternative)
url += "&alternatives=true";
Log.e("getUrl", url);
return url;
}
public String getUrlVia(String mode, boolean isAlternative, LatLng start, LatLng... end) {
String via = "&waypoints=";
if(end.length > 1){
for(LatLng end_latLng:end){
via += "via:"+end_latLng.latitude+"%2C"+end_latLng.longitude+"%7C";
}
}else {
via = "";
}
String url = "https://maps.googleapis.com/maps/api/directions/json?"
+ "origin=" + start.latitude + "," + start.longitude
+ "&destination=" + end[end.length-1].latitude + "," + end[end.length-1].longitude
+ via
+ "&sensor=false&units=metric&mode="+mode
+ "&key="+ MainActivity.apikey;
if (isAlternative)
url += "&alternatives=true";
Log.e("getUrl", url);
return url;
}
public Document getDocument(LatLng start, LatLng end, String mode) {
String url = "https://maps.googleapis.com/maps/api/directions/json?"
+ "origin=" + start.latitude + "," + start.longitude
+ "&destination=" + end.latitude + "," + end.longitude
+ "&sensor=false&units=metric&mode=driving"
+ "&key="+ MainActivity.apikey;
// String url = "http://maps.googleapis.com/maps/api/directions/xml?"
// + "origin=" + start.latitude + "," + start.longitude
// + "&destination=" + end.latitude + "," + end.longitude
// + "&sensor=false&units=metric&mode=driving"+"alternatives=true";
url = url.replace(" ", "+");
Log.e("URL", url);
try {
URL ur = new URL(url);
URLConnection connection = ur.openConnection();
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(connection.getInputStream());
return doc;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public Document getDocument(String origin, String destination, String mode) {
String url = "http://maps.googleapis.com/maps/api/directions/json?"
+ "origin=" + origin + "&destination=" + destination
+ "&sensor=false&units=metric&mode=driving"
+ "&key="+ MainActivity.apikey;
url = url.replace(" ", "+");
Log.e("Query URL", url);
try {
URL ur = new URL(url);
URLConnection connection = ur.openConnection();
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(connection.getInputStream());
return doc;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public String getDurationText(Document doc) {
NodeList nl1 = doc.getElementsByTagName("duration");
Node node1 = nl1.item(0);
NodeList nl2 = node1.getChildNodes();
Node node2 = nl2.item(getNodeIndex(nl2, "text"));
Log.i("DurationText", node2.getTextContent());
return node2.getTextContent();
}
public int getDurationValue(Document doc) {
NodeList nl1 = doc.getElementsByTagName("duration");
Node node1 = nl1.item(0);
NodeList nl2 = node1.getChildNodes();
Node node2 = nl2.item(getNodeIndex(nl2, "value"));
Log.i("DurationValue", node2.getTextContent());
return Integer.parseInt(node2.getTextContent());
}
public String getDistanceText(Document doc) {
NodeList nl1 = doc.getElementsByTagName("distance");
Node node1 = nl1.item(0);
NodeList nl2 = node1.getChildNodes();
Node node2 = nl2.item(getNodeIndex(nl2, "text"));
Log.i("DistanceText", node2.getTextContent());
return node2.getTextContent();
}
public int getDistanceValue(Document doc) {
NodeList nl1 = doc.getElementsByTagName("distance");
Node node1 = nl1.item(0);
NodeList nl2 = node1.getChildNodes();
Node node2 = nl2.item(getNodeIndex(nl2, "value"));
Log.i("DistanceValue", node2.getTextContent());
return Integer.parseInt(node2.getTextContent());
}
public List<Float> getDistanceValueInMeters(Document doc) {
List<Float> list = new ArrayList<Float>();
NodeList nl1 = doc.getElementsByTagName("distance");
for (int x = 0; x < nl1.getLength(); x++) {
Node node1 = nl1.item(x);
NodeList nl2 = node1.getChildNodes();
Node node2 = nl2.item(getNodeIndex(nl2, "value"));
Log.i("DistanceValue", node2.getTextContent());
float val = Integer.parseInt(node2.getTextContent());
list.add(val);
}
return list;
}
public String getStartAddress(Document doc) {
NodeList nl1 = doc.getElementsByTagName("start_address");
Node node1 = nl1.item(0);
Log.i("StartAddress", node1.getTextContent());
return node1.getTextContent();
}
public String getEndAddress(Document doc) {
NodeList nl1 = doc.getElementsByTagName("end_address");
Node node1 = nl1.item(0);
Log.i("StartAddress", node1.getTextContent());
return node1.getTextContent();
}
public String getCopyRights(Document doc) {
NodeList nl1 = doc.getElementsByTagName("copyrights");
Node node1 = nl1.item(0);
Log.i("CopyRights", node1.getTextContent());
return node1.getTextContent();
}
public LatLng getStartLocation(Document doc) {
NodeList nl1 = doc.getElementsByTagName("start_location");
Node node1 = nl1.item(0);
NodeList nl2 = node1.getChildNodes();
Node node2 = nl2.item(getNodeIndex(nl2, "lat"));
Node node21 = nl2.item(getNodeIndex(nl2, "lng"));
Log.i("DistanceValue", node2.getTextContent());
return new LatLng(Float.parseFloat(node2.getTextContent()), Float.parseFloat(node21.getTextContent()));
}
public LatLng getEndLocation(Document doc) {
NodeList nl1 = doc.getElementsByTagName("end_location");
Node node1 = nl1.item(0);
NodeList nl2 = node1.getChildNodes();
Node node2 = nl2.item(getNodeIndex(nl2, "lat"));
Node node21 = nl2.item(getNodeIndex(nl2, "lng"));
Log.i("DistanceValue", node2.getTextContent());
return new LatLng(Float.parseFloat(node2.getTextContent()), Float.parseFloat(node21.getTextContent()));
}
public ArrayList<LatLng> getDirection(Document doc) {
NodeList nl1, nl2, nl3;
ArrayList<LatLng> listGeopoints = new ArrayList<LatLng>();
nl1 = doc.getElementsByTagName("step");
if (nl1.getLength() > 0) {
for (int i = 0; i < nl1.getLength(); i++) {
Node node1 = nl1.item(i);
nl2 = node1.getChildNodes();
Node locationNode = nl2.item(getNodeIndex(nl2, "start_location"));
nl3 = locationNode.getChildNodes();
Node latNode = nl3.item(getNodeIndex(nl3, "lat"));
double lat = Double.parseDouble(latNode.getTextContent());
Node lngNode = nl3.item(getNodeIndex(nl3, "lng"));
double lng = Double.parseDouble(lngNode.getTextContent());
listGeopoints.add(new LatLng(lat, lng));
locationNode = nl2.item(getNodeIndex(nl2, "polyline"));
nl3 = locationNode.getChildNodes();
latNode = nl3.item(getNodeIndex(nl3, "points"));
ArrayList<LatLng> arr = decodePoly(latNode.getTextContent());
for (int j = 0; j < arr.size(); j++) {
listGeopoints.add(new LatLng(arr.get(j).latitude, arr.get(j).longitude));
}
locationNode = nl2.item(getNodeIndex(nl2, "end_location"));
nl3 = locationNode.getChildNodes();
latNode = nl3.item(getNodeIndex(nl3, "lat"));
lat = Double.parseDouble(latNode.getTextContent());
lngNode = nl3.item(getNodeIndex(nl3, "lng"));
lng = Double.parseDouble(lngNode.getTextContent());
listGeopoints.add(new LatLng(lat, lng));
}
}
return listGeopoints;
}
public ArrayList<Direction> getDirections(Document doc) {
NodeList nl1, nl2, nl3;
ArrayList<Direction> listDirections = new ArrayList<Direction>();
nl1 = doc.getElementsByTagName("step");
if (nl1.getLength() > 0) {
for (int i = 0; i < nl1.getLength(); i++) {
Direction d = new Direction();
Node node1 = nl1.item(i);
nl2 = node1.getChildNodes();
Node locationNode = nl2.item(getNodeIndex(nl2, "duration"));
nl3 = locationNode.getChildNodes();
Node latNode = nl3.item(getNodeIndex(nl3, "text"));
d.durationText = latNode.getTextContent();
locationNode = nl2.item(getNodeIndex(nl2, "html_instructions"));
d.html_instructions = locationNode.getTextContent();
locationNode = nl2.item(getNodeIndex(nl2, "distance"));
nl3 = locationNode.getChildNodes();
latNode = nl3.item(getNodeIndex(nl3, "text"));
d.distanceText = latNode.getTextContent();
listDirections.add(d);
}
}
return listDirections;
}
private int getNodeIndex(NodeList nl, String nodename) {
for (int i = 0; i < nl.getLength(); i++) {
if (nl.item(i).getNodeName().equals(nodename))
return i;
}
return -1;
}
private ArrayList<LatLng> decodePoly(String encoded) {
ArrayList<LatLng> poly = new ArrayList<LatLng>();
int index = 0, len = encoded.length();
int lat = 0, lng = 0;
while (index < len) {
int b, shift = 0, result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;
shift = 0;
result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;
LatLng position = new LatLng((double) lat / 1E5, (double) lng / 1E5);
poly.add(position);
}
return poly;
}
}

View File

@@ -0,0 +1,24 @@
package id.ontime.driver.gmap.directions;
import com.google.android.gms.maps.model.LatLng;
public class Bound {
private LatLng northEast;
private LatLng southWest;
public LatLng getNorthEast() {
return northEast;
}
public void setNorthEast(LatLng northEast) {
this.northEast = northEast;
}
public LatLng getSouthWest() {
return southWest;
}
public void setSouthWest(LatLng southWest) {
this.southWest = southWest;
}
}

View File

@@ -0,0 +1,152 @@
package id.ontime.driver.gmap.directions;
import android.content.Context;
import com.google.android.gms.maps.model.LatLng;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Directions {
Context context;
private String ROUTES = "routes";
private String SUMMARY = "summary";
private String LEGS = "legs";
private String DISTANCE = "distance";
private String TEXT = "text";
private String STEPS = "steps";
private String DURATION = "duration";
private String END_LOCATION = "end_location";
private String LATITUDE = "lat";
private String HTML_INSTRUCTION = "html_instructions";
private String OVERVIEW_POLYLINE = "overview_polyline";
private String POLYLINE = "polyline";
private String POINTS = "points";
private String START_LOCATION = "start_location";
private String LONGITUDE = "lng";
private String VALUE = "value";
public Directions(Context context) {
this.context = context;
}
public String convertStreamToString(final InputStream input) throws Exception {
try {
final BufferedReader reader = new BufferedReader(new InputStreamReader(input));
final StringBuffer sBuf = new StringBuffer();
String line = null;
while ((line = reader.readLine()) != null) {
sBuf.append(line);
}
return sBuf.toString();
} catch (Exception e) {
throw e;
} finally {
try {
input.close();
} catch (Exception e) {
throw e;
}
}
}
public List<Route> parse(String routesJSONString) throws Exception {
try {
List<Route> routeList = new ArrayList<Route>();
final JSONObject jSONObject = new JSONObject(routesJSONString);
JSONArray routeJSONArray = jSONObject.getJSONArray(ROUTES);
Route route;
JSONObject routesJSONObject;
for (int m = 0; m < routeJSONArray.length(); m++) {
route = new Route(context);
routesJSONObject = routeJSONArray.getJSONObject(m);
JSONArray legsJSONArray;
route.setSummary(routesJSONObject.getString(SUMMARY));
route.setOverviewPolyLine(decodePolyLines(routesJSONObject.getJSONObject(OVERVIEW_POLYLINE).getString(POINTS)));
legsJSONArray = routesJSONObject.getJSONArray(LEGS);
JSONObject legJSONObject;
Leg leg;
JSONArray stepsJSONArray;
for (int b = 0; b < legsJSONArray.length(); b++) {
leg = new Leg();
legJSONObject = legsJSONArray.getJSONObject(b);
leg.setDistance(new Distance(legJSONObject.optJSONObject(DISTANCE).optString(TEXT), legJSONObject.optJSONObject(DISTANCE).optLong(VALUE)));
leg.setDuration(new Duration(legJSONObject.optJSONObject(DURATION).optString(TEXT), legJSONObject.optJSONObject(DURATION).optLong(VALUE)));
stepsJSONArray = legJSONObject.getJSONArray(STEPS);
JSONObject stepJSONObject, stepDurationJSONObject, legPolyLineJSONObject, stepStartLocationJSONObject, stepEndLocationJSONObject;
Step step;
String encodedString;
LatLng stepStartLocationLatLng, stepEndLocationLatLng;
for (int i = 0; i < stepsJSONArray.length(); i++) {
stepJSONObject = stepsJSONArray.getJSONObject(i);
step = new Step();
JSONObject stepDistanceJSONObject = stepJSONObject.getJSONObject(DISTANCE);
step.setDistance(new Distance(stepDistanceJSONObject.getString(TEXT), stepDistanceJSONObject.getLong(VALUE)));
stepDurationJSONObject = stepJSONObject.getJSONObject(DURATION);
step.setDuration(new Duration(stepDurationJSONObject.getString(TEXT), stepDurationJSONObject.getLong(VALUE)));
stepEndLocationJSONObject = stepJSONObject.getJSONObject(END_LOCATION);
stepEndLocationLatLng = new LatLng(stepEndLocationJSONObject.getDouble(LATITUDE), stepEndLocationJSONObject.getDouble(LONGITUDE));
step.setEndLocation(stepEndLocationLatLng);
step.setHtmlInstructions(stepJSONObject.getString(HTML_INSTRUCTION));
legPolyLineJSONObject = stepJSONObject.getJSONObject(POLYLINE);
encodedString = legPolyLineJSONObject.getString(POINTS);
step.setPoints(decodePolyLines(encodedString));
stepStartLocationJSONObject = stepJSONObject.getJSONObject(START_LOCATION);
stepStartLocationLatLng = new LatLng(stepStartLocationJSONObject.getDouble(LATITUDE), stepStartLocationJSONObject.getDouble(LONGITUDE));
step.setStartLocation(stepStartLocationLatLng);
leg.addStep(step);
}
route.addLeg(leg);
}
routeList.add(route);
}
return routeList;
} catch (Exception e) {
throw e;
}
}
private ArrayList<LatLng> decodePolyLines(String encoded) {
ArrayList<LatLng> poly = new ArrayList<LatLng>();
int index = 0, len = encoded.length();
int lat = 0, lng = 0;
while (index < len) {
int b, shift = 0, result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;
shift = 0;
result = 0;
do {
b = encoded.charAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;
LatLng position = new LatLng((double) lat / 1E5, (double) lng / 1E5);
poly.add(position);
}
return poly;
}
}

View File

@@ -0,0 +1,28 @@
package id.ontime.driver.gmap.directions;
public class Distance {
private String text;
private long value;
public Distance(String text, long value) {
this.text = text;
this.value = value;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public long getValue() {
return value;
}
public void setValue(long value) {
this.value = value;
}
}

View File

@@ -0,0 +1,27 @@
package id.ontime.driver.gmap.directions;
public class Duration {
private String text;
private long value;
public Duration(String text, long value) {
this.text = text;
this.value = value;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public long getValue() {
return value;
}
public void setValue(long value) {
this.value = value;
}
}

View File

@@ -0,0 +1,81 @@
package id.ontime.driver.gmap.directions;
import com.google.android.gms.maps.model.LatLng;
import java.util.ArrayList;
import java.util.List;
public class Leg {
private Distance distance;
private Duration duration;
private String endAddress;
private LatLng endLocation;
private String startAddress;
private LatLng startLocation;
private List<Step> steps;
public Leg() {
steps = new ArrayList<Step>();
}
public Distance getDistance() {
return distance;
}
public void setDistance(Distance distance) {
this.distance = distance;
}
public Duration getDuration() {
return duration;
}
public void setDuration(Duration duration) {
this.duration = duration;
}
public String getEndAddress() {
return endAddress;
}
public void setEndAddress(String endAddress) {
this.endAddress = endAddress;
}
public LatLng getEndLocation() {
return endLocation;
}
public void setEndLocation(LatLng endLocation) {
this.endLocation = endLocation;
}
public String getStartAddress() {
return startAddress;
}
public void setStartAddress(String startAddress) {
this.startAddress = startAddress;
}
public LatLng getStartLocation() {
return startLocation;
}
public void setStartLocation(LatLng startLocation) {
this.startLocation = startLocation;
}
public List<Step> getSteps() {
return steps;
}
public void setSteps(List<Step> steps) {
this.steps = steps;
}
public void addStep(Step step) {
this.steps.add(step);
}
}

View File

@@ -0,0 +1,72 @@
package id.ontime.driver.gmap.directions;
import android.content.Context;
import com.google.android.gms.maps.model.LatLng;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class Route implements Serializable {
private static final long serialVersionUID = 1L;
private Bound bounds;
private String copyrights;
private List<Leg> legs;
private List<LatLng> overviewPolyLine;
private String summary;
public Route(Context context) {
legs = new ArrayList<Leg>();
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public Bound getBounds() {
return bounds;
}
public void setBounds(Bound bounds) {
this.bounds = bounds;
}
public String getCopyrights() {
return copyrights;
}
public void setCopyrights(String copyrights) {
this.copyrights = copyrights;
}
public List<Leg> getLegs() {
return legs;
}
public void setLegs(List<Leg> legs) {
this.legs = legs;
}
public void addLeg(Leg leg) {
this.legs.add(leg);
}
public List<LatLng> getOverviewPolyLine() {
return overviewPolyLine;
}
public void setOverviewPolyLine(List<LatLng> overviewPolyLine) {
this.overviewPolyLine = overviewPolyLine;
}
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
}

View File

@@ -0,0 +1,71 @@
package id.ontime.driver.gmap.directions;
import com.google.android.gms.maps.model.LatLng;
import java.util.List;
public class Step {
private Distance distance;
private Duration duration;
private LatLng endLocation;
private LatLng startLocation;
private String htmlInstructions;
private String travelMode;
private List<LatLng> points;
public List<LatLng> getPoints() {
return points;
}
public void setPoints(List<LatLng> points) {
this.points = points;
}
public Distance getDistance() {
return distance;
}
public void setDistance(Distance distance) {
this.distance = distance;
}
public Duration getDuration() {
return duration;
}
public void setDuration(Duration duration) {
this.duration = duration;
}
public LatLng getEndLocation() {
return endLocation;
}
public void setEndLocation(LatLng endLocation) {
this.endLocation = endLocation;
}
public LatLng getStartLocation() {
return startLocation;
}
public void setStartLocation(LatLng startLocation) {
this.startLocation = startLocation;
}
public String getHtmlInstructions() {
return htmlInstructions;
}
public void setHtmlInstructions(String htmlInstructions) {
this.htmlInstructions = htmlInstructions;
}
public String getTravelMode() {
return travelMode;
}
public void setTravelMode(String travelMode) {
this.travelMode = travelMode;
}
}

View File

@@ -0,0 +1,105 @@
package id.ontime.driver.item;
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
import id.ontime.driver.R;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.models.BankModel;
import id.ontime.driver.utils.PicassoTrustAll;
import java.util.List;
import java.util.Objects;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import static android.content.Context.CLIPBOARD_SERVICE;
public class BankItem extends RecyclerView.Adapter<BankItem.ItemRowHolder> {
private List<BankModel> dataList;
private Context mContext;
private int rowLayout;
public BankItem(Context context, List<BankModel> dataList, int rowLayout) {
this.dataList = dataList;
this.mContext = context;
this.rowLayout = rowLayout;
}
@NonNull
@Override
public ItemRowHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
return new ItemRowHolder(v);
}
@Override
public void onBindViewHolder(@NonNull final ItemRowHolder holder, final int position) {
final BankModel singleItem = dataList.get(position);
PicassoTrustAll.getInstance(mContext)
.load(Constants.IMAGESBANK + singleItem.getImage_bank())
.resize(250, 250)
.into(holder.images);
holder.namabank.setText(singleItem.getNama_bank());
holder.namapemilik.setText(singleItem.getNama_pemilik());
holder.rekening.setText(singleItem.getRekening_bank());
if (position % 2 == 1) {
holder.background.setBackgroundColor(mContext.getResources().getColor(R.color.backgroundgray));
// holder.imageView.setBackgroundColor(Color.parseColor("#FFFFFF"));
} else {
holder.background.setBackgroundColor(mContext.getResources().getColor(R.color.white));
// holder.imageView.setBackgroundColor(Color.parseColor("#FFFAF8FD"));
}
holder.rekening.setOnClickListener(new View.OnClickListener() {
@SuppressLint("ObsoleteSdkInt")
@Override
public void onClick(View v) {
Toast.makeText(mContext, "Disalin!", Toast.LENGTH_SHORT).show();
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {
android.text.ClipboardManager clipboard = (android.text.ClipboardManager) mContext.getSystemService(CLIPBOARD_SERVICE);
Objects.requireNonNull(clipboard).setText(singleItem.getRekening_bank());
} else {
android.content.ClipboardManager clipboard = (android.content.ClipboardManager) mContext.getSystemService(CLIPBOARD_SERVICE);
android.content.ClipData clip = android.content.ClipData.newPlainText("Disalin!", singleItem.getRekening_bank());
Objects.requireNonNull(clipboard).setPrimaryClip(clip);
}
}
});
}
@Override
public int getItemCount() {
return (null != dataList ? dataList.size() : 0);
}
static class ItemRowHolder extends RecyclerView.ViewHolder {
TextView namabank, namapemilik, rekening;
ImageView images;
RelativeLayout background;
ItemRowHolder(View itemView) {
super(itemView);
background = itemView.findViewById(R.id.rootLayout);
namabank = itemView.findViewById(R.id.namabank);
namapemilik = itemView.findViewById(R.id.namapemilik);
rekening = itemView.findViewById(R.id.norekening);
images = itemView.findViewById(R.id.images);
}
}
}

View File

@@ -0,0 +1,93 @@
package id.ontime.driver.item;
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.TextView;
import id.ontime.driver.R;
import id.ontime.driver.models.BankModels;
import id.ontime.driver.utils.Utility;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class BanklistItem extends RecyclerView.Adapter<BanklistItem.ItemRowHolder> {
private ArrayList<BankModels> dataList;
private Context mContext;
private int rowLayout;
private OnItemClickListener listener;
public interface OnItemClickListener {
void onItemClick(BankModels item);
}
public BanklistItem(Context context, ArrayList<BankModels> dataList, int rowLayout, OnItemClickListener listener) {
this.dataList = dataList;
this.mContext = context;
this.rowLayout = rowLayout;
this.listener = listener;
}
@NonNull
@Override
public ItemRowHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
return new ItemRowHolder(v);
}
@Override
public void onBindViewHolder(@NonNull final ItemRowHolder holder, final int position) {
final BankModels singleItem = dataList.get(position);
if (singleItem.getText().equals("Unlimited")) {
holder.text.setText(singleItem.getText());
} else {
Utility.currencyTXT(holder.text, singleItem.getText(), mContext);
}
holder.text.setTypeface(Typeface.createFromAsset(mContext.getAssets(),
"fonts/NeoSansPro_Medium.ttf"));
holder.bind(singleItem, listener);
}
@Override
public int getItemCount() {
return (null != dataList ? dataList.size() : 0);
}
class ItemRowHolder extends RecyclerView.ViewHolder {
TextView text;
LinearLayout background;
ItemRowHolder(View itemView) {
super(itemView);
background = itemView.findViewById(R.id.rootLayout);
text = itemView.findViewById(R.id.text);
}
void bind(final BankModels item, final OnItemClickListener listener) {
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onItemClick(item);
notifyDataSetChanged();
}
});
}
}
}

View File

@@ -0,0 +1,129 @@
package id.ontime.driver.item;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import id.ontime.driver.R;
import id.ontime.driver.activity.OrderDetailActivity;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.models.AllTransaksiModel;
import id.ontime.driver.utils.Utility;
import id.ontime.driver.utils.PicassoTrustAll;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.Locale;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
/**
* Created by otacodes on 3/24/2019.
*/
public class HistoryItem extends RecyclerView.Adapter<HistoryItem.ItemRowHolder> {
private List<AllTransaksiModel> dataList;
private Context mContext;
private int rowLayout;
public HistoryItem(Context context, List<AllTransaksiModel> dataList, int rowLayout) {
this.dataList = dataList;
this.mContext = context;
this.rowLayout = rowLayout;
}
@NonNull
@Override
public ItemRowHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
return new ItemRowHolder(v);
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull final ItemRowHolder holder, final int position) {
final AllTransaksiModel singleItem = dataList.get(position);
holder.text.setText("Order " + singleItem.getFitur());
if (singleItem.getHome().equals("4")) {
double totalbiaya = Double.parseDouble(singleItem.getTotalbiaya());
Utility.currencyTXT(holder.nominal, String.valueOf(singleItem.getHarga()+ totalbiaya), mContext);
} else {
Utility.currencyTXT(holder.nominal, String.valueOf(singleItem.getHarga()), mContext);
}
holder.keterangan.setText(singleItem.getStatustransaksi());
SimpleDateFormat timeFormat = new SimpleDateFormat("dd MMM yyyy", Locale.US);
String finalDate = timeFormat.format(singleItem.getWaktuOrder());
holder.tanggal.setText(finalDate);
PicassoTrustAll.getInstance(mContext)
.load(Constants.IMAGESFITUR + singleItem.getIcon())
.into(holder.images);
if (singleItem.status == 4 && singleItem.getRate().isEmpty()) {
holder.keterangan.setTextColor(mContext.getResources().getColor(R.color.black));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.colorgradient));
holder.background.setBackground(mContext.getResources().getDrawable(R.drawable.btn_rect));
} else if (singleItem.status == 5) {
holder.keterangan.setTextColor(mContext.getResources().getColor(R.color.red));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.red));
holder.background.setBackground(mContext.getResources().getDrawable(R.drawable.btn_rect_red));
} else {
holder.keterangan.setTextColor(mContext.getResources().getColor(R.color.black));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.colorgradient));
holder.background.setBackground(mContext.getResources().getDrawable(R.drawable.btn_rect));
}
holder.itemlayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(mContext, OrderDetailActivity.class);
i.putExtra("id_pelanggan", singleItem.getIdPelanggan());
i.putExtra("id_transaksi", singleItem.getIdTransaksi());
i.putExtra("response", String.valueOf(singleItem.status));
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
mContext.startActivity(i);
}
});
}
@Override
public int getItemCount() {
return (null != dataList ? dataList.size() : 0);
}
static class ItemRowHolder extends RecyclerView.ViewHolder {
TextView text, tanggal, nominal, keterangan;
ImageView background, images;
RelativeLayout itemlayout;
ItemRowHolder(View itemView) {
super(itemView);
background = itemView.findViewById(R.id.background);
images = itemView.findViewById(R.id.image);
text = itemView.findViewById(R.id.text);
tanggal = itemView.findViewById(R.id.texttanggal);
nominal = itemView.findViewById(R.id.price);
keterangan = itemView.findViewById(R.id.textket);
itemlayout = itemView.findViewById(R.id.mainlayout);
}
}
}

View File

@@ -0,0 +1,512 @@
package id.ontime.driver.item;
import android.annotation.SuppressLint;
import android.content.Context;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.SeekBar;
import android.widget.TextView;
import id.ontime.driver.R;
import id.ontime.driver.activity.ChatActivity;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.models.ChatModels;
import id.ontime.driver.utils.PicassoTrustAll;
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class ItemChat extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<ChatModels> mDataSet;
private String myID;
private static final int mychat = 1;
private static final int friendchat = 2;
private static final int mychatimage = 3;
private static final int otherchatimage = 4;
private static final int alert_message = 7;
private static final int my_audio_message = 8;
private static final int other_audio_message = 9;
private Context context;
private Integer today_day;
private OnItemClickListener listener;
private OnLongClickListener long_listener;
public interface OnItemClickListener {
void onItemClick(ChatModels item, View view);
}
public interface OnLongClickListener {
void onLongclick(ChatModels item, View view);
}
public ItemChat(List<ChatModels> dataSet, String id, Context context, OnItemClickListener listener, OnLongClickListener long_listener) {
mDataSet = dataSet;
this.myID = id;
this.context = context;
this.listener = listener;
this.long_listener = long_listener;
Calendar cal = Calendar.getInstance();
today_day = cal.get(Calendar.DAY_OF_MONTH);
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewtype) {
View v;
switch (viewtype) {
case mychat:
v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_chat_my, viewGroup, false);
return new Chatviewholder(v);
case friendchat:
v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_chat_other, viewGroup, false);
return new Chatviewholder(v);
case mychatimage:
v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_chat_image_my, viewGroup, false);
return new Chatimageviewholder(v);
case otherchatimage:
v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_chat_image_other, viewGroup, false);
return new Chatimageviewholder(v);
case my_audio_message:
v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_chataudio, viewGroup, false);
return new Chataudioviewholder(v);
case other_audio_message:
v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_chat_audio_other, viewGroup, false);
return new Chataudioviewholder(v);
case alert_message:
v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_chat_alert, viewGroup, false);
return new Alertviewholder(v);
}
return null;
}
@Override
public int getItemCount() {
return mDataSet.size();
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
ChatModels chat = mDataSet.get(position);
switch (chat.getType()) {
case "text":
Chatviewholder chatviewholder = (Chatviewholder) holder;
// check if the message is from sender or receiver
if (chat.getSender_id().equals(myID)) {
if (chat.getStatus().equals("1"))
chatviewholder.message_seen.setText("Seen at " + chat.getTime());
else
chatviewholder.message_seen.setText("Sent");
} else {
chatviewholder.message_seen.setText("");
}
if (position != 0) {
ChatModels chat2 = mDataSet.get(position - 1);
if (chat2.getTimestamp().substring(14, 16).equals(chat.getTimestamp().substring(14, 16))) {
chatviewholder.datetxt.setVisibility(View.GONE);
} else {
chatviewholder.datetxt.setVisibility(View.VISIBLE);
chatviewholder.datetxt.setText(ChangeDate(chat.getTimestamp()));
}
chatviewholder.message.setText(chat.getText());
} else {
chatviewholder.datetxt.setVisibility(View.VISIBLE);
chatviewholder.datetxt.setText(ChangeDate(chat.getTimestamp()));
chatviewholder.message.setText(chat.getText());
}
chatviewholder.bind(chat, long_listener);
break;
case "image": {
final Chatimageviewholder chatimageholder = (Chatimageviewholder) holder;
if (chat.getSender_id().equals(myID)) {
if (chat.getStatus().equals("1"))
chatimageholder.messageSeen.setText("Seen at " + chat.getTime());
else
chatimageholder.messageSeen.setText("Sent");
} else {
chatimageholder.messageSeen.setText("");
}
if (chat.getPic_url().equals("none")) {
if (ChatActivity.uploadingImageId.equals(chat.getChat_id())) {
chatimageholder.progressBar.setVisibility(View.VISIBLE);
chatimageholder.messageSeen.setText("");
} else {
chatimageholder.progressBar.setVisibility(View.GONE);
chatimageholder.notSendMessageIcon.setVisibility(View.VISIBLE);
chatimageholder.messageSeen.setText("Not delivered. ");
}
} else {
chatimageholder.notSendMessageIcon.setVisibility(View.GONE);
chatimageholder.progressBar.setVisibility(View.GONE);
}
if (position != 0) {
ChatModels chat2 = mDataSet.get(position - 1);
if (chat2.getTimestamp().substring(14, 16).equals(chat.getTimestamp().substring(14, 16))) {
chatimageholder.datetxt.setVisibility(View.GONE);
} else {
chatimageholder.datetxt.setVisibility(View.VISIBLE);
chatimageholder.datetxt.setText(ChangeDate(chat.getTimestamp()));
}
PicassoTrustAll.getInstance(context).load(chat.getPic_url()).placeholder(R.drawable.image_placeholder).resize(400, 400).centerCrop().into(chatimageholder.chatimage);
} else {
chatimageholder.datetxt.setVisibility(View.VISIBLE);
chatimageholder.datetxt.setText(ChangeDate(chat.getTimestamp()));
PicassoTrustAll.getInstance(context).load(chat.getPic_url()).placeholder(R.drawable.image_placeholder).resize(400, 400).centerCrop().into(chatimageholder.chatimage);
}
chatimageholder.bind(mDataSet.get(position), listener, long_listener);
break;
}
case "audio":
final Chataudioviewholder chataudioviewholder = (Chataudioviewholder) holder;
// check if the message is from sender or receiver
if (chat.getSender_id().equals(myID)) {
if (chat.getStatus().equals("1"))
chataudioviewholder.messageSeen.setText("Seen at " + chat.getTime());
else
chataudioviewholder.messageSeen.setText("Sent");
} else {
chataudioviewholder.messageSeen.setText("");
}
if (chat.getPic_url().equals("none")) {
if (ChatActivity.uploadingAudioId.equals(chat.getChat_id())) {
chataudioviewholder.progressBar.setVisibility(View.VISIBLE);
chataudioviewholder.messageSeen.setText("");
} else {
chataudioviewholder.progressBar.setVisibility(View.GONE);
chataudioviewholder.notSendMessageIcon.setVisibility(View.VISIBLE);
chataudioviewholder.messageSeen.setText("Not delivered. ");
}
} else {
chataudioviewholder.notSendMessageIcon.setVisibility(View.GONE);
chataudioviewholder.progressBar.setVisibility(View.GONE);
}
// make the group of message by date set the gap of 1 min
// means message send with in 1 min will show as a group
if (position != 0) {
ChatModels chat2 = mDataSet.get(position - 1);
if (chat2.getTimestamp().substring(14, 16).equals(chat.getTimestamp().substring(14, 16))) {
chataudioviewholder.datetxt.setVisibility(View.GONE);
} else {
chataudioviewholder.datetxt.setVisibility(View.VISIBLE);
chataudioviewholder.datetxt.setText(ChangeDate(chat.getTimestamp()));
}
} else {
chataudioviewholder.datetxt.setVisibility(View.VISIBLE);
chataudioviewholder.datetxt.setText(ChangeDate(chat.getTimestamp()));
}
chataudioviewholder.seekBar.setEnabled(false);
File fullpath = new File(Environment.getExternalStorageDirectory() + "/ontime/" + chat.getChat_id() + ".mp3");
if (fullpath.exists()) {
chataudioviewholder.totalTime.setText(getfileduration(Uri.parse(fullpath.getAbsolutePath())));
} else {
chataudioviewholder.totalTime.setText(null);
}
chataudioviewholder.bind(mDataSet.get(position), listener, long_listener);
break;
case "gif": {
final Chatimageviewholder chatimageholder = (Chatimageviewholder) holder;
if (chat.getSender_id().equals(myID)) {
if (chat.getStatus().equals("1"))
chatimageholder.messageSeen.setText("Seen at " + chat.getTime());
else
chatimageholder.messageSeen.setText("Sent");
} else {
chatimageholder.messageSeen.setText("");
}
// make the group of message by date set the gap of 1 min
// means message send with in 1 min will show as a group
if (position != 0) {
ChatModels chat2 = mDataSet.get(position - 1);
if (chat2.getTimestamp().substring(14, 16).equals(chat.getTimestamp().substring(14, 16))) {
chatimageholder.datetxt.setVisibility(View.GONE);
} else {
chatimageholder.datetxt.setVisibility(View.VISIBLE);
chatimageholder.datetxt.setText(ChangeDate(chat.getTimestamp()));
}
} else {
chatimageholder.datetxt.setVisibility(View.VISIBLE);
chatimageholder.datetxt.setText(ChangeDate(chat.getTimestamp()));
}
chatimageholder.bind(mDataSet.get(position), listener, long_listener);
break;
}
case "delete":
Alertviewholder alertviewholder = (Alertviewholder) holder;
alertviewholder.message.setTextColor(context.getResources().getColor(R.color.gray));
alertviewholder.message.setBackground(context.getResources().getDrawable(R.drawable.round_edittext_background));
alertviewholder.message.setText("This message is deleted by " + chat.getSender_name());
if (position != 0) {
ChatModels chat2 = mDataSet.get(position - 1);
if (chat2.getTimestamp().substring(11, 13).equals(chat.getTimestamp().substring(11, 13))) {
alertviewholder.datetxt.setVisibility(View.GONE);
} else {
alertviewholder.datetxt.setVisibility(View.VISIBLE);
alertviewholder.datetxt.setText(ChangeDate(chat.getTimestamp()));
}
} else {
alertviewholder.datetxt.setVisibility(View.VISIBLE);
alertviewholder.datetxt.setText(ChangeDate(chat.getTimestamp()));
}
break;
}
}
@Override
public int getItemViewType(int position) {
switch (mDataSet.get(position).getType()) {
case "text":
if (mDataSet.get(position).getSender_id().equals(myID)) {
return mychat;
}
return friendchat;
case "image":
if (mDataSet.get(position).getSender_id().equals(myID)) {
return mychatimage;
}
return otherchatimage;
case "audio":
if (mDataSet.get(position).getSender_id().equals(myID)) {
return my_audio_message;
}
return other_audio_message;
default:
return alert_message;
}
}
static class Chatviewholder extends RecyclerView.ViewHolder {
TextView message, datetxt, message_seen;
View view;
Chatviewholder(View itemView) {
super(itemView);
view = itemView;
this.message = view.findViewById(R.id.msgtxt);
this.datetxt = view.findViewById(R.id.datetxt);
message_seen = view.findViewById(R.id.messageseen);
}
void bind(final ChatModels item, final OnLongClickListener long_listener) {
message.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
long_listener.onLongclick(item, v);
return false;
}
});
}
}
// second is for the chat image
static class Chatimageviewholder extends RecyclerView.ViewHolder {
ImageView chatimage;
TextView datetxt, messageSeen;
ProgressBar progressBar;
ImageView notSendMessageIcon;
View getView;
Chatimageviewholder(View itemView) {
super(itemView);
getView = itemView;
this.chatimage = getView.findViewById(R.id.chatimage);
this.datetxt = getView.findViewById(R.id.datetxt);
messageSeen = getView.findViewById(R.id.messageseen);
notSendMessageIcon = getView.findViewById(R.id.notsend);
progressBar = getView.findViewById(R.id.progress);
}
void bind(final ChatModels item, final OnItemClickListener listener, final OnLongClickListener long_listener) {
chatimage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onItemClick(item, v);
}
});
chatimage.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
long_listener.onLongclick(item, v);
return false;
}
});
}
}
static class Chataudioviewholder extends RecyclerView.ViewHolder {
TextView datetxt, messageSeen;
ProgressBar progressBar;
ImageView notSendMessageIcon;
ImageView playBtn;
SeekBar seekBar;
TextView totalTime;
LinearLayout audioBubble;
View getView;
Chataudioviewholder(View itemView) {
super(itemView);
getView = itemView;
audioBubble = getView.findViewById(R.id.audiobubble);
datetxt = getView.findViewById(R.id.datetxt);
messageSeen = getView.findViewById(R.id.messageseen);
notSendMessageIcon = getView.findViewById(R.id.notsend);
progressBar = getView.findViewById(R.id.progress);
this.playBtn = getView.findViewById(R.id.playbtn);
this.seekBar = getView.findViewById(R.id.seekbar);
this.totalTime = getView.findViewById(R.id.totaltime);
}
void bind(final ChatModels item, final OnItemClickListener listener, final OnLongClickListener long_listener) {
audioBubble.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onItemClick(item, v);
}
});
audioBubble.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
long_listener.onLongclick(item, v);
return false;
}
});
}
}
static class Alertviewholder extends RecyclerView.ViewHolder {
TextView message, datetxt;
View getView;
Alertviewholder(View itemView) {
super(itemView);
getView = itemView;
this.message = getView.findViewById(R.id.message);
this.datetxt = getView.findViewById(R.id.datetxt);
}
}
private String ChangeDate(String date) {
long currenttime = System.currentTimeMillis();
long databasedate = 0;
Date d = null;
try {
d = Constants.df.parse(date);
databasedate = Objects.requireNonNull(d).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
long difference = currenttime - databasedate;
if (difference < 86400000) {
int chatday = Integer.parseInt(date.substring(0, 2));
@SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
if (today_day == chatday)
return "Today " + sdf.format(Objects.requireNonNull(d));
else if ((today_day - chatday) == 1)
return "Yesterday " + sdf.format(Objects.requireNonNull(d));
} else if (difference < 172800000) {
int chatday = Integer.parseInt(date.substring(0, 2));
@SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
if ((today_day - chatday) == 1)
return "Yesterday " + sdf.format(Objects.requireNonNull(d));
}
@SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("MMM-dd-yyyy hh:mm a");
if (d != null)
return sdf.format(d);
else
return "";
}
@SuppressLint("DefaultLocale")
private String getfileduration(Uri uri) {
try {
MediaMetadataRetriever mmr = new MediaMetadataRetriever();
mmr.setDataSource(context, uri);
String durationStr = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
final int file_duration = Integer.parseInt(durationStr);
long second = (file_duration / 1000) % 60;
long minute = (file_duration / (1000 * 60)) % 60;
return String.format("%02d:%02d", minute, second);
} catch (Exception ignored) {
}
return null;
}
}

View File

@@ -0,0 +1,60 @@
package id.ontime.driver.item;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import id.ontime.driver.R;
import id.ontime.driver.models.ItemPesananModel;
import java.util.List;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
/**
* Created by ontime team on 3/24/2019.
*/
public class ItemPesananItem extends RecyclerView.Adapter<ItemPesananItem.ItemRowHolder> {
private List<ItemPesananModel> dataList;
private int rowLayout;
public ItemPesananItem(List<ItemPesananModel> dataList, int rowLayout) {
this.dataList = dataList;
this.rowLayout = rowLayout;
}
@NonNull
@Override
public ItemRowHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
return new ItemRowHolder(v);
}
@Override
public void onBindViewHolder(@NonNull final ItemRowHolder holder, final int position) {
final ItemPesananModel singleItem = dataList.get(position);
holder.name.setText(singleItem.getNama_item());
holder.qty.setText(singleItem.getJumlah_item());
}
@Override
public int getItemCount() {
return (null != dataList ? dataList.size() : 0);
}
static class ItemRowHolder extends RecyclerView.ViewHolder {
TextView name,qty;
ItemRowHolder(View itemView) {
super(itemView);
qty = itemView.findViewById(R.id.qty);
name = itemView.findViewById(R.id.namaitem);
}
}
}

View File

@@ -0,0 +1,196 @@
package id.ontime.driver.item;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
import id.ontime.driver.R;
import id.ontime.driver.constants.Constants;
import id.ontime.driver.models.MessageModels;
import id.ontime.driver.utils.PicassoTrustAll;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Objects;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
public class MessageItem extends RecyclerView.Adapter<MessageItem.CustomViewHolder> implements Filterable {
public Context context;
private ArrayList<MessageModels> messageModels;
private ArrayList<MessageModels> messageModelsFilter;
private OnItemClickListener listener;
private Integer today_day;
public interface OnItemClickListener {
void onItemClick(MessageModels item);
}
public MessageItem(Context context, ArrayList<MessageModels> user_dataList, OnItemClickListener listener) {
this.context = context;
this.messageModels = user_dataList;
this.messageModelsFilter = user_dataList;
this.listener = listener;
Calendar cal = Calendar.getInstance();
today_day = cal.get(Calendar.DAY_OF_MONTH);
}
@NonNull
@Override
public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewtype) {
@SuppressLint("InflateParams") View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_message, null);
view.setLayoutParams(new RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT));
return new CustomViewHolder(view);
}
@Override
public int getItemCount() {
return messageModelsFilter.size();
}
static class CustomViewHolder extends RecyclerView.ViewHolder {
TextView username, lastMessage, dateCreated;
ImageView userImage;
CustomViewHolder(View view) {
super(view);
userImage = itemView.findViewById(R.id.userimages);
username = itemView.findViewById(R.id.fullname);
lastMessage = itemView.findViewById(R.id.message);
dateCreated = itemView.findViewById(R.id.datetxt);
}
void bind(final MessageModels item, final OnItemClickListener listener) {
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
listener.onItemClick(item);
}
});
}
}
@Override
public void onBindViewHolder(final CustomViewHolder holder, final int i) {
final MessageModels item = messageModelsFilter.get(i);
holder.username.setText(item.getName());
holder.lastMessage.setText(item.getMessage());
holder.dateCreated.setText(ChangeDate(item.getTimestamp()));
if (item.getPicture().equals("") && item.getPicture() != null) {
PicassoTrustAll.getInstance(context).
load(R.drawable.image_placeholder)
.resize(100, 100)
.placeholder(R.drawable.image_placeholder).into(holder.userImage);
} else {
PicassoTrustAll.getInstance(context).
load(item.getPicture())
.resize(100, 100)
.placeholder(R.drawable.image_placeholder).into(holder.userImage);
}
String status = "" + item.getStatus();
if (status.equals("0")) {
holder.lastMessage.setTypeface(null, Typeface.BOLD);
holder.lastMessage.setTextColor(context.getResources().getColor(R.color.black));
} else {
holder.lastMessage.setTypeface(null, Typeface.NORMAL);
holder.lastMessage.setTextColor(context.getResources().getColor(R.color.dark_gray));
}
holder.bind(item, listener);
}
private String ChangeDate(String date) {
long currenttime = System.currentTimeMillis();
long databasedate = 0;
Date d = null;
try {
d = Constants.df.parse(date);
databasedate = Objects.requireNonNull(d).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
long difference = currenttime - databasedate;
if (difference < 86400000) {
int chatday = Integer.parseInt(date.substring(0, 2));
@SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("hh:mm a");
if (today_day == chatday)
return sdf.format(Objects.requireNonNull(d));
else if ((today_day - chatday) == 1)
return "Yesterday";
} else if (difference < 172800000) {
int chatday = Integer.parseInt(date.substring(0, 2));
if ((today_day - chatday) == 1)
return "Yesterday";
}
@SuppressLint("SimpleDateFormat") SimpleDateFormat sdf = new SimpleDateFormat("MMM-dd-yyyy");
if (d != null)
return sdf.format(d);
else
return "";
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String charString = charSequence.toString();
if (charString.isEmpty()) {
messageModelsFilter = messageModels;
} else {
ArrayList<MessageModels> filteredList = new ArrayList<>();
for (MessageModels row : messageModels) {
if (row.getName().toLowerCase().contains(charString.toLowerCase())) {
filteredList.add(row);
}
}
messageModelsFilter = filteredList;
}
FilterResults filterResults = new FilterResults();
filterResults.values = messageModelsFilter;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
messageModelsFilter = (ArrayList<MessageModels>) filterResults.values;
notifyDataSetChanged();
}
};
}
}

View File

@@ -0,0 +1,183 @@
package id.ontime.driver.item;
import android.annotation.SuppressLint;
import android.content.Context;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import id.ontime.driver.R;
import id.ontime.driver.models.WalletModel;
import id.ontime.driver.utils.Utility;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
/**
* Created by otacodes on 3/24/2019.
*/
public class WalletItem extends RecyclerView.Adapter<WalletItem.ItemRowHolder> {
private List<WalletModel> dataList;
private Context mContext;
private int rowLayout;
public WalletItem(Context context, List<WalletModel> dataList, int rowLayout) {
this.dataList = dataList;
this.mContext = context;
this.rowLayout = rowLayout;
}
@NonNull
@Override
public ItemRowHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
return new ItemRowHolder(v);
}
@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull final ItemRowHolder holder, final int position) {
final WalletModel singleItem = dataList.get(position);
if (singleItem.getType().equals("withdraw")) {
holder.text.setText(singleItem.getType());
Utility.currencyTXT(holder.nominal, singleItem.getJumlah(), mContext);
switch (singleItem.getStatus()) {
case "1":
holder.text.setTextColor(mContext.getResources().getColor(R.color.red));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.red));
holder.background.setColorFilter(mContext.getResources().getColor(R.color.red));
holder.keterangan.setText("Penarikan Dana");
break;
case "0":
holder.text.setTextColor(mContext.getResources().getColor(R.color.yellow));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.yellow));
holder.background.setColorFilter(mContext.getResources().getColor(R.color.yellow));
holder.keterangan.setText("Pending");
break;
case "2":
holder.text.setTextColor(mContext.getResources().getColor(R.color.gray));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.gray));
holder.background.setColorFilter(mContext.getResources().getColor(R.color.gray));
holder.keterangan.setText("Dibatalkan");
break;
}
} else if (singleItem.getType().equals("Order-")) {
holder.text.setText("Order " + singleItem.getBank());
Utility.currencyTXT(holder.nominal, singleItem.getJumlah(), mContext);
switch (singleItem.getStatus()) {
case "1":
holder.text.setTextColor(mContext.getResources().getColor(R.color.red));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.red));
holder.background.setColorFilter(mContext.getResources().getColor(R.color.red));
holder.keterangan.setText("Biaya Transaksi");
break;
case "0":
holder.text.setTextColor(mContext.getResources().getColor(R.color.yellow));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.yellow));
holder.background.setColorFilter(mContext.getResources().getColor(R.color.yellow));
holder.keterangan.setText("Pending");
break;
case "2":
holder.text.setTextColor(mContext.getResources().getColor(R.color.gray));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.gray));
holder.background.setColorFilter(mContext.getResources().getColor(R.color.gray));
holder.keterangan.setText("Dibatalkan");
break;
}
} else if (singleItem.getType().equals("topup") && singleItem.getStatus().equals("1")) {
holder.text.setText(singleItem.getType()+" "+singleItem.getBank());
Utility.currencyTXT(holder.nominal, singleItem.getJumlah(), mContext);
holder.text.setTextColor(mContext.getResources().getColor(R.color.green));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.green));
holder.background.setColorFilter(mContext.getResources().getColor(R.color.green));
holder.keterangan.setText("TopUp Berhasil");
} else if (singleItem.getType().equals("topup") && singleItem.getStatus().equals("2")) {
Utility.currencyTXT(holder.nominal, singleItem.getJumlah(), mContext);
holder.text.setText(singleItem.getType()+" "+singleItem.getBank());
holder.text.setTextColor(mContext.getResources().getColor(R.color.gray));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.gray));
holder.background.setColorFilter(mContext.getResources().getColor(R.color.gray));
holder.keterangan.setText("Dibatalkan");
} else if (singleItem.getType().equals("topup") && singleItem.getStatus().equals("0")) {
Utility.currencyTXT(holder.nominal, singleItem.getJumlah(), mContext);
holder.text.setText(singleItem.getType()+" "+singleItem.getBank());
holder.background.setColorFilter(mContext.getResources().getColor(R.color.yellow));
holder.text.setTextColor(mContext.getResources().getColor(R.color.yellow));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.yellow));
holder.keterangan.setText("Pending");
} else if (singleItem.getType().equals("Order+")) {
holder.text.setText("Order " + singleItem.getBank());
Utility.currencyTXT(holder.nominal, singleItem.getJumlah(), mContext);
holder.text.setTextColor(mContext.getResources().getColor(R.color.green));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.green));
holder.background.setColorFilter(mContext.getResources().getColor(R.color.green));
holder.keterangan.setText("Saldo Masuk");
} else {
holder.background.setColorFilter(mContext.getResources().getColor(R.color.yellow));
holder.text.setText(singleItem.getType()+" "+singleItem.getBank());
holder.text.setTextColor(mContext.getResources().getColor(R.color.yellow));
holder.nominal.setTextColor(mContext.getResources().getColor(R.color.yellow));
Utility.currencyTXT(holder.nominal, singleItem.getJumlah(), mContext);
holder.keterangan.setText("Pending");
}
Date myDate = null;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm", Locale.US);
try {
myDate = dateFormat.parse(singleItem.getWaktu());
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat timeFormat = new SimpleDateFormat("dd MMM yyyy", Locale.US);
String finalDate = timeFormat.format(Objects.requireNonNull(myDate));
holder.tanggal.setText(finalDate);
}
@Override
public int getItemCount() {
return (null != dataList ? dataList.size() : 0);
}
static class ItemRowHolder extends RecyclerView.ViewHolder {
TextView text, tanggal, nominal, keterangan;
ImageView background;
ItemRowHolder(View itemView) {
super(itemView);
background = itemView.findViewById(R.id.background);
text = itemView.findViewById(R.id.text);
tanggal = itemView.findViewById(R.id.texttanggal);
nominal = itemView.findViewById(R.id.textharga);
keterangan = itemView.findViewById(R.id.textket);
}
}
}

View File

@@ -0,0 +1,35 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class AcceptRequestJson {
@SerializedName("id")
@Expose
private String id;
@SerializedName("id_transaksi")
@Expose
private String idtrans;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getIdtrans() {
return idtrans;
}
public void setIdtrans(String idtrans) {
this.idtrans = idtrans;
}
}

View File

@@ -0,0 +1,36 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class AcceptResponseJson {
@SerializedName("message")
@Expose
private String message;
@SerializedName("data")
@Expose
private String data;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}

View File

@@ -0,0 +1,52 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import id.ontime.driver.models.AllTransaksiModel;
import id.ontime.driver.models.PelangganModel;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Ourdevelops Team on 10/19/2019.
*/
public class AllTransResponseJson {
@Expose
@SerializedName("message")
private String message;
@Expose
@SerializedName("data")
private List<AllTransaksiModel> data = new ArrayList<>();
@Expose
@SerializedName("driver")
private List<PelangganModel> driver = new ArrayList<>();
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<AllTransaksiModel> getData() {
return data;
}
public void setData(List<AllTransaksiModel> data) {
this.data = data;
}
public List<PelangganModel> getDriver() {
return driver;
}
public void setDriver(List<PelangganModel> driver) {
this.driver = driver;
}
}

View File

@@ -0,0 +1,39 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import id.ontime.driver.models.BankModel;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Ourdevelops Team on 10/19/2019.
*/
public class BankResponseJson {
@Expose
@SerializedName("message")
private String message;
@Expose
@SerializedName("data")
private List<BankModel> data = new ArrayList<>();
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<BankModel> getData() {
return data;
}
public void setData(List<BankModel> data) {
this.data = data;
}
}

View File

@@ -0,0 +1,59 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class ChangePassRequestJson {
@SerializedName("no_telepon")
@Expose
private String notelepon;
@SerializedName("email")
@Expose
private String email;
@SerializedName("password")
@Expose
private String password;
@SerializedName("new_password")
@Expose
private String new_password;
public String getNotelepon() {
return notelepon;
}
public void setNotelepon(String notelepon) {
this.notelepon = notelepon;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNewPassword() {
return new_password;
}
public void setNewPassword(String new_password) {
this.new_password = new_password;
}
}

View File

@@ -0,0 +1,36 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 24/02/2019.
*/
public class DetailRequestJson {
@SerializedName("id")
@Expose
private String id;
@SerializedName("id_pelanggan")
@Expose
private String idPelanggan;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getIdPelanggan() {
return idPelanggan;
}
public void setIdPelanggan(String idPelanggan) {
this.idPelanggan = idPelanggan;
}
}

View File

@@ -0,0 +1,65 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import id.ontime.driver.models.ItemPesananModel;
import id.ontime.driver.models.PelangganModel;
import id.ontime.driver.models.TransaksiModel;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Ourdevelops Team on 10/19/2019.
*/
public class DetailTransResponseJson {
@Expose
@SerializedName("message")
private String message;
@Expose
@SerializedName("data")
private List<TransaksiModel> data = new ArrayList<>();
@Expose
@SerializedName("pelanggan")
private List<PelangganModel> pelanggan = new ArrayList<>();
@Expose
@SerializedName("item")
private List<ItemPesananModel> item = new ArrayList<>();
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<TransaksiModel> getData() {
return data;
}
public void setData(List<TransaksiModel> data) {
this.data = data;
}
public List<PelangganModel> getPelanggan() {
return pelanggan;
}
public void setPelanggan(List<PelangganModel> pelanggan) {
this.pelanggan = pelanggan;
}
public List<ItemPesananModel> getItem() {
return item;
}
public void setItem(List<ItemPesananModel> item) {
this.item = item;
}
}

View File

@@ -0,0 +1,97 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class EditKendaraanRequestJson {
@SerializedName("id")
@Expose
private String id;
@SerializedName("no_telepon")
@Expose
private String noTelepon;
@SerializedName("merek")
@Expose
private String merek;
@SerializedName("tipe")
@Expose
private String tipe;
@SerializedName("no_kendaraan")
@Expose
private String no_kendaraan;
@SerializedName("warna")
@Expose
private String warna;
@SerializedName("id_kendaraan")
@Expose
private String id_kendaraan;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getNoTelepon() {
return noTelepon;
}
public void setNoTelepon(String noTelepon) {
this.noTelepon = noTelepon;
}
public String getMerek() {
return merek;
}
public void setMerek(String merek) {
this.merek = merek;
}
public String getTipe() {
return tipe;
}
public void setTipe(String tipe) {
this.tipe = tipe;
}
public String getNo_kendaraan() {
return no_kendaraan;
}
public void setNo_kendaraan(String no_kendaraan) {
this.no_kendaraan = no_kendaraan;
}
public String getWarna() {
return warna;
}
public void setWarna(String warna) {
this.warna = warna;
}
public String getId_kendaraan() {
return id_kendaraan;
}
public void setId_kendaraan(String id_kendaraan) {
this.id_kendaraan = id_kendaraan;
}
}

View File

@@ -0,0 +1,146 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class EditprofileRequestJson {
@SerializedName("id")
@Expose
private String id;
@SerializedName("fullnama")
@Expose
private String fullNama;
@SerializedName("email")
@Expose
private String email;
@SerializedName("email_lama")
@Expose
private String emaillama;
@SerializedName("no_telepon")
@Expose
private String noTelepon;
@SerializedName("phone")
@Expose
private String phone;
@SerializedName("no_telepon_lama")
@Expose
private String phonelama;
@SerializedName("tgl_lahir")
@Expose
private String tglLahir = "-";
@SerializedName("fotodriver")
@Expose
private String fotopelanggan;
@SerializedName("fotodriver_lama")
@Expose
private String fotopelangganlama;
@SerializedName("countrycode")
@Expose
private String countrycode;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFullNama() {
return fullNama;
}
public void setFullNama(String fullNama) {
this.fullNama = fullNama;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmaillama() {
return emaillama;
}
public void setEmaillama(String emaillama) {
this.emaillama = emaillama;
}
public String getNoTelepon() {
return noTelepon;
}
public void setNoTelepon(String noTelepon) {
this.noTelepon = noTelepon;
}
public String getTglLahir() {
return tglLahir;
}
public void setTglLahir(String tglLahir) {
this.tglLahir = tglLahir;
}
public String getFotopelanggan() {
return fotopelanggan;
}
public void setFotopelanggan(String fotopelanggan) {
this.fotopelanggan = fotopelanggan;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPhonelama() {
return phonelama;
}
public void setPhonelama(String phonelama) {
this.phonelama = phonelama;
}
public String getFotopelangganlama() {
return fotopelangganlama;
}
public void setFotopelangganlama(String fotopelangganlama) {
this.fotopelangganlama = fotopelangganlama;
}
public String getCountrycode() {
return countrycode;
}
public void setCountrycode(String countrycode) {
this.countrycode = countrycode;
}
}

View File

@@ -0,0 +1,35 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class GetHomeRequestJson {
@SerializedName("id")
@Expose
private String id;
@SerializedName("no_telepon")
@Expose
private String phone;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}

View File

@@ -0,0 +1,195 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import id.ontime.driver.models.TransaksiModel;
import id.ontime.driver.models.User;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class GetHomeResponseJson {
@SerializedName("message")
@Expose
private String message;
@SerializedName("saldo")
@Expose
private String saldo;
@SerializedName("currency")
@Expose
private String currency;
@SerializedName("app_aboutus")
@Expose
private String aboutus;
@SerializedName("app_email")
@Expose
private String email;
@SerializedName("app_contact")
@Expose
private String phone;
@SerializedName("app_website")
@Expose
private String website;
@SerializedName("driver_status")
@Expose
private String driverstatus;
@SerializedName("data_transaksi")
@Expose
private List<TransaksiModel> transaksi = new ArrayList<>();
@SerializedName("data_driver")
@Expose
private List<User> datadriver = new ArrayList<>();
@SerializedName("currency_text")
@Expose
private String currency_text;
@SerializedName("mobilepulsa_username")
@Expose
private String mobilepulsausername;
@SerializedName("mobilepulsa_api_key")
@Expose
private String mobilepulsaapikey;
@SerializedName("mp_status")
@Expose
private String mpstatus;
@SerializedName("mp_active")
@Expose
private String mpactive;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getSaldo() {
return saldo;
}
public void setSaldo(String saldo) {
this.saldo = saldo;
}
public String getCurrency() {
return currency;
}
public void setCurrency(String currency) {
this.currency = currency;
}
public String getAboutus() {
return aboutus;
}
public void setAboutus(String aboutus) {
this.aboutus = aboutus;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
public String getDriverstatus() {
return driverstatus;
}
public void setDriverstatus(String driverstatus) {
this.driverstatus = driverstatus;
}
public List<TransaksiModel> getTransaksi() {
return transaksi;
}
public void setTransaksi(List<TransaksiModel> transaksi) {
this.transaksi = transaksi;
}
public void setDatadriver(List<User> datadriver) {
this.datadriver = datadriver;
}
public List<User> getDatadriver() {
return datadriver;
}
public String getCurrencytext() {
return currency_text;
}
public void setCurrencytext(String currencytext) {
this.currency_text = currencytext;
}
public String getMobilepulsausername() {
return mobilepulsausername;
}
public void setMobilepulsausername(String mobilepulsausername) {
this.mobilepulsausername = mobilepulsausername;
}
public String getMobilepulsaapikey() {
return mobilepulsaapikey;
}
public void setMobilepulsaapikey(String mobilepulsaapikey) {
this.mobilepulsaapikey = mobilepulsaapikey;
}
public String getMpstatus() {
return mpstatus;
}
public void setMpstatus(String mpstatus) {
this.mpstatus = mpstatus;
}
public String getMpactive() {
return mpactive;
}
public void setMpactive(String mpactive) {
this.mpactive = mpactive;
}
}

View File

@@ -0,0 +1,35 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class GetOnRequestJson {
@SerializedName("id")
@Expose
private String id;
@SerializedName("is_turn")
@Expose
private boolean turn;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public boolean getOn() {
return turn;
}
public void setOn(boolean turn) {
this.turn = turn;
}
}

View File

@@ -0,0 +1,40 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import id.ontime.driver.models.JobModel;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class JobResponseJson {
@SerializedName("message")
@Expose
private String message;
@SerializedName("data")
@Expose
private List<JobModel> data = new ArrayList<>();
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<JobModel> getData() {
return data;
}
public void setData(List<JobModel> data) {
this.data = data;
}
}

View File

@@ -0,0 +1,58 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class LoginRequestJson {
@SerializedName("no_telepon")
@Expose
private String notelepon;
@SerializedName("email")
@Expose
private String email;
@Expose
private String password;
@SerializedName("token")
@Expose
private String regId;
public String getNotelepon() {
return notelepon;
}
public void setNotelepon(String notelepon) {
this.notelepon = notelepon;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRegId() {
return regId;
}
public void setRegId(String regId) {
this.regId = regId;
}
}

View File

@@ -0,0 +1,40 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import id.ontime.driver.models.User;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class LoginResponseJson {
@SerializedName("message")
@Expose
private String message;
@SerializedName("data")
@Expose
private List<User> data = new ArrayList<>();
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<User> getData() {
return data;
}
public void setData(List<User> data) {
this.data = data;
}
}

View File

@@ -0,0 +1,68 @@
package id.ontime.driver.json;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
public class MobileTopUpDetailResponseModel implements Serializable {
@SerializedName("pulsa_code")
String phoneCreditCode;
@SerializedName("pulsa_op")
String phoneCreditOperator;
@SerializedName("pulsa_nominal")
String phoneCreditDescription;
@SerializedName("pulsa_price")
int phoneCreditPrice;
@SerializedName("pulsa_type")
String phoneCreditType;
@SerializedName("status")
String phoneCreditStatus;
public String getPhoneCreditCode() {
return phoneCreditCode;
}
public void setPhoneCreditCode(String phoneCreditCode) {
this.phoneCreditCode = phoneCreditCode;
}
public String getPhoneCreditOperator() {
return phoneCreditOperator;
}
public void setPhoneCreditOperator(String phoneCreditOperator) {
this.phoneCreditOperator = phoneCreditOperator;
}
public String getPhoneCreditDescription() {
return phoneCreditDescription;
}
public void setPhoneCreditDescription(String phoneCreditDescription) {
this.phoneCreditDescription = phoneCreditDescription;
}
public int getPhoneCreditPrice() {
return phoneCreditPrice;
}
public void setPhoneCreditPrice(int phoneCreditPrice) {
this.phoneCreditPrice = phoneCreditPrice;
}
public String getPhoneCreditType() {
return phoneCreditType;
}
public void setPhoneCreditType(String phoneCreditType) {
this.phoneCreditType = phoneCreditType;
}
public String getPhoneCreditStatus() {
return phoneCreditStatus;
}
public void setPhoneCreditStatus(String phoneCreditStatus) {
this.phoneCreditStatus = phoneCreditStatus;
}
}

View File

@@ -0,0 +1,79 @@
package id.ontime.driver.json;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
public class MobileTopUpRequestModel implements Serializable {
@SerializedName("commands")
String command;
@SerializedName("username")
String username;
@SerializedName("sign")
String sign;
@SerializedName("status")
String status;
@SerializedName("ref_id")
String orderId;
@SerializedName("hp")
String destinationPhoneNumber;
@SerializedName("pulsa_code")
String phoneCreditCode;
public String getCommand() {
return command;
}
public void setCommand(String command) {
this.command = command;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getOrderId() {
return orderId;
}
public void setOrderId(String orderId) {
this.orderId = orderId;
}
public String getDestinationPhoneNumber() {
return destinationPhoneNumber;
}
public void setDestinationPhoneNumber(String destinationPhoneNumber) {
this.destinationPhoneNumber = destinationPhoneNumber;
}
public String getPhoneCreditCode() {
return phoneCreditCode;
}
public void setPhoneCreditCode(String phoneCreditCode) {
this.phoneCreditCode = phoneCreditCode;
}
}

View File

@@ -0,0 +1,19 @@
package id.ontime.driver.json;
import com.google.gson.annotations.SerializedName;
import java.io.Serializable;
import java.util.List;
public class MobileTopUpResponseModel implements Serializable {
@SerializedName("data")
List<MobileTopUpDetailResponseModel> detailResponse;
public List<MobileTopUpDetailResponseModel> getDetailResponse() {
return detailResponse;
}
public void setDetailResponse(List<MobileTopUpDetailResponseModel> detailResponse) {
this.detailResponse = detailResponse;
}
}

View File

@@ -0,0 +1,23 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class PrivacyRequestJson {
@SerializedName("privacy")
@Expose
private String privacy;
public String getPrivacy() {
return privacy;
}
public void setPrivacy(String privacy) {
this.privacy = privacy;
}
}

View File

@@ -0,0 +1,39 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import id.ontime.driver.models.SettingsModel;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class PrivacyResponseJson {
@SerializedName("message")
@Expose
private String message;
@SerializedName("data")
@Expose
private List<SettingsModel> data = new ArrayList<>();
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<SettingsModel> getData() {
return data;
}
public void setData(List<SettingsModel> data) {
this.data = data;
}
}

View File

@@ -0,0 +1,37 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import id.ontime.driver.models.RegionModel;
import java.util.ArrayList;
import java.util.List;
public class RegionResponseJson {
@SerializedName("message")
@Expose
private String message;
@SerializedName("data")
@Expose
private List<RegionModel> data = new ArrayList<>();
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<RegionModel> getData() {
return data;
}
public void setData(List<RegionModel> data) {
this.data = data;
}
}

View File

@@ -0,0 +1,286 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class RegisterRequestJson {
@SerializedName("nama_driver")
@Expose
private String namadriver;
@SerializedName("no_ktp")
@Expose
private String noktp;
@SerializedName("tgl_lahir")
@Expose
private String tglLahir = "-";
@SerializedName("exp_stnk")
@Expose
private String expStnk = "-";
@SerializedName("no_telepon")
@Expose
private String noTelepon;
@SerializedName("phone")
@Expose
private String phone;
@SerializedName("email")
@Expose
private String email;
@SerializedName("foto")
@Expose
private String foto;
@SerializedName("job")
@Expose
private String job;
@SerializedName("partner_region")
@Expose
private String partner_region;
@SerializedName("gender")
@Expose
private String gender;
@SerializedName("alamat_driver")
@Expose
private String alamat;
@SerializedName("token")
@Expose
private String token;
@SerializedName("merek")
@Expose
private String merek;
@SerializedName("tipe")
@Expose
private String tipe;
@SerializedName("nomor_kendaraan")
@Expose
private String nomorkendaraan;
@SerializedName("warna")
@Expose
private String warna;
@SerializedName("foto_ktp")
@Expose
private String fotoktp;
@SerializedName("foto_sim")
@Expose
private String fotosim;
@SerializedName("foto_stnk")
@Expose
private String fotostnk;
@SerializedName("id_sim")
@Expose
private String idsim;
@SerializedName("checked")
@Expose
private String checked;
@SerializedName("countrycode")
@Expose
private String countrycode;
public String getNamadriver() {
return namadriver;
}
public void setNamadriver(String namadriver) {
this.namadriver = namadriver;
}
public String getNoktp() {
return noktp;
}
public void setNoktp(String noktp) {
this.noktp = noktp;
}
public String getTglLahir() {
return tglLahir;
}
public void setTglLahir(String tglLahir) {
this.tglLahir = tglLahir;
}
public String getExpStnk() {
return expStnk;
}
public void setExpStnk(String expStnk) {
this.expStnk = expStnk;
}
public String getNoTelepon() {
return noTelepon;
}
public void setNoTelepon(String noTelepon) {
this.noTelepon = noTelepon;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFoto() {
return foto;
}
public void setFoto(String foto) {
this.foto = foto;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public String getPartner_region() { return partner_region; }
public void setPartner_region(String partner_region) { this.partner_region = partner_region; }
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAlamat() {
return alamat;
}
public void setAlamat(String alamat) {
this.alamat = alamat;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public String getMerek() {
return merek;
}
public void setMerek(String merek) {
this.merek = merek;
}
public String getTipe() {
return tipe;
}
public void setTipe(String tipe) {
this.tipe = tipe;
}
public String getNomorkendaraan() {
return nomorkendaraan;
}
public void setNomorkendaraan(String nomorkendaraan) {
this.nomorkendaraan = nomorkendaraan;
}
public String getWarna() {
return warna;
}
public void setWarna(String warna) {
this.warna = warna;
}
public String getFotoktp() {
return fotoktp;
}
public void setFotoktp(String fotoktp) {
this.fotoktp = fotoktp;
}
public String getFotosim() {
return fotosim;
}
public void setFotosim(String fotosim) {
this.fotosim = fotosim;
}
public String getFotostnk() {
return fotosim;
}
public void setFotostnk(String fotostnk) {
this.fotostnk = fotostnk;
}
public String getIdsim() {
return idsim;
}
public void setIdsim(String idsim) {
this.idsim = idsim;
}
public String getChecked() {
return checked;
}
public void setChecked(String checked) {
this.checked = checked;
}
public String getCountrycode() {
return countrycode;
}
public void setCountrycode(String countrycode) {
this.countrycode = countrycode;
}
}

View File

@@ -0,0 +1,35 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class RegisterResponseJson {
@SerializedName("message")
@Expose
private String message;
@SerializedName("data")
@Expose
private String data;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}

View File

@@ -0,0 +1,36 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class ResponseJson {
@SerializedName("message")
@Expose
private String message;
@SerializedName("data")
@Expose
private String data;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}

View File

@@ -0,0 +1,121 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class TopupRequestJson {
@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("email")
@Expose
private String email;
@SerializedName("card_num")
@Expose
private String cardnum;
@SerializedName("cvc")
@Expose
private String cvc;
@SerializedName("expired")
@Expose
private String expired;
@SerializedName("product")
@Expose
private String product;
@SerializedName("number")
@Expose
private String number;
@SerializedName("price")
@Expose
private String price;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getCardnum() {
return cardnum;
}
public void setCardnum(String cardnum) {
this.cardnum = cardnum;
}
public String getCvc() {
return cvc;
}
public void setCvc(String cvc) {
this.cvc = cvc;
}
public String getExpired() {
return expired;
}
public void setExpired(String expired) {
this.expired = expired;
}
public String getProduct() {
return product;
}
public void setProduct(String product) {
this.product = product;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
}

View File

@@ -0,0 +1,51 @@
package id.ontime.driver.json;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import id.ontime.driver.models.User;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Ourdevelops Team on 10/13/2019.
*/
public class TopupResponseJson {
@SerializedName("message")
@Expose
private String message;
@SerializedName("status")
@Expose
private String status;
@SerializedName("data")
@Expose
private List<User> data = new ArrayList<>();
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<User> getData() {
return data;
}
public void setData(List<User> data) {
this.data = data;
}
}

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