From cd16143084158c2c7b55825cf4e893e7b9f83ba3 Mon Sep 17 00:00:00 2001 From: Ty Smith Date: Tue, 14 Feb 2017 18:02:46 -0800 Subject: [PATCH] [Gradle Release Plugin] - pre tag commit: 'v0.6.0'. --- CHANGELOG.md | 14 ++- README.md | 8 +- build.gradle | 2 +- core-android/build.gradle | 12 +-- .../android/net/http/AndroidHttpClient.java | 32 ------ .../core/auth/AuthenticationError.java | 5 + .../sdk/android/core/auth/LoginActivity.java | 2 +- .../sdk/android/core/auth/LoginManager.java | 9 +- .../sdk/android/core/auth/SsoDeeplink.java | 46 ++++---- .../sdk/android/core/utils/AppProtocol.java | 35 ++++-- .../uber/sdk/android/core/UberButtonTest.java | 102 +++++++----------- .../android/core/auth/LoginButtonTest.java | 37 +++---- .../android/core/auth/LoginManagerTest.java | 19 ++-- .../core/auth/OAuthWebViewClientTest.java | 18 ---- .../android/core/auth/SsoDeeplinkTest.java | 48 ++------- .../android/core/utils/AppProtocolTest.java | 15 +-- gradle.properties | 2 +- gradle/wrapper/gradle-wrapper.properties | 4 +- rides-android/build.gradle | 4 +- .../sdk/android/rides/RequestDeeplink.java | 9 +- .../android/rides/RideRequestActivity.java | 2 +- .../sdk/android/rides/RideRequestButton.java | 2 +- .../sdk/android/rides/RideRequestView.java | 4 +- .../android/net/http/AndroidHttpClient.java | 32 ------ .../android/rides/RequestDeeplinkTest.java | 5 +- .../rides/RideRequestActivityTest.java | 4 +- .../android/rides/RideRequestViewTest.java | 24 +---- .../android/rides/RobolectricTestBase.java | 4 +- .../RideRequestButtonControllerTest.java | 6 +- .../resources/__files/prices_estimate.json | 32 +++--- samples/login-sample/build.gradle | 2 +- samples/request-button-sample/build.gradle | 2 +- .../android/rides/samples/SampleActivity.java | 4 - .../sdk/android/core/RobolectricTestBase.java | 4 +- .../uber/sdk/android/core/SdkPreferences.java | 2 +- 35 files changed, 209 insertions(+), 343 deletions(-) delete mode 100644 core-android/src/main/java/android/net/http/AndroidHttpClient.java delete mode 100644 rides-android/src/test/java/android/net/http/AndroidHttpClient.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b67d39e..217b523e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ -v0.5.5 - TBD ------------- +v0.6.0 - 2/14/2017 +------------------- +### Fixed +- [Issue #71](https://github.com/uber/rides-android-sdk/issues/71) LoginManager breaks when used with Rides SDK 0.6.0 +- [Issue #65](https://github.com/uber/rides-android-sdk/issues/65) Empty AndroidHttpClient get compiled when using core-android 0.5.4 leading to unresolved references to actual methods of AndroidHttpClient + +### Added +- Updated to match API 1.2 changes + +### Breaking +- Removed Region (China) support v0.5.4 - 9/29/2016 ------------------ @@ -13,6 +22,7 @@ v0.5.4 - 9/29/2016 - [Issue #48](https://github.com/uber/rides-android-sdk/issues/48) Typo in Readme.md - [Issue #54](https://github.com/uber/rides-android-sdk/issues/54) log4j lib still exists in 0.5.3 causing Proguard failing + v0.5.3 - 8/12/2016 ------------------ ### Fixed diff --git a/README.md b/README.md index c71d2da3..1122e83e 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ To use the Uber Rides Android SDK, add the compile dependency with the latest ve Add the Uber Rides Android SDK to your `build.gradle`: ```gradle dependencies { - compile 'com.uber.sdk:rides-android:0.5.4' + compile 'com.uber.sdk:rides-android:0.6.0' } ``` @@ -31,7 +31,7 @@ In the `pom.xml` file: com.uber.sdk rides-android - 0.5.4 + 0.6.0 ``` @@ -319,7 +319,7 @@ service.getUserProfile().enqueue(new Callback() { ## Sample Apps -Sample apps can be found in the `samples` folder. Alternatively, you can also download a sample from the [releases page](https://github.com/uber/rides-android-sdk/releases/tag/v0.5.4). +Sample apps can be found in the `samples` folder. Alternatively, you can also download a sample from the [releases page](https://github.com/uber/rides-android-sdk/releases/tag/v0.6.0). The Sample apps require configuration parameters to interact with the Uber API, these include the client id, redirect uri, and server token. They are provided on the [Uber developer dashboard](https://developer.uber.com/dashboard). @@ -349,6 +349,4 @@ As the Uber Android SDK get closer to a 1.0 release, the API's will become more We :heart: contributions. Found a bug or looking for a new feature? Open an issue and we'll respond as fast as we can. Or, better yet, implement it yourself and open a pull request! We ask that you include tests to show the bug was fixed or the feature works as expected. -**Note:** All contributors also need to fill out the [Uber Contributor License Agreement](http://t.uber.com/cla) before we can merge in any of your changes. - ## MIT Licensed diff --git a/build.gradle b/build.gradle index 10c8b8de..b19e2fcd 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.android.tools.build:gradle:2.2.3' classpath 'net.researchgate:gradle-release:2.3.5' classpath 'co.riiid:gradle-github-plugin:0.4.2' classpath 'net.saliman:gradle-cobertura-plugin:2.3.1' diff --git a/core-android/build.gradle b/core-android/build.gradle index 34179451..2f2d8935 100644 --- a/core-android/build.gradle +++ b/core-android/build.gradle @@ -10,7 +10,7 @@ buildscript { } dependencies { - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' } } @@ -129,12 +129,6 @@ uploadArchives { name 'Ty Smith' email 'tys@uber.com' } - - developer { - id 'yhartanto' - name 'Yohan Hartanto' - email 'yohan@uber.com' - } } } } @@ -153,7 +147,7 @@ cobertura { } dependencies { - compile ('com.uber.sdk:rides:0.5.2') { + compile ('com.uber.sdk:rides:0.6.0') { //Do not need Google OAuth based logic in Android exclude group: 'org.slf4j', module: 'slf4j-log4j12' exclude group: 'com.google.oauth-client', module: 'google-oauth-client' @@ -171,7 +165,7 @@ dependencies { testCompile 'com.google.http-client:google-http-client-jackson2:1.19.0' testCompile 'org.mockito:mockito-core:1.10.19' testCompile 'org.assertj:assertj-core:1.7.1' - testCompile 'org.robolectric:robolectric:3.0' + testCompile 'org.robolectric:robolectric:3.2.2' //Needed for Cobertura checks because of above exclude testCompile 'com.google.http-client:google-http-client-jackson2:1.19.0' diff --git a/core-android/src/main/java/android/net/http/AndroidHttpClient.java b/core-android/src/main/java/android/net/http/AndroidHttpClient.java deleted file mode 100644 index 4d44478a..00000000 --- a/core-android/src/main/java/android/net/http/AndroidHttpClient.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2016 Uber Technologies, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -package android.net.http; - -/** - * Apache HTTP Client was deprecated and is no longer part of compile classpath. - * Robolectic still links to it so an empty class is needed for compiling purposes. - * - * See Robolectric issue for - * details. - */ -public class AndroidHttpClient { } diff --git a/core-android/src/main/java/com/uber/sdk/android/core/auth/AuthenticationError.java b/core-android/src/main/java/com/uber/sdk/android/core/auth/AuthenticationError.java index 2b27f7b0..e7a68a31 100644 --- a/core-android/src/main/java/com/uber/sdk/android/core/auth/AuthenticationError.java +++ b/core-android/src/main/java/com/uber/sdk/android/core/auth/AuthenticationError.java @@ -31,6 +31,11 @@ */ public enum AuthenticationError { + /** + * User cancelled flow + */ + CANCELLED, + /** * There was a connectivity error while trying to load. */ diff --git a/core-android/src/main/java/com/uber/sdk/android/core/auth/LoginActivity.java b/core-android/src/main/java/com/uber/sdk/android/core/auth/LoginActivity.java index 2f75ad01..3b78bfd9 100644 --- a/core-android/src/main/java/com/uber/sdk/android/core/auth/LoginActivity.java +++ b/core-android/src/main/java/com/uber/sdk/android/core/auth/LoginActivity.java @@ -177,7 +177,7 @@ String buildUrl( Uri.Builder builder = new Uri.Builder(); builder.scheme(HTTPS) - .authority(ENDPOINT + "." + configuration.getEndpointRegion().domain) + .authority(ENDPOINT + "." + configuration.getEndpointRegion().getDomain()) .appendEncodedPath(PATH) .appendQueryParameter(CLIENT_ID_PARAM, configuration.getClientId()) .appendQueryParameter(REDIRECT_PARAM, redirectUri) diff --git a/core-android/src/main/java/com/uber/sdk/android/core/auth/LoginManager.java b/core-android/src/main/java/com/uber/sdk/android/core/auth/LoginManager.java index abfa9b23..cfa61285 100644 --- a/core-android/src/main/java/com/uber/sdk/android/core/auth/LoginManager.java +++ b/core-android/src/main/java/com/uber/sdk/android/core/auth/LoginManager.java @@ -84,7 +84,7 @@ public class LoginManager { static final int REQUEST_CODE_LOGIN_DEFAULT = 1001; - private static final String USER_AGENT = "core-android-v0.5.4-login_manager"; + private static final String USER_AGENT = "core-android-v0.6.0-login_manager"; private final AccessTokenManager accessTokenManager; private final LoginCallback callback; @@ -144,7 +144,6 @@ public void login(@NonNull Activity activity) { SsoDeeplink ssoDeeplink = new SsoDeeplink.Builder(activity) .clientId(sessionConfiguration.getClientId()) - .region(sessionConfiguration.getEndpointRegion()) .scopes(sessionConfiguration.getScopes()) .customScopes(sessionConfiguration.getCustomScopes()) .activityRequestCode(requestCode) @@ -304,7 +303,11 @@ private void handleResultCancelled( final AuthenticationError authenticationError = (error != null) ? AuthenticationError.fromString(error) : AuthenticationError.UNKNOWN; - if (authenticationError.equals(AuthenticationError.UNAVAILABLE) && + if (authenticationError.equals(AuthenticationError.CANCELLED)) { + // User canceled login + callback.onLoginCancel(); + return; + } else if (authenticationError.equals(AuthenticationError.UNAVAILABLE) && !AuthUtils.isPrivilegeScopeRequired(sessionConfiguration.getScopes())) { loginForImplicitGrant(activity); return; diff --git a/core-android/src/main/java/com/uber/sdk/android/core/auth/SsoDeeplink.java b/core-android/src/main/java/com/uber/sdk/android/core/auth/SsoDeeplink.java index 0ebd3894..a1cc8975 100644 --- a/core-android/src/main/java/com/uber/sdk/android/core/auth/SsoDeeplink.java +++ b/core-android/src/main/java/com/uber/sdk/android/core/auth/SsoDeeplink.java @@ -35,14 +35,12 @@ import com.uber.sdk.android.core.utils.AppProtocol; import com.uber.sdk.android.core.utils.PackageManagers; import com.uber.sdk.core.auth.Scope; -import com.uber.sdk.rides.client.SessionConfiguration; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import static com.uber.sdk.android.core.UberSdk.UBER_SDK_LOG_TAG; -import static com.uber.sdk.android.core.utils.AppProtocol.UBER_PACKAGE_NAME; import static com.uber.sdk.android.core.utils.Preconditions.checkNotEmpty; import static com.uber.sdk.android.core.utils.Preconditions.checkNotNull; import static com.uber.sdk.android.core.utils.Preconditions.checkState; @@ -56,11 +54,10 @@ public class SsoDeeplink implements Deeplink { public static final int DEFAULT_REQUEST_CODE = LoginManager.REQUEST_CODE_LOGIN_DEFAULT; @VisibleForTesting - static final int MIN_VERSION_SUPPORTED = 31256; + static final int MIN_VERSION_SUPPORTED = 31302; private static final String URI_QUERY_CLIENT_ID = "client_id"; private static final String URI_QUERY_SCOPE = "scope"; - private static final String URI_QUERY_LOGIN_TYPE = "login_type"; private static final String URI_QUERY_PLATFORM = "sdk"; private static final String URI_QUERY_SDK_VERSION = "sdk_version"; private static final String URI_HOST = "connect"; @@ -69,7 +66,6 @@ public class SsoDeeplink implements Deeplink { private final String clientId; private final Collection requestedScopes; private final Collection requestedCustomScopes; - private final SessionConfiguration.EndpointRegion region; private final int requestCode; AppProtocol appProtocol; @@ -77,11 +73,9 @@ public class SsoDeeplink implements Deeplink { SsoDeeplink( @NonNull Activity activity, @NonNull String clientId, - @NonNull SessionConfiguration.EndpointRegion region, @NonNull Collection requestedScopes, @NonNull Collection requestedCustomScopes, int requestCode) { - this.region = region; this.activity = activity; this.clientId = clientId; this.requestCode = requestCode; @@ -101,10 +95,17 @@ public void execute() { checkState(isSupported(), "Single sign on is not supported on the device. " + "Please install or update to the latest version of Uber app."); - final Uri deepLinkUri = createSsoUri(); + Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setPackage(AppProtocol.UBER_PACKAGE_NAME); + final Uri deepLinkUri = createSsoUri(); intent.setData(deepLinkUri); + + for (String installedPackage : AppProtocol.UBER_PACKAGE_NAMES) { + if (PackageManagers.isPackageAvailable(activity, installedPackage)) { + intent.setPackage(installedPackage); + break; + } + } activity.startActivityForResult(intent, requestCode); } @@ -118,7 +119,6 @@ private Uri createSsoUri() { .authority(URI_HOST) .appendQueryParameter(URI_QUERY_CLIENT_ID, clientId) .appendQueryParameter(URI_QUERY_SCOPE, scopes) - .appendQueryParameter(URI_QUERY_LOGIN_TYPE, region.name()) .appendQueryParameter(URI_QUERY_PLATFORM, AppProtocol.PLATFORM) .appendQueryParameter(URI_QUERY_SDK_VERSION, BuildConfig.VERSION_NAME) .build(); @@ -131,10 +131,18 @@ private Uri createSsoUri() { */ @Override public boolean isSupported() { - final PackageInfo packageInfo = PackageManagers.getPackageInfo(activity, UBER_PACKAGE_NAME); + + PackageInfo packageInfo = null; + for (String installedPackage : AppProtocol.UBER_PACKAGE_NAMES) { + if (PackageManagers.isPackageAvailable(activity, installedPackage)) { + packageInfo = PackageManagers.getPackageInfo(activity, installedPackage); + break; + } + } + return (packageInfo != null) - && (packageInfo.versionCode >= MIN_VERSION_SUPPORTED) && - appProtocol.validateSignature(activity, UBER_PACKAGE_NAME); + && appProtocol.validateMinimumVersion(activity, packageInfo, MIN_VERSION_SUPPORTED) + && appProtocol.validateSignature(activity, packageInfo.packageName); } public static class Builder { @@ -144,7 +152,6 @@ public static class Builder { private String clientId; private Collection requestedScopes; private Collection requestedCustomScopes; - private SessionConfiguration.EndpointRegion region; private int requestCode = DEFAULT_REQUEST_CODE; public Builder(@NonNull Activity activity) { @@ -171,11 +178,6 @@ public Builder customScopes(@NonNull Collection customScopes) { return this; } - public Builder region(@NonNull SessionConfiguration.EndpointRegion region) { - this.region = region; - return this; - } - public Builder activityRequestCode(int requestCode) { this.requestCode = requestCode; return this; @@ -186,10 +188,6 @@ public SsoDeeplink build() { checkNotEmpty(requestedScopes, "Scopes must be set."); - if (region == null) { - region = SessionConfiguration.EndpointRegion.WORLD; - } - if (requestedCustomScopes == null) { requestedCustomScopes = new ArrayList<>(); } @@ -197,7 +195,7 @@ public SsoDeeplink build() { if (requestCode == DEFAULT_REQUEST_CODE) { Log.i(UBER_SDK_LOG_TAG, "Request code is not set, using default request code"); } - return new SsoDeeplink(activity, clientId, region, requestedScopes, requestedCustomScopes, requestCode); + return new SsoDeeplink(activity, clientId, requestedScopes, requestedCustomScopes, requestCode); } } } diff --git a/core-android/src/main/java/com/uber/sdk/android/core/utils/AppProtocol.java b/core-android/src/main/java/com/uber/sdk/android/core/utils/AppProtocol.java index 0359d94b..61f8c1e4 100644 --- a/core-android/src/main/java/com/uber/sdk/android/core/utils/AppProtocol.java +++ b/core-android/src/main/java/com/uber/sdk/android/core/utils/AppProtocol.java @@ -17,7 +17,8 @@ import javax.annotation.Nullable; public class AppProtocol { - public static final String UBER_PACKAGE_NAME = "com.ubercab"; + public static final String[] UBER_PACKAGE_NAMES = + {"com.ubercab", "com.ubercab.presidio.app", "com.ubercab.presidio.exo"}; public static final String DEEPLINK_SCHEME = "uber"; public static final String PLATFORM = "android"; @@ -31,13 +32,24 @@ private static HashSet buildAppSignatureHashes() { set.add(UBER_RIDER_HASH); return set; } + + /** + * Validates minimum version of app required or returns true if in debug. + */ + public boolean validateMinimumVersion(Context context, PackageInfo packageInfo, int minimumVersion) { + if (isDebug(context)) { + return true; + } + + return packageInfo.versionCode >= minimumVersion; + } + + /** + * Validates the app signature required or returns true if in debug. + */ @SuppressLint("PackageManagerGetSignatures") public boolean validateSignature(Context context, String packageName) { - String brand = Build.BRAND; - int applicationFlags = context.getApplicationInfo().flags; - if ((brand.startsWith("Android") || brand.startsWith("generic")) && - (applicationFlags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { - // We are debugging on an emulator, don't validate package signature. + if (isDebug(context)) { return true; } @@ -96,4 +108,15 @@ public String getAppSignature(@NonNull Context context) { MessageDigest getSha1MessageDigest() throws NoSuchAlgorithmException { return MessageDigest.getInstance(HASH_ALGORITHM_SHA1); } + + private boolean isDebug(Context context) { + String brand = Build.BRAND; + int applicationFlags = context.getApplicationInfo().flags; + if ((brand.startsWith("Android") || brand.startsWith("generic")) && + (applicationFlags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { + // We are debugging on an emulator, don't validate package signature. + return true; + } + return false; + } } diff --git a/core-android/src/test/java/com/uber/sdk/android/core/UberButtonTest.java b/core-android/src/test/java/com/uber/sdk/android/core/UberButtonTest.java index 42c1588d..7ba06cfc 100644 --- a/core-android/src/test/java/com/uber/sdk/android/core/UberButtonTest.java +++ b/core-android/src/test/java/com/uber/sdk/android/core/UberButtonTest.java @@ -37,11 +37,6 @@ import org.junit.Test; import org.robolectric.Robolectric; import org.robolectric.RuntimeEnvironment; -import org.robolectric.res.Attribute; -import org.robolectric.shadows.CoreShadowsAdapter; -import org.robolectric.shadows.RoboAttributeSet; - -import java.util.Arrays; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; @@ -54,23 +49,6 @@ */ public class UberButtonTest extends RobolectricTestBase { - private static final String ANDROID_ATTR_BACKGROUND = "android:attr/background"; - private static final String ANDROID_ATTR_DRAWABLE_LEFT = "android:attr/drawableLeft"; - private static final String ANDROID_ATTR_DRAWABLE_TOP = "android:attr/drawableTop"; - private static final String ANDROID_ATTR_DRAWABLE_RIGHT = "android:attr/drawableRight"; - private static final String ANDROID_ATTR_DRAWABLE_BOTTOM = "android:attr/drawableBottom"; - private static final String ANDROID_ATTR_DRAWABLE_PADDING = "android:attr/drawablePadding"; - private static final String ANDROID_ATTR_GRAVITY = "android:attr/gravity"; - private static final String ANDROID_ATTR_PADDING = "android:attr/padding"; - private static final String ANDROID_ATTR_PADDING_LEFT = "android:attr/paddingLeft"; - private static final String ANDROID_ATTR_PADDING_TOP = "android:attr/paddingTop"; - private static final String ANDROID_ATTR_PADDING_RIGHT = "android:attr/paddingRight"; - private static final String ANDROID_ATTR_PADDING_BOTTOM = "android:attr/paddingBottom"; - private static final String ANDROID_ATTR_TEXT_COLOR = "android:attr/textColor"; - private static final String ANDROID_ATTR_TEXT_SIZE = "android:attr/textSize"; - private static final String ANDROID_ATTR_TEXT_STYLE = "android:attr/textStyle"; - private static final String ANDROID_ATTR_TEXT = "android:attr/text"; - private static final String ANDROID_COLOR_BLACK = "@android:color/black"; private static final String ANDROID_COLOR_WHITE = "@android:color/white"; private static final String DRAWABLE_UBER_BADGE = "@drawable/uber_badge"; @@ -83,7 +61,6 @@ public class UberButtonTest extends RobolectricTestBase { private static final String TEXT = "test"; private static final String UBER_PACKAGE_NAME = "com.uber.sdk.android.core"; - private static final String UBER_ATTR_UBER_STYE = UBER_PACKAGE_NAME + ":attr/ub__style"; private Context context; @@ -94,22 +71,22 @@ public void setup() { @Test public void onCreate_whenBackgroundAttributeSet_shouldSetBackground() { - AttributeSet attributeSet = makeAttributeSet( - makeAttribute(ANDROID_ATTR_BACKGROUND, ANDROID_COLOR_WHITE) - ); + AttributeSet attributeSet = Robolectric.buildAttributeSet() + .addAttribute(android.R.attr.background, ANDROID_COLOR_WHITE) + .build(); UberButton uberButton = new UberButton(context, attributeSet, 0, 0) { }; assertEquals(Color.WHITE, ((ColorDrawable) uberButton.getBackground()).getColor()); } @Test public void onCreate_whenCompoundDrawablesAndPaddingSet_shouldSetCompoundDrawableAttributes() { - AttributeSet attributeSet = makeAttributeSet( - makeAttribute(ANDROID_ATTR_DRAWABLE_LEFT, DRAWABLE_UBER_BADGE), - makeAttribute(ANDROID_ATTR_DRAWABLE_TOP, DRAWABLE_UBER_BADGE), - makeAttribute(ANDROID_ATTR_DRAWABLE_RIGHT, DRAWABLE_UBER_BADGE), - makeAttribute(ANDROID_ATTR_DRAWABLE_BOTTOM, DRAWABLE_UBER_BADGE), - makeAttribute(ANDROID_ATTR_DRAWABLE_PADDING, ONE_SP) - ); + AttributeSet attributeSet = Robolectric.buildAttributeSet() + .addAttribute(android.R.attr.drawableLeft, DRAWABLE_UBER_BADGE) + .addAttribute(android.R.attr.drawableTop, DRAWABLE_UBER_BADGE) + .addAttribute(android.R.attr.drawableRight, DRAWABLE_UBER_BADGE) + .addAttribute(android.R.attr.drawableBottom, DRAWABLE_UBER_BADGE) + .addAttribute(android.R.attr.drawablePadding, ONE_SP) + .build(); UberButton uberButton = new UberButton(context, attributeSet, 0, 0) { }; Drawable[] drawables = uberButton.getCompoundDrawables(); @@ -122,9 +99,9 @@ public void onCreate_whenCompoundDrawablesAndPaddingSet_shouldSetCompoundDrawabl @Test public void onCreate_whenOverallPaddingSet_shouldAddOverallPadding() { - AttributeSet attributeSet = makeAttributeSet( - makeAttribute(ANDROID_ATTR_PADDING, ONE_SP) - ); + AttributeSet attributeSet = Robolectric.buildAttributeSet() + .addAttribute(android.R.attr.padding, ONE_SP) + .build(); UberButton uberButton = new UberButton(context, attributeSet, 0, 0) { }; assertEquals(1, uberButton.getPaddingLeft()); assertEquals(1, uberButton.getPaddingTop()); @@ -134,12 +111,13 @@ public void onCreate_whenOverallPaddingSet_shouldAddOverallPadding() { @Test public void onCreate_whenIndividualPaddingsSet_shouldHaveSeparatePaddings() { - AttributeSet attributeSet = makeAttributeSet( - makeAttribute(ANDROID_ATTR_PADDING_LEFT, ONE_SP), - makeAttribute(ANDROID_ATTR_PADDING_TOP, TWO_SP), - makeAttribute(ANDROID_ATTR_PADDING_RIGHT, THREE_SP), - makeAttribute(ANDROID_ATTR_PADDING_BOTTOM, FOUR_SP) - ); + AttributeSet attributeSet = Robolectric.buildAttributeSet() + .addAttribute(android.R.attr.paddingLeft, ONE_SP) + .addAttribute(android.R.attr.paddingTop, TWO_SP) + .addAttribute(android.R.attr.paddingRight, THREE_SP) + .addAttribute(android.R.attr.paddingBottom, FOUR_SP) + .build(); + UberButton uberButton = new UberButton(context, attributeSet, 0, 0) { }; assertEquals(1, uberButton.getPaddingLeft()); assertEquals(2, uberButton.getPaddingTop()); @@ -149,11 +127,12 @@ public void onCreate_whenIndividualPaddingsSet_shouldHaveSeparatePaddings() { @Test public void onCreate_whenIndividualAndOverallPaddingsSet_shouldHaveIndividualPaddingsTrumpOverall() { - AttributeSet attributeSet = makeAttributeSet( - makeAttribute(ANDROID_ATTR_PADDING, ONE_SP), - makeAttribute(ANDROID_ATTR_PADDING_TOP, TWO_SP), - makeAttribute(ANDROID_ATTR_PADDING_BOTTOM, FOUR_SP) - ); + AttributeSet attributeSet = Robolectric.buildAttributeSet() + .addAttribute(android.R.attr.padding, ONE_SP) + .addAttribute(android.R.attr.paddingTop, TWO_SP) + .addAttribute(android.R.attr.paddingBottom, FOUR_SP) + .build(); + UberButton uberButton = new UberButton(context, attributeSet, 0, 0) { }; assertEquals(1, uberButton.getPaddingLeft()); assertEquals(2, uberButton.getPaddingTop()); @@ -163,13 +142,14 @@ public void onCreate_whenIndividualAndOverallPaddingsSet_shouldHaveIndividualPad @Test public void onCreate_whenTextAttributesSet_shouldAddAllAttributes() { - AttributeSet attributeSet = makeAttributeSet( - makeAttribute(ANDROID_ATTR_TEXT_COLOR, ANDROID_COLOR_BLACK), - makeAttribute(ANDROID_ATTR_GRAVITY, GRAVITY_END), - makeAttribute(ANDROID_ATTR_TEXT_SIZE, FOUR_SP), - makeAttribute(ANDROID_ATTR_TEXT_STYLE, STYLE_ITALIC), - makeAttribute(ANDROID_ATTR_TEXT, TEXT) - ); + AttributeSet attributeSet = Robolectric.buildAttributeSet() + .addAttribute(android.R.attr.textColor, ANDROID_COLOR_BLACK) + .addAttribute(android.R.attr.gravity, GRAVITY_END) + .addAttribute(android.R.attr.textSize, FOUR_SP) + .addAttribute(android.R.attr.textStyle, STYLE_ITALIC) + .addAttribute(android.R.attr.text, TEXT) + .build(); + UberButton uberButton = new UberButton(context, attributeSet, 0, 0) { }; assertEquals(Color.BLACK, uberButton.getCurrentTextColor()); assertEquals(Typeface.ITALIC, uberButton.getTypeface().getStyle()); @@ -203,9 +183,9 @@ public void onCreate_whenNoAttributesSet_shouldUseUberButtonDefaults() { @Test public void onCreate_whenUberStyleSet_shouldUseUberStyle() { - AttributeSet attributeSet = makeAttributeSet( - makeAttribute(UBER_ATTR_UBER_STYE, "white") - ); + AttributeSet attributeSet = Robolectric.buildAttributeSet() + .addAttribute(R.attr.ub__style, "white") + .build(); UberButton uberButton = new UberButton(context, attributeSet, 0, R.style.UberButton_White) { }; Resources resources = context.getResources(); @@ -266,12 +246,4 @@ public void getActivity_whenContextIsNotActivity_shouldThrowException() { uberButton.getActivity(); } - - private static AttributeSet makeAttributeSet(Attribute... attributes) { - return new RoboAttributeSet(Arrays.asList(attributes), new CoreShadowsAdapter().getResourceLoader()); - } - - private static Attribute makeAttribute(String fullyQualifiedAttributeName, Object value) { - return new Attribute(fullyQualifiedAttributeName, String.valueOf(value), UBER_PACKAGE_NAME); - } } diff --git a/core-android/src/test/java/com/uber/sdk/android/core/auth/LoginButtonTest.java b/core-android/src/test/java/com/uber/sdk/android/core/auth/LoginButtonTest.java index cef33764..bc914417 100644 --- a/core-android/src/test/java/com/uber/sdk/android/core/auth/LoginButtonTest.java +++ b/core-android/src/test/java/com/uber/sdk/android/core/auth/LoginButtonTest.java @@ -29,6 +29,7 @@ import android.util.AttributeSet; import com.google.common.collect.Sets; +import com.uber.sdk.android.core.R; import com.uber.sdk.android.core.RobolectricTestBase; import com.uber.sdk.core.auth.Scope; import com.uber.sdk.rides.client.SessionConfiguration; @@ -37,11 +38,6 @@ import org.junit.Test; import org.mockito.Mock; import org.robolectric.Robolectric; -import org.robolectric.res.Attribute; -import org.robolectric.shadows.CoreShadowsAdapter; -import org.robolectric.shadows.RoboAttributeSet; - -import java.util.Arrays; import java.util.HashSet; import static org.assertj.core.api.Assertions.assertThat; @@ -54,7 +50,6 @@ public class LoginButtonTest extends RobolectricTestBase { - private static final String UBER_PACKAGE_NAME = "com.uber.sdk.android.core"; private static final HashSet SCOPES = Sets.newHashSet(Scope.HISTORY, Scope.REQUEST_RECEIPT); private static final int REQUEST_CODE = 11133; private Activity activity; @@ -100,9 +95,9 @@ public void testButtonClickWithoutRequestCode_shouldUseDefaultCode() { @Test public void testButtonClickWithScopesFromXml_shouldUseParseScopes() { - AttributeSet attributeSet = makeAttributeSet( - makeAttribute(UBER_PACKAGE_NAME + ":attr/ub__scopes", "history|request_receipt") - ); + AttributeSet attributeSet = Robolectric.buildAttributeSet() + .addAttribute(R.attr.ub__scopes, "history|request_receipt") + .build(); loginButton = new TestLoginButton(activity, attributeSet, loginManager); loginButton.setCallback(loginCallback); @@ -114,10 +109,10 @@ public void testButtonClickWithScopesFromXml_shouldUseParseScopes() { @Test public void testButtonClickWithScopesRequestCodeFromXml_shouldUseParseAll() { - AttributeSet attributeSet = makeAttributeSet( - makeAttribute(UBER_PACKAGE_NAME + ":attr/ub__scopes", "history|request_receipt"), - makeAttribute(UBER_PACKAGE_NAME + ":attr/ub__request_code", REQUEST_CODE) - ); + AttributeSet attributeSet = Robolectric.buildAttributeSet() + .addAttribute(R.attr.ub__scopes, "history|request_receipt") + .addAttribute(R.attr.ub__request_code, String.valueOf(REQUEST_CODE)) + .build(); loginButton = new TestLoginButton(activity, attributeSet, loginManager); loginButton.setCallback(loginCallback); @@ -129,10 +124,10 @@ public void testButtonClickWithScopesRequestCodeFromXml_shouldUseParseAll() { @Test public void testButtonClickWithoutLoginManager_shouldCreateNew() { - AttributeSet attributeSet = makeAttributeSet( - makeAttribute(UBER_PACKAGE_NAME + ":attr/ub__scopes", "history|request_receipt"), - makeAttribute(UBER_PACKAGE_NAME + ":attr/ub__request_code", REQUEST_CODE) - ); + AttributeSet attributeSet = Robolectric.buildAttributeSet() + .addAttribute(R.attr.ub__scopes, "history|request_receipt") + .addAttribute(R.attr.ub__request_code, String.valueOf(REQUEST_CODE)) + .build(); loginButton = new LoginButton(activity, attributeSet); loginButton.setSessionConfiguration(new SessionConfiguration.Builder().setClientId("clientId").build()); @@ -191,12 +186,4 @@ protected LoginManager getOrCreateLoginManager() { return manager; } } - - private static AttributeSet makeAttributeSet(Attribute... attributes) { - return new RoboAttributeSet(Arrays.asList(attributes), new CoreShadowsAdapter().getResourceLoader()); - } - - private static Attribute makeAttribute(String fullyQualifiedAttributeName, Object value) { - return new Attribute(fullyQualifiedAttributeName, String.valueOf(value), UBER_PACKAGE_NAME); - } } \ No newline at end of file diff --git a/core-android/src/test/java/com/uber/sdk/android/core/auth/LoginManagerTest.java b/core-android/src/test/java/com/uber/sdk/android/core/auth/LoginManagerTest.java index ad002a09..59cfc7ae 100644 --- a/core-android/src/test/java/com/uber/sdk/android/core/auth/LoginManagerTest.java +++ b/core-android/src/test/java/com/uber/sdk/android/core/auth/LoginManagerTest.java @@ -91,11 +91,11 @@ public class LoginManagerTest extends RobolectricTestBase { private static final ImmutableList MIXED_SCOPES = ImmutableList.of(Scope.PROFILE, Scope.REQUEST_RECEIPT); private static final ImmutableList GENERAL_SCOPES = ImmutableList.of(Scope.PROFILE, Scope.HISTORY); - private static final String WORLD_REGION = - "uber://connect?client_id=Client1234&scope=profile%20request_receipt&login_type=WORLD&sdk=android&sdk_version=" + private static final String DEFAULT_REGION = + "uber://connect?client_id=Client1234&scope=profile%20request_receipt&sdk=android&sdk_version=" + BuildConfig.VERSION_NAME; - private static final String INSTALL = "https://m.uber.com/sign-up?client_id=Client1234&user-agent=core-android-v0.5.4-login_manager"; + private static final String INSTALL = "https://m.uber.com/sign-up?client_id=Client1234&user-agent=core-android-v0.6.0-login_manager"; private static final String AUTHORIZATION_CODE = "Auth123Code"; @Mock @@ -125,7 +125,7 @@ public void setup() { @Test public void loginWithAppInstalledPrivilegedScopes_shouldLaunchIntent() { - stubAppInstalled(packageManager, AppProtocol.UBER_PACKAGE_NAME, SsoDeeplink.MIN_VERSION_SUPPORTED); + stubAppInstalled(packageManager, AppProtocol.UBER_PACKAGE_NAMES[0], SsoDeeplink.MIN_VERSION_SUPPORTED); loginManager.login(activity); @@ -134,7 +134,7 @@ public void loginWithAppInstalledPrivilegedScopes_shouldLaunchIntent() { verify(activity).startActivityForResult(intentCaptor.capture(), codeCaptor.capture()); - assertThat(intentCaptor.getValue().getData().toString()).isEqualTo(WORLD_REGION); + assertThat(intentCaptor.getValue().getData().toString()).isEqualTo(DEFAULT_REGION); assertThat(codeCaptor.getValue()).isEqualTo(REQUEST_CODE_LOGIN_DEFAULT); } @@ -142,7 +142,7 @@ public void loginWithAppInstalledPrivilegedScopes_shouldLaunchIntent() { public void loginWithAppInstalledPrivilegedScopesAndRequestCode_shouldLaunchIntent() { loginManager = new LoginManager(accessTokenManager, callback, sessionConfiguration, REQUEST_CODE); - stubAppInstalled(packageManager, AppProtocol.UBER_PACKAGE_NAME, SsoDeeplink.MIN_VERSION_SUPPORTED); + stubAppInstalled(packageManager, AppProtocol.UBER_PACKAGE_NAMES[0], SsoDeeplink.MIN_VERSION_SUPPORTED); loginManager.login(activity); @@ -151,7 +151,7 @@ public void loginWithAppInstalledPrivilegedScopesAndRequestCode_shouldLaunchInte verify(activity).startActivityForResult(intentCaptor.capture(), codeCaptor.capture()); - assertThat(intentCaptor.getValue().getData().toString()).isEqualTo(WORLD_REGION); + assertThat(intentCaptor.getValue().getData().toString()).isEqualTo(DEFAULT_REGION); assertThat(codeCaptor.getValue()).isEqualTo(REQUEST_CODE); } @@ -160,7 +160,7 @@ public void loginWithoutAppInstalledGeneralScopes_shouldLaunchWebView() { sessionConfiguration = sessionConfiguration.newBuilder().setScopes(GENERAL_SCOPES).build(); loginManager = new LoginManager(accessTokenManager, callback, sessionConfiguration); - stubAppNotInstalled(packageManager, AppProtocol.UBER_PACKAGE_NAME); + stubAppNotInstalled(packageManager, AppProtocol.UBER_PACKAGE_NAMES[0]); loginManager.login(activity); @@ -185,7 +185,7 @@ public void loginWithoutAppInstalledPrivilegedScopes_shouldLaunchAppInstall() { loginManager = new LoginManager(accessTokenManager, callback, sessionConfiguration) .setRedirectForAuthorizationCode(false); - stubAppNotInstalled(packageManager, AppProtocol.UBER_PACKAGE_NAME); + stubAppNotInstalled(packageManager, AppProtocol.UBER_PACKAGE_NAMES[0]); loginManager.login(activity); @@ -371,6 +371,7 @@ private static PackageManager stubAppInstalled(PackageManager packageManager, St final PackageInfo packageInfo = new PackageInfo(); packageInfo.versionCode = versionCode; packageInfo.signatures = new Signature[]{new Signature(PUBLIC_SIGNATURE)}; + packageInfo.packageName = packageName; try { when(packageManager.getPackageInfo(eq(packageName), anyInt())) .thenReturn(packageInfo); diff --git a/core-android/src/test/java/com/uber/sdk/android/core/auth/OAuthWebViewClientTest.java b/core-android/src/test/java/com/uber/sdk/android/core/auth/OAuthWebViewClientTest.java index cfe7fd57..0d72ddd8 100644 --- a/core-android/src/test/java/com/uber/sdk/android/core/auth/OAuthWebViewClientTest.java +++ b/core-android/src/test/java/com/uber/sdk/android/core/auth/OAuthWebViewClientTest.java @@ -84,24 +84,6 @@ public void onBuildUrl_withDefaultRegion_shouldHaveDefaultUberDomain() { "show_fb=false&signup_params=eyJyZWRpcmVjdF90b19sb2dpbiI6dHJ1ZX0%3D%0A", url); } - @Test - public void onBuildUrl_withChinaRegion_shouldHaveChinaDomain() { - String clientId = "clientId1234"; - String redirectUri = "localHost1234"; - - SessionConfiguration loginConfiguration = new SessionConfiguration.Builder() - .setRedirectUri(redirectUri) - .setClientId(clientId) - .setScopes(Arrays.asList(Scope.HISTORY)) - .setEndpointRegion(SessionConfiguration.EndpointRegion.CHINA).build(); - - String url = testLoginActivity.buildUrl(redirectUri, ResponseType.TOKEN, loginConfiguration); - assertEquals( - "https://login.uber.com.cn/oauth/v2/authorize?client_id=" + clientId + - "&redirect_uri=" + redirectUri + "&response_type=token&scope=history" + - "&show_fb=false&signup_params=eyJyZWRpcmVjdF90b19sb2dpbiI6dHJ1ZX0%3D%0A", url); - } - @Test public void onLoadLoginView_withNoRedirectUrl_shouldReturnError() { SessionConfiguration config = new SessionConfiguration.Builder().setClientId("clientId").build(); diff --git a/core-android/src/test/java/com/uber/sdk/android/core/auth/SsoDeeplinkTest.java b/core-android/src/test/java/com/uber/sdk/android/core/auth/SsoDeeplinkTest.java index 7c1792e9..78782dae 100644 --- a/core-android/src/test/java/com/uber/sdk/android/core/auth/SsoDeeplinkTest.java +++ b/core-android/src/test/java/com/uber/sdk/android/core/auth/SsoDeeplinkTest.java @@ -34,7 +34,6 @@ import com.uber.sdk.android.core.RobolectricTestBase; import com.uber.sdk.android.core.utils.AppProtocol; import com.uber.sdk.core.auth.Scope; -import com.uber.sdk.rides.client.SessionConfiguration; import org.junit.Before; import org.junit.Test; @@ -50,7 +49,6 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyCollection; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; @@ -64,11 +62,8 @@ public class SsoDeeplinkTest extends RobolectricTestBase { private static final Set GENERAL_SCOPES = Sets.newHashSet(Scope.HISTORY, Scope.PROFILE); private static final int REQUEST_CODE = 1234; - private static final String CHINA__REGION = - "uber://connect?client_id=MYCLIENTID&scope=profile%20history&login_type=CHINA&sdk=android&sdk_version=" + BuildConfig.VERSION_NAME; - - private static final String WORLD_REGION = - "uber://connect?client_id=MYCLIENTID&scope=profile%20history&login_type=WORLD&sdk=android&sdk_version=" + BuildConfig.VERSION_NAME; + private static final String DEFAULT_REGION = + "uber://connect?client_id=MYCLIENTID&scope=profile%20history&sdk=android&sdk_version=" + BuildConfig.VERSION_NAME; @Mock PackageManager packageManager; @@ -120,7 +115,7 @@ public void testIsSupported_appInstalledButOldVersion_shouldBeFalse() { when(activity.getPackageManager()).thenReturn(packageManager); try { - when(packageManager.getPackageInfo(AppProtocol.UBER_PACKAGE_NAME, 0)).thenReturn(packageInfo); + when(packageManager.getPackageInfo(AppProtocol.UBER_PACKAGE_NAMES[0], 0)).thenReturn(packageInfo); } catch (PackageManager.NameNotFoundException e) { fail("Unable to mock Package Manager"); } @@ -140,7 +135,7 @@ public void testIsSupported_appInstalledButOldVersion_shouldBeFalse() { public void testIsSupported_noAppInstalled_shouldBeFalse() { when(activity.getPackageManager()).thenReturn(packageManager); try { - when(packageManager.getPackageInfo(AppProtocol.UBER_PACKAGE_NAME, PackageManager.GET_META_DATA)) + when(packageManager.getPackageInfo(AppProtocol.UBER_PACKAGE_NAMES[0], PackageManager.GET_META_DATA)) .thenThrow(PackageManager.NameNotFoundException.class); } catch (PackageManager.NameNotFoundException e) { fail("Unable to mock Package Manager"); @@ -157,29 +152,6 @@ public void testIsSupported_noAppInstalled_shouldBeFalse() { assertThat(isSupported).isFalse(); } - @Test - public void testInvokeWithAllParams_shouldContainsFullUri() { - enableSupport(); - - final SsoDeeplink link = new SsoDeeplink.Builder(activity) - .clientId(CLIENT_ID) - .region(SessionConfiguration.EndpointRegion.CHINA) - .scopes(GENERAL_SCOPES) - .activityRequestCode(REQUEST_CODE) - .build(); - link.appProtocol = protocol; - link.execute(); - - final ArgumentCaptor intentCaptor = ArgumentCaptor.forClass(Intent.class); - final ArgumentCaptor requestCodeCaptor = ArgumentCaptor.forClass(Integer.class); - verify(activity).startActivityForResult(intentCaptor.capture(), requestCodeCaptor.capture()); - - final Uri uri = intentCaptor.getValue().getData(); - - assertThat(uri.toString()).isEqualTo(CHINA__REGION); - assertThat(requestCodeCaptor.getValue()).isEqualTo(REQUEST_CODE); - } - @Test public void testInvokeWithoutRegion_shouldUseWorld() { enableSupport(); @@ -199,7 +171,7 @@ public void testInvokeWithoutRegion_shouldUseWorld() { final Uri uri = intentCaptor.getValue().getData(); - assertThat(uri.toString()).isEqualTo(WORLD_REGION); + assertThat(uri.toString()).isEqualTo(DEFAULT_REGION); assertThat(requestCodeCaptor.getValue()).isEqualTo(REQUEST_CODE); } @@ -221,7 +193,7 @@ public void testInvokeWithoutRequestCode_shouldUseDefaultRequstCode() { Uri uri = intentCaptor.getValue().getData(); - assertThat(uri.toString()).isEqualTo(WORLD_REGION); + assertThat(uri.toString()).isEqualTo(DEFAULT_REGION); assertThat(requestCodeCaptor.getValue()).isEqualTo(LoginManager.REQUEST_CODE_LOGIN_DEFAULT); } @@ -232,7 +204,6 @@ public void testInvokeWithoutScopes_shouldFail() { final SsoDeeplink link = new SsoDeeplink.Builder(activity) .clientId(CLIENT_ID) - .region(SessionConfiguration.EndpointRegion.WORLD) .activityRequestCode(REQUEST_CODE) .build(); @@ -249,7 +220,6 @@ public void testInvokeWithScopesAndCustomScopes_shouldSucceed() { final SsoDeeplink link = new SsoDeeplink.Builder(activity) .clientId(CLIENT_ID) - .region(SessionConfiguration.EndpointRegion.WORLD) .activityRequestCode(REQUEST_CODE) .scopes(GENERAL_SCOPES) .customScopes(collection) @@ -270,7 +240,6 @@ public void testInvokeWithoutClientId_shouldFail() { final SsoDeeplink link = new SsoDeeplink.Builder(activity) .scopes(GENERAL_SCOPES) - .region(SessionConfiguration.EndpointRegion.WORLD) .activityRequestCode(REQUEST_CODE) .build(); @@ -282,7 +251,7 @@ public void testInvokeWithoutClientId_shouldFail() { public void testInvokeWithoutAppInstalled_shouldFail() { when(activity.getPackageManager()).thenReturn(packageManager); try { - when(packageManager.getPackageInfo(AppProtocol.UBER_PACKAGE_NAME, PackageManager.GET_META_DATA)) + when(packageManager.getPackageInfo(AppProtocol.UBER_PACKAGE_NAMES[0], PackageManager.GET_META_DATA)) .thenThrow(PackageManager.NameNotFoundException.class); } catch (PackageManager.NameNotFoundException e) { fail("Unable to mock Package Manager"); @@ -302,11 +271,12 @@ private void enableSupport() { when(activity.getPackageManager()).thenReturn(packageManager); try { - when(packageManager.getPackageInfo(eq(AppProtocol.UBER_PACKAGE_NAME), anyInt())) + when(packageManager.getPackageInfo(eq(AppProtocol.UBER_PACKAGE_NAMES[0]), anyInt())) .thenReturn(packageInfo); } catch (PackageManager.NameNotFoundException e) { fail("Unable to mock Package Manager"); } when(protocol.validateSignature(any(Context.class), anyString())).thenReturn(true); + when(protocol.validateMinimumVersion(any(Context.class), any(PackageInfo.class), anyInt())).thenReturn(true); } } \ No newline at end of file diff --git a/core-android/src/test/java/com/uber/sdk/android/core/utils/AppProtocolTest.java b/core-android/src/test/java/com/uber/sdk/android/core/utils/AppProtocolTest.java index 74f6ecd1..508ace04 100644 --- a/core-android/src/test/java/com/uber/sdk/android/core/utils/AppProtocolTest.java +++ b/core-android/src/test/java/com/uber/sdk/android/core/utils/AppProtocolTest.java @@ -73,19 +73,19 @@ public void setUp() throws Exception { @Test public void validateSignature_whenValid_returnsTrue() throws Exception { stubAppSignature(GOOD_SIGNATURE); - assertTrue(appProtocol.validateSignature(activity, AppProtocol.UBER_PACKAGE_NAME)); + assertTrue(appProtocol.validateSignature(activity, AppProtocol.UBER_PACKAGE_NAMES[0])); } @Test public void validateSignature_whenInvalid_returnsFalse() throws Exception { stubAppSignature(BAD_SIGNATURE); - assertFalse(appProtocol.validateSignature(activity, AppProtocol.UBER_PACKAGE_NAME)); + assertFalse(appProtocol.validateSignature(activity, AppProtocol.UBER_PACKAGE_NAMES[0])); } @Test public void validateSignature_whenGoodAndBad_returnsFalse() throws Exception { stubAppSignature(GOOD_SIGNATURE, BAD_SIGNATURE); - assertFalse(appProtocol.validateSignature(activity, AppProtocol.UBER_PACKAGE_NAME)); + assertFalse(appProtocol.validateSignature(activity, AppProtocol.UBER_PACKAGE_NAMES[0])); } @Test @@ -98,7 +98,8 @@ public void getApplicationSignature_whenValidPackageSignature_shouldSucceed() th public void getPackageSignature_whenNameNotFoundException_shouldReturnNull() throws Exception { stubAppSignature(GOOD_SIGNATURE); final Throwable throwable = new PackageManager.NameNotFoundException(); - doThrow(throwable).when(packageManager).getPackageInfo(AppProtocol.UBER_PACKAGE_NAME, PackageManager.GET_SIGNATURES); + doThrow(throwable).when(packageManager) + .getPackageInfo(AppProtocol.UBER_PACKAGE_NAMES[0], PackageManager.GET_SIGNATURES); assertThat(appProtocol.getAppSignature(activity)).isNull(); } @@ -106,7 +107,7 @@ public void getPackageSignature_whenNameNotFoundException_shouldReturnNull() thr @Test public void getPackageSignature_whenNullPackageInfo_shouldReturnNull() throws Exception { stubAppSignature(GOOD_SIGNATURE); - when(packageManager.getPackageInfo(AppProtocol.UBER_PACKAGE_NAME, PackageManager.GET_SIGNATURES)) + when(packageManager.getPackageInfo(AppProtocol.UBER_PACKAGE_NAMES[0], PackageManager.GET_SIGNATURES)) .thenReturn(null); assertThat(appProtocol.getAppSignature(activity)).isNull(); @@ -132,7 +133,7 @@ public void getPackageSignature_whenNoSuchAlgorithmException_shouldReturnNull() } private void stubAppSignature(String... sig) throws Exception { - when(activity.getPackageName()).thenReturn(AppProtocol.UBER_PACKAGE_NAME); + when(activity.getPackageName()).thenReturn(AppProtocol.UBER_PACKAGE_NAMES[0]); when(activity.getPackageManager()).thenReturn(packageManager); Signature[] signatures = new Signature[sig.length]; @@ -143,7 +144,7 @@ private void stubAppSignature(String... sig) throws Exception { packageInfo.signatures = signatures; try { - when(packageManager.getPackageInfo(eq(AppProtocol.UBER_PACKAGE_NAME), anyInt())) + when(packageManager.getPackageInfo(eq(AppProtocol.UBER_PACKAGE_NAMES[0]), anyInt())) .thenReturn(packageInfo); } catch (PackageManager.NameNotFoundException e) { fail("Unable to mock Package Manager"); diff --git a/gradle.properties b/gradle.properties index fe518a73..a7b9eb19 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,4 +2,4 @@ group=com.uber.sdk groupId=com.uber.sdk artifactId=rides-android githubDownloadPrefix=https://github.com/uber/rides-android-sdk/releases/download/ -version=0.5.5-SNAPSHOT +version=0.6.0 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5b7e6468..92edd979 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Oct 12 19:04:32 PDT 2015 +#Fri Feb 10 13:49:35 PST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.13-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip diff --git a/rides-android/build.gradle b/rides-android/build.gradle index 0f3a728f..0c6a3d52 100644 --- a/rides-android/build.gradle +++ b/rides-android/build.gradle @@ -10,7 +10,7 @@ buildscript { } dependencies { - classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5' } } @@ -168,7 +168,7 @@ dependencies { testCompile 'com.google.http-client:google-http-client-jackson2:1.19.0' testCompile 'org.mockito:mockito-core:1.10.19' testCompile 'org.assertj:assertj-core:1.7.1' - testCompile 'org.robolectric:robolectric:3.0' + testCompile 'org.robolectric:robolectric:3.2.2' testCompile ('com.github.tomakehurst:wiremock:2.0.10-beta') { exclude module:'asm' } diff --git a/rides-android/src/main/java/com/uber/sdk/android/rides/RequestDeeplink.java b/rides-android/src/main/java/com/uber/sdk/android/rides/RequestDeeplink.java index 524a0edc..325a0c17 100644 --- a/rides-android/src/main/java/com/uber/sdk/android/rides/RequestDeeplink.java +++ b/rides-android/src/main/java/com/uber/sdk/android/rides/RequestDeeplink.java @@ -46,7 +46,7 @@ */ public class RequestDeeplink implements Deeplink { - private static final String USER_AGENT_DEEPLINK = "rides-android-v0.5.4-deeplink"; + private static final String USER_AGENT_DEEPLINK = "rides-android-v0.6.0-deeplink"; @NonNull private final Uri uri; @@ -78,7 +78,12 @@ public void execute() { @Override public boolean isSupported() { - return PackageManagers.isPackageAvailable(context, AppProtocol.UBER_PACKAGE_NAME); + for (String packageName : AppProtocol.UBER_PACKAGE_NAMES) { + if(PackageManagers.isPackageAvailable(context, packageName)) { + return true; + } + } + return false; } /** diff --git a/rides-android/src/main/java/com/uber/sdk/android/rides/RideRequestActivity.java b/rides-android/src/main/java/com/uber/sdk/android/rides/RideRequestActivity.java index 1f01570c..e821d151 100644 --- a/rides-android/src/main/java/com/uber/sdk/android/rides/RideRequestActivity.java +++ b/rides-android/src/main/java/com/uber/sdk/android/rides/RideRequestActivity.java @@ -68,7 +68,7 @@ public class RideRequestActivity extends Activity implements LoginCallback, Ride static final int LOGIN_REQUEST_CODE = 1112; private static final int REQUEST_FINE_LOCATION_PERMISSION_CODE = 1002; - private static final String USER_AGENT_RIDE_WIDGET = "rides-android-v0.5.4-ride_request_widget"; + private static final String USER_AGENT_RIDE_WIDGET = "rides-android-v0.6.0-ride_request_widget"; @VisibleForTesting static final String RIDE_PARAMETERS = "ride_parameters"; static final String EXTRA_LOGIN_CONFIGURATION = "login_configuration"; diff --git a/rides-android/src/main/java/com/uber/sdk/android/rides/RideRequestButton.java b/rides-android/src/main/java/com/uber/sdk/android/rides/RideRequestButton.java index 7ccd097a..58222078 100644 --- a/rides-android/src/main/java/com/uber/sdk/android/rides/RideRequestButton.java +++ b/rides-android/src/main/java/com/uber/sdk/android/rides/RideRequestButton.java @@ -61,7 +61,7 @@ public class RideRequestButton extends FrameLayout implements RideRequestButtonV @StyleRes int[] STYLES = {R.style.UberButton, R.style.UberButton_White}; - private static final String USER_AGENT_BUTTON = "rides-android-v0.5.4-button"; + private static final String USER_AGENT_BUTTON = "rides-android-v0.6.0-button"; private RideRequestBehavior rideRequestBehavior; diff --git a/rides-android/src/main/java/com/uber/sdk/android/rides/RideRequestView.java b/rides-android/src/main/java/com/uber/sdk/android/rides/RideRequestView.java index 5b49ddb0..9142bfe5 100644 --- a/rides-android/src/main/java/com/uber/sdk/android/rides/RideRequestView.java +++ b/rides-android/src/main/java/com/uber/sdk/android/rides/RideRequestView.java @@ -55,7 +55,7 @@ */ public class RideRequestView extends LinearLayout { - private static final String USER_AGENT_RIDE_VIEW = "rides-android-v0.5.4-ride_request_view"; + private static final String USER_AGENT_RIDE_VIEW = "rides-android-v0.6.0-ride_request_view"; @Nullable private AccessTokenSession accessTokenSession; @NonNull @VisibleForTesting RideParameters rideParameters = new RideParameters.Builder().build(); @Nullable private RideRequestViewCallback rideRequestViewCallback; @@ -167,7 +167,7 @@ static String buildUrlFromRideParameters(@NonNull Context context, Uri.Builder builder = new Uri.Builder(); builder.scheme(HTTPS) - .authority(ENDPOINT + "." + loginConfiguration.getEndpointRegion().domain) + .authority(ENDPOINT + "." + loginConfiguration.getEndpointRegion().getDomain()) .appendEncodedPath(PATH); if (rideParameters.getUserAgent() == null) { diff --git a/rides-android/src/test/java/android/net/http/AndroidHttpClient.java b/rides-android/src/test/java/android/net/http/AndroidHttpClient.java deleted file mode 100644 index 4d44478a..00000000 --- a/rides-android/src/test/java/android/net/http/AndroidHttpClient.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2016 Uber Technologies, Inc. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -package android.net.http; - -/** - * Apache HTTP Client was deprecated and is no longer part of compile classpath. - * Robolectic still links to it so an empty class is needed for compiling purposes. - * - * See Robolectric issue for - * details. - */ -public class AndroidHttpClient { } diff --git a/rides-android/src/test/java/com/uber/sdk/android/rides/RequestDeeplinkTest.java b/rides-android/src/test/java/com/uber/sdk/android/rides/RequestDeeplinkTest.java index 48d2d4b4..0a294a38 100644 --- a/rides-android/src/test/java/com/uber/sdk/android/rides/RequestDeeplinkTest.java +++ b/rides-android/src/test/java/com/uber/sdk/android/rides/RequestDeeplinkTest.java @@ -31,6 +31,7 @@ import org.junit.Test; import org.robolectric.Robolectric; +import org.robolectric.RuntimeEnvironment; import org.robolectric.res.builder.RobolectricPackageManager; import org.robolectric.shadows.ShadowActivity; @@ -56,7 +57,7 @@ public class RequestDeeplinkTest extends RobolectricTestBase { private static final Double DROPOFF_LONG = -122.6789; private static final String DROPOFF_NICK = "pickupNick"; private static final String DROPOFF_ADDR = "Dropoff Address"; - private static final String USER_AGENT_DEEPLINK = "rides-android-v0.5.4-deeplink"; + private static final String USER_AGENT_DEEPLINK = "rides-android-v0.6.0-deeplink"; private Context context; @@ -179,7 +180,7 @@ public void execute_whenUberAppInsalled_shouldPointToUberApp() throws IOExceptio Activity activity = Robolectric.setupActivity(Activity.class); ShadowActivity shadowActivity = shadowOf(activity); - RobolectricPackageManager packageManager = (RobolectricPackageManager) shadowActivity.getPackageManager(); + RobolectricPackageManager packageManager = RuntimeEnvironment.getRobolectricPackageManager(); PackageInfo uberPackage = new PackageInfo(); uberPackage.packageName = UBER_PACKAGE_NAME; diff --git a/rides-android/src/test/java/com/uber/sdk/android/rides/RideRequestActivityTest.java b/rides-android/src/test/java/com/uber/sdk/android/rides/RideRequestActivityTest.java index 050a1707..beb9bc87 100644 --- a/rides-android/src/test/java/com/uber/sdk/android/rides/RideRequestActivityTest.java +++ b/rides-android/src/test/java/com/uber/sdk/android/rides/RideRequestActivityTest.java @@ -121,13 +121,13 @@ public void onLoad_whenNullUserAgent_shouldAddRideWidgetUserAgent() { "refreshToken", "tokenType"); activity.onLoginSuccess(accessToken); - assertEquals("rides-android-v0.5.4-ride_request_widget", + assertEquals("rides-android-v0.6.0-ride_request_widget", activity.rideRequestView.rideParameters.getUserAgent()); } @Test public void onLoad_withUserAgentInRideParametersButton_shouldNotGetOverridden() { - String userAgent = "rides-android-v0.5.4-button"; + String userAgent = "rides-android-v0.6.0-button"; RideParameters rideParameters = new RideParameters.Builder().build(); rideParameters.setUserAgent(userAgent); Intent data = RideRequestActivity.newIntent(Robolectric.setupActivity(Activity.class), diff --git a/rides-android/src/test/java/com/uber/sdk/android/rides/RideRequestViewTest.java b/rides-android/src/test/java/com/uber/sdk/android/rides/RideRequestViewTest.java index 0d84f971..821b49eb 100644 --- a/rides-android/src/test/java/com/uber/sdk/android/rides/RideRequestViewTest.java +++ b/rides-android/src/test/java/com/uber/sdk/android/rides/RideRequestViewTest.java @@ -74,7 +74,7 @@ public class RideRequestViewTest extends RobolectricTestBase { private static final String DROPOFF_NICK = "pickupNick"; private static final String DROPOFF_ADDR = "Dropoff Address"; private static final String TOKEN_STRING = "thisIsAnAccessToken"; - private static final String USER_AGENT_RIDE_VIEW = "rides-android-v0.5.4-ride_request_view"; + private static final String USER_AGENT_RIDE_VIEW = "rides-android-v0.6.0-ride_request_view"; private AccessToken accessToken; private RideRequestView rideRequestView; @@ -103,27 +103,12 @@ public void onBuildUrl_inDefaultRegion_shouldHaveUrlWithDefaultDomain() throws I SessionConfiguration configuration = new SessionConfiguration.Builder() .setClientId("clientId") - .setEndpointRegion(SessionConfiguration.EndpointRegion.WORLD) .build(); String result = RideRequestView.buildUrlFromRideParameters(context, rideParameters, configuration); assertEquals(expectedUri, result); } - @Test - public void onBuildUrl_inChinaRegion_shouldHaveUrlWithChinaDomain() throws IOException { - String path = "src/test/resources/riderequestviewuris/china_uri"; - String expectedUri = readUriResourceWithUserAgentParam(path, USER_AGENT_RIDE_VIEW); - - RideParameters rideParameters = new RideParameters.Builder().build(); - SessionConfiguration configuration = new SessionConfiguration.Builder() - .setClientId("clientId") - .setEndpointRegion(SessionConfiguration.EndpointRegion.CHINA) - .build(); - - String result = RideRequestView.buildUrlFromRideParameters(context, rideParameters, configuration); - assertEquals(expectedUri, result); - } @Test public void onBuildUrl_inSandboxMode_shouldHaveUrlWithSandboxParam() throws IOException { @@ -131,7 +116,6 @@ public void onBuildUrl_inSandboxMode_shouldHaveUrlWithSandboxParam() throws IOEx SessionConfiguration configuration = new SessionConfiguration.Builder() .setClientId("clientId") - .setEndpointRegion(SessionConfiguration.EndpointRegion.WORLD) .setEnvironment(SessionConfiguration.Environment.SANDBOX) .build(); @@ -152,7 +136,6 @@ public void onBuildUrl_withRideParams_shouldHaveRideParamsQueryParams() throws I .build(); SessionConfiguration configuration = new SessionConfiguration.Builder() .setClientId("clientId") - .setEndpointRegion(SessionConfiguration.EndpointRegion.WORLD) .build(); String result = RideRequestView.buildUrlFromRideParameters(context, rideParameters, configuration); @@ -161,7 +144,7 @@ public void onBuildUrl_withRideParams_shouldHaveRideParamsQueryParams() throws I @Test public void onBuildUrl_withUserAgentNonNull_shouldNotOverride() throws IOException { - String widgetUserAgent = "rides-android-v0.5.4-ride_request_widget"; + String widgetUserAgent = "rides-android-v0.6.0-ride_request_widget"; String path = "src/test/resources/riderequestviewuris/default_uri"; String expectedUri = readUriResourceWithUserAgentParam(path, widgetUserAgent); @@ -170,7 +153,6 @@ public void onBuildUrl_withUserAgentNonNull_shouldNotOverride() throws IOExcepti SessionConfiguration configuration = new SessionConfiguration.Builder() .setClientId("clientId") - .setEndpointRegion(SessionConfiguration.EndpointRegion.WORLD) .build(); String result = RideRequestView.buildUrlFromRideParameters(context, rideParameters, configuration); @@ -265,6 +247,6 @@ public void shouldOverrideUrlLoading_whenNonHttpOrRedirect_shouldOverrideAndLaun verifyZeroInteractions(callback); Intent startedIntent = shadowActivity.getNextStartedActivity(); assertEquals(Intent.ACTION_VIEW, startedIntent.getAction()); - assertEquals("tel:+91555555555#Intent;end", startedIntent.toUri(0)); + assertEquals("tel:+91555555555#Intent;action=android.intent.action.VIEW;end", startedIntent.toUri(0)); } } diff --git a/rides-android/src/test/java/com/uber/sdk/android/rides/RobolectricTestBase.java b/rides-android/src/test/java/com/uber/sdk/android/rides/RobolectricTestBase.java index 271b1548..b883522b 100644 --- a/rides-android/src/test/java/com/uber/sdk/android/rides/RobolectricTestBase.java +++ b/rides-android/src/test/java/com/uber/sdk/android/rides/RobolectricTestBase.java @@ -23,13 +23,13 @@ package com.uber.sdk.android.rides; import org.junit.runner.RunWith; -import org.robolectric.RobolectricGradleTestRunner; +import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; /** * Base test class to remove use of annotations on all test classes. */ -@RunWith(RobolectricGradleTestRunner.class) +@RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) public abstract class RobolectricTestBase { } diff --git a/rides-android/src/test/java/com/uber/sdk/android/rides/internal/RideRequestButtonControllerTest.java b/rides-android/src/test/java/com/uber/sdk/android/rides/internal/RideRequestButtonControllerTest.java index 180d8a77..a1f79675 100644 --- a/rides-android/src/test/java/com/uber/sdk/android/rides/internal/RideRequestButtonControllerTest.java +++ b/rides-android/src/test/java/com/uber/sdk/android/rides/internal/RideRequestButtonControllerTest.java @@ -32,6 +32,7 @@ import com.uber.sdk.android.rides.RideParameters; import com.uber.sdk.android.rides.RideRequestButtonCallback; import com.uber.sdk.rides.client.error.ApiError; +import com.uber.sdk.rides.client.internal.BigDecimalAdapter; import com.uber.sdk.rides.client.model.PriceEstimate; import com.uber.sdk.rides.client.model.PriceEstimatesResponse; import com.uber.sdk.rides.client.model.TimeEstimate; @@ -78,8 +79,8 @@ @RunWith(MockitoJUnitRunner.class) public class RideRequestButtonControllerTest { - private static final String TIME_ESTIMATES_API = "/v1/estimates/time"; - private static final String PRICE_ESTIMATES_API = "/v1/estimates/price"; + private static final String TIME_ESTIMATES_API = "/v1.2/estimates/time"; + private static final String PRICE_ESTIMATES_API = "/v1.2/estimates/price"; private static WireMockConfiguration WIRE_MOCK_CONFIG = wireMockConfig() .notifier(new ConsoleNotifier(true)) .dynamicPort(); @@ -135,6 +136,7 @@ public void setUp() throws Exception { .build(); Moshi moshi = new Moshi.Builder() + .add(new BigDecimalAdapter()) .build(); okHttpClient = new OkHttpClient.Builder() diff --git a/rides-android/src/test/resources/__files/prices_estimate.json b/rides-android/src/test/resources/__files/prices_estimate.json index bd1f2d56..006bff1c 100644 --- a/rides-android/src/test/resources/__files/prices_estimate.json +++ b/rides-android/src/test/resources/__files/prices_estimate.json @@ -2,105 +2,105 @@ "prices": [ { "localized_display_name": "uberPOOL", - "high_estimate": 6, + "high_estimate": 6.0, "minimum": null, "duration": 1080, "estimate": "$5.75", "distance": 2.5, "display_name": "uberPOOL", "product_id": "26546650-e557-4a7b-86e7-6a3942445247", - "low_estimate": 5, + "low_estimate": 5.0, "surge_multiplier": 1.0, "currency_code": "USD" }, { "localized_display_name": "uberX", - "high_estimate": 12, + "high_estimate": 12.0, "minimum": 7, "duration": 1080, "estimate": "$9-12", "distance": 2.5, "display_name": "uberX", "product_id": "a1111c8c-c720-46c3-8534-2fcdd730040d", - "low_estimate": 9, + "low_estimate": 9.0, "surge_multiplier": 1.0, "currency_code": "USD" }, { "localized_display_name": "uberXL", - "high_estimate": 18, + "high_estimate": 18.0, "minimum": 9, "duration": 1080, "estimate": "$14-18", "distance": 2.5, "display_name": "uberXL", "product_id": "821415d8-3bd5-4e27-9604-194e4359a449", - "low_estimate": 14, + "low_estimate": 14.0, "surge_multiplier": 1.0, "currency_code": "USD" }, { "localized_display_name": "UberSELECT", - "high_estimate": 26, + "high_estimate": 26.0, "minimum": 11, "duration": 1080, "estimate": "$21-26", "distance": 2.5, "display_name": "UberSELECT", "product_id": "57c0ff4e-1493-4ef9-a4df-6b961525cf92", - "low_estimate": 21, + "low_estimate": 21.0, "surge_multiplier": 1.0, "currency_code": "USD" }, { "localized_display_name": "UberBLACK", - "high_estimate": 34, + "high_estimate": 34.0, "minimum": 15, "duration": 1080, "estimate": "$27-34", "distance": 2.5, "display_name": "UberBLACK", "product_id": "d4abaae7-f4d6-4152-91cc-77523e8165a4", - "low_estimate": 27, + "low_estimate": 27.0, "surge_multiplier": 1.0, "currency_code": "USD" }, { "localized_display_name": "UberSUV", - "high_estimate": 47, + "high_estimate": 47.0, "minimum": 25, "duration": 1080, "estimate": "$38-47", "distance": 2.5, "display_name": "UberSUV", "product_id": "8920cb5e-51a4-4fa4-acdf-dd86c5e18ae0", - "low_estimate": 38, + "low_estimate": 38.0, "surge_multiplier": 1.0, "currency_code": "USD" }, { "localized_display_name": "ASSIST", - "high_estimate": 12, + "high_estimate": 12.0, "minimum": 7, "duration": 1080, "estimate": "$9-12", "distance": 2.5, "display_name": "ASSIST", "product_id": "ff5ed8fe-6585-4803-be13-3ca541235de3", - "low_estimate": 9, + "low_estimate": 9.0, "surge_multiplier": 1.0, "currency_code": "USD" }, { "localized_display_name": "uberWAV", - "high_estimate": 23, + "high_estimate": 23.0, "minimum": 9, "duration": 1080, "estimate": "$18-23", "distance": 2.5, "display_name": "uberWAV", "product_id": "2832a1f5-cfc0-48bb-ab76-7ea7a62060e7", - "low_estimate": 18, + "low_estimate": 18.0, "surge_multiplier": 1.0, "currency_code": "USD" }, diff --git a/samples/login-sample/build.gradle b/samples/login-sample/build.gradle index 739f97f5..e4edf35e 100644 --- a/samples/login-sample/build.gradle +++ b/samples/login-sample/build.gradle @@ -10,7 +10,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.android.tools.build:gradle:2.2.3' } } diff --git a/samples/request-button-sample/build.gradle b/samples/request-button-sample/build.gradle index 06388fbd..f1261cbe 100644 --- a/samples/request-button-sample/build.gradle +++ b/samples/request-button-sample/build.gradle @@ -10,7 +10,7 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.1.0' + classpath 'com.android.tools.build:gradle:2.2.3' } } diff --git a/samples/request-button-sample/src/main/java/com/uber/sdk/android/rides/samples/SampleActivity.java b/samples/request-button-sample/src/main/java/com/uber/sdk/android/rides/samples/SampleActivity.java index 4516f8e8..449b551b 100644 --- a/samples/request-button-sample/src/main/java/com/uber/sdk/android/rides/samples/SampleActivity.java +++ b/samples/request-button-sample/src/main/java/com/uber/sdk/android/rides/samples/SampleActivity.java @@ -85,10 +85,6 @@ protected void onCreate(Bundle savedInstanceState) { .setServerToken(SERVER_TOKEN) .build(); - // Optional: to use the SDK in China, set the region property - // See https://developer.uber.com/docs/china for more details. - // configuration.setEndpointRegion(SessionConfiguration.EndpointRegion.CHINA); - validateConfiguration(configuration); ServerTokenSession session = new ServerTokenSession(configuration); diff --git a/test-shared/test/java/com/uber/sdk/android/core/RobolectricTestBase.java b/test-shared/test/java/com/uber/sdk/android/core/RobolectricTestBase.java index 0e4b6fda..be796f8c 100644 --- a/test-shared/test/java/com/uber/sdk/android/core/RobolectricTestBase.java +++ b/test-shared/test/java/com/uber/sdk/android/core/RobolectricTestBase.java @@ -26,10 +26,10 @@ import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; -import org.robolectric.RobolectricGradleTestRunner; +import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; -@RunWith(RobolectricGradleTestRunner.class) +@RunWith(RobolectricTestRunner.class) @Config(constants = BuildConfig.class, sdk = 21) public abstract class RobolectricTestBase { diff --git a/test-shared/test/java/com/uber/sdk/android/core/SdkPreferences.java b/test-shared/test/java/com/uber/sdk/android/core/SdkPreferences.java index 3be9e4f5..467445a3 100644 --- a/test-shared/test/java/com/uber/sdk/android/core/SdkPreferences.java +++ b/test-shared/test/java/com/uber/sdk/android/core/SdkPreferences.java @@ -54,7 +54,7 @@ public String getRedirectUri() { @NonNull public SessionConfiguration.EndpointRegion getRegion() { - return SessionConfiguration.EndpointRegion.valueOf(sharedPreferences.getString(REGION_KEY, SessionConfiguration.EndpointRegion.WORLD.name())); + return SessionConfiguration.EndpointRegion.valueOf(sharedPreferences.getString(REGION_KEY, SessionConfiguration.EndpointRegion.DEFAULT.name())); } @Nullable