diff --git a/CHANGELOG.md b/CHANGELOG.md index 86784f3..0813dbf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## 2.3.0 - 2018-12-01 +### Changed +- Added image support to user +- Added support to define if customer can update session destination +- Minor improvements + ## 2.2.0 - 2018-09-10 ### Changed - Added email address to user diff --git a/README.md b/README.md index 12fb2bc..b46f334 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ ## Requirements -`PathshareSDK` for Android supports Android 5.x, 6.x, 7.x and 8.x. +`PathshareSDK` for Android supports Android 5.x, 6.x, 7.x, 8.x and 9.x. ## Installation @@ -95,7 +95,7 @@ Before creating a session, you need to save a user: ###### Java ```java -Pathshare.client().saveUser("Candice", "me@email.com", "+12345678901", UserType.DRIVER, new ResponseListener() { +Pathshare.client().saveUser("Candice", "me@email.com", "+12345678901", UserType.DRIVER, getResources().getDrawable(R.drawable.face, null), new ResponseListener() { @Override public void onSuccess() { // ... @@ -110,7 +110,7 @@ Pathshare.client().saveUser("Candice", "me@email.com", "+12345678901", UserType. ###### Kotlin ```kotlin -Pathshare.client().saveUser("SDK User Android", "me@email.com", "+12345678901", UserType.DRIVER, object: ResponseListener { +Pathshare.client().saveUser("SDK User Android", "me@email.com", "+12345678901", UserType.DRIVER, resources.getDrawable(R.drawable.face, null), object: ResponseListener { override fun onSuccess() { // ... } @@ -122,6 +122,8 @@ Pathshare.client().saveUser("SDK User Android", "me@email.com", "+12345678901", ``` The email address can be `null`. +Use the same method Pathshare.client().saveUser() to create or update the user. + There are different types of users for specific industries: User Types | Description diff --git a/android-example-app/app-kotlin/build.gradle b/android-example-app/app-kotlin/build.gradle index bc16970..a8c5e62 100644 --- a/android-example-app/app-kotlin/build.gradle +++ b/android-example-app/app-kotlin/build.gradle @@ -1,6 +1,7 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' + android { compileSdkVersion 27 @@ -8,12 +9,21 @@ android { applicationId "ch.freshbits.pathshare.example" minSdkVersion 21 targetSdkVersion 27 - versionCode 2_2_0 - versionName "2.2.0" + versionCode 2_3_0 + versionName "2.3.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } + packagingOptions { + exclude 'META-INF/DEPENDENCIES' + } + + compileOptions { + sourceCompatibility 1.8 + targetCompatibility 1.8 + } + lintOptions { abortOnError false } @@ -41,7 +51,7 @@ dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'com.android.support:appcompat-v7:27.1.1' - implementation 'ch.freshbits.pathshare.sdk:pathshare-sdk:2.2.0' + implementation 'ch.freshbits.pathshare.sdk:pathshare-sdk:2.3.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation 'com.android.support:design:27.1.1' } diff --git a/android-example-app/app-kotlin/src/main/java/ch/freshbits/pathshare/example/MainActivity.kt b/android-example-app/app-kotlin/src/main/java/ch/freshbits/pathshare/example/MainActivity.kt index 1b79653..deea10f 100644 --- a/android-example-app/app-kotlin/src/main/java/ch/freshbits/pathshare/example/MainActivity.kt +++ b/android-example-app/app-kotlin/src/main/java/ch/freshbits/pathshare/example/MainActivity.kt @@ -47,7 +47,13 @@ class MainActivity : AppCompatActivity() { createButton = findViewById(R.id.create_session) as Button createButton.isEnabled = true createButton.setOnClickListener { - Pathshare.client().saveUser("SDK User Android", "me@email.com", "+12345678901", UserType.DRIVER, object: ResponseListener { + Pathshare.client().saveUser( + "SDK User Android", + "me@email.com", + "+12345678901", + UserType.TECHNICIAN, + resources.getDrawable(R.drawable.face, null), + object: ResponseListener { override fun onSuccess() { Log.d("User", "Success") createSession() @@ -150,7 +156,13 @@ class MainActivity : AppCompatActivity() { private fun inviteCustomer() { if (session.isExpired) return - session.inviteUser("Customer", UserType.MOTORIST, "customer@me.com", "+12345678901", object: InvitationResponseListener { + session.inviteUser( + "Customer", + UserType.MOTORIST, + "customer@me.com", + "+12345678901", + true, + object: InvitationResponseListener { override fun onSuccess(url: URL?) { Log.d("Invite", "Success") Log.d("URL", url.toString()) diff --git a/android-example-app/app-kotlin/src/main/res/drawable/face.png b/android-example-app/app-kotlin/src/main/res/drawable/face.png new file mode 100644 index 0000000..5b5095a Binary files /dev/null and b/android-example-app/app-kotlin/src/main/res/drawable/face.png differ diff --git a/android-example-app/app/build.gradle b/android-example-app/app/build.gradle index d3c9308..afdcada 100644 --- a/android-example-app/app/build.gradle +++ b/android-example-app/app/build.gradle @@ -2,14 +2,22 @@ apply plugin: 'com.android.application' android { compileSdkVersion 27 - buildToolsVersion "27.0.3" defaultConfig { applicationId "ch.freshbits.pathshare.example" minSdkVersion 25 targetSdkVersion 27 - versionCode 2_2_0 - versionName "2.2.0" + versionCode 2_3_0 + versionName "2.3.0" + } + + packagingOptions { + exclude 'META-INF/DEPENDENCIES' + } + + compileOptions { + sourceCompatibility 1.8 + targetCompatibility 1.8 } lintOptions { @@ -36,9 +44,9 @@ repositories { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - testCompile 'junit:junit:4.12' + implementation fileTree(dir: 'libs', include: ['*.jar']) + testImplementation 'junit:junit:4.12' //noinspection GradleCompatible - compile 'com.android.support:appcompat-v7:27.1.1' - compile 'ch.freshbits.pathshare.sdk:pathshare-sdk:2.2.0' + implementation 'com.android.support:appcompat-v7:27.1.1' + implementation 'ch.freshbits.pathshare.sdk:pathshare-sdk:2.3.0' } diff --git a/android-example-app/app/src/main/java/ch/freshbits/pathshare/example/MainActivity.java b/android-example-app/app/src/main/java/ch/freshbits/pathshare/example/MainActivity.java index 85b8b43..ea40539 100644 --- a/android-example-app/app/src/main/java/ch/freshbits/pathshare/example/MainActivity.java +++ b/android-example-app/app/src/main/java/ch/freshbits/pathshare/example/MainActivity.java @@ -50,58 +50,44 @@ protected void onCreate(Bundle savedInstanceState) { } private void initializeCreateButton() { - setCreateButton((Button) findViewById(R.id.create_session)); + setCreateButton(findViewById(R.id.create_session)); getCreateButton().setEnabled(true); - getCreateButton().setOnClickListener(new View.OnClickListener() { + getCreateButton().setOnClickListener(view -> Pathshare.client().saveUser( + "SDK User", + "me@email.com", + "+12345678901", + UserType.TECHNICIAN, + getResources().getDrawable(R.drawable.face, null), + new ResponseListener() { @Override - public void onClick(View view) { - Pathshare.client().saveUser("SDK User", "me@email.com", "+12345678901", UserType.DRIVER, new ResponseListener() { - @Override - public void onSuccess() { - Log.d("User", "Success"); - createSession(); - } - - @Override - public void onError() { - Log.e("User", "Error"); - } - }); + public void onSuccess() { + Log.d("User", "Success"); + createSession(); } - }); + + @Override + public void onError() { + Log.e("User", "Error"); + } + })); } private void initializeJoinButton() { - setJoinButton((Button) findViewById(R.id.join_session)); + setJoinButton(findViewById(R.id.join_session)); getJoinButton().setEnabled(false); - getJoinButton().setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - joinSession(); - } - }); + getJoinButton().setOnClickListener(view -> joinSession()); } private void initializeInviteButton() { - setInviteButton((Button) findViewById(R.id.invite_customer)); + setInviteButton(findViewById(R.id.invite_customer)); getInviteButton().setEnabled(false); - getInviteButton().setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - inviteCustomer(); - } - }); + getInviteButton().setOnClickListener(view -> inviteCustomer()); } private void initializeLeaveButton() { - setLeaveButton((Button) findViewById(R.id.leave_session)); + setLeaveButton(findViewById(R.id.leave_session)); getLeaveButton().setEnabled(false); - getLeaveButton().setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - leaveSession(); - } - }); + getLeaveButton().setOnClickListener(view -> leaveSession()); } private void createSession() { @@ -118,12 +104,7 @@ private void createSession() { .setDestination(destination) .setExpirationDate(expirationDate) .setName("simple session") - .setSessionExpirationListener(new SessionExpirationListener() { - @Override - public void onExpiration() { - handleSessionExpiration(); - } - }) + .setSessionExpirationListener(() -> handleSessionExpiration()) .build(); getSession().save(new ResponseListener() { @@ -161,7 +142,13 @@ private void joinSession() { private void inviteCustomer() { if (getSession().isExpired()) { return; } - getSession().inviteUser("Customer", UserType.MOTORIST, "customer@me.com", "+12345678901", new InvitationResponseListener() { + getSession().inviteUser( + "Customer", + UserType.MOTORIST, + "customer@me.com", + "+12345678901", + true, + new InvitationResponseListener() { @Override public void onSuccess(URL url) { Log.d("Invite", "Success"); @@ -260,15 +247,12 @@ private void deleteSessionIdentifier() { } private void handleSessionExpiration() { - this.runOnUiThread(new Runnable() { - @Override - public void run() { - getInviteButton().setEnabled(false); - getLeaveButton().setEnabled(false); - getCreateButton().setEnabled(true); - deleteSessionIdentifier(); - showToast("Session expired."); - } + this.runOnUiThread(() -> { + getInviteButton().setEnabled(false); + getLeaveButton().setEnabled(false); + getCreateButton().setEnabled(true); + deleteSessionIdentifier(); + showToast("Session expired."); }); } @@ -330,12 +314,7 @@ public void onSuccess(Session session) { } else { Log.d("Session", "Name: " + session.getName()); - session.setSessionExpirationListener(new SessionExpirationListener() { - @Override - public void onExpiration() { - handleSessionExpiration(); - } - }); + session.setSessionExpirationListener(() -> handleSessionExpiration()); setSession(session); diff --git a/android-example-app/app/src/main/res/drawable/face.png b/android-example-app/app/src/main/res/drawable/face.png new file mode 100644 index 0000000..5b5095a Binary files /dev/null and b/android-example-app/app/src/main/res/drawable/face.png differ diff --git a/android-example-app/build.gradle b/android-example-app/build.gradle index d8db1fb..05492e4 100644 --- a/android-example-app/build.gradle +++ b/android-example-app/build.gradle @@ -8,7 +8,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.2.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" diff --git a/android-example-app/gradle/wrapper/gradle-wrapper.properties b/android-example-app/gradle/wrapper/gradle-wrapper.properties index 1a84058..0d33811 100644 --- a/android-example-app/gradle/wrapper/gradle-wrapper.properties +++ b/android-example-app/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon May 21 19:09:15 CEST 2018 +#Sat Dec 01 00:29:09 CET 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip