Skip to content
This repository has been archived by the owner on Feb 11, 2022. It is now read-only.

Commit

Permalink
Merge branch 'master' of github.com:novoda/simplechromecustomtabs
Browse files Browse the repository at this point in the history
  • Loading branch information
juankysoriano committed Apr 8, 2016
2 parents c0bdfcd + 61a5f1d commit afdb0c1
Show file tree
Hide file tree
Showing 8 changed files with 44 additions and 19 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,14 @@ dependencies {
1) Initialize `SimpleChromeCustomTabs`, you only have to this once.

```java
SimpleChromeCustomTabs.initialize(context)
SimpleChromeCustomTabs.initialize(context);
```

2) Connect `SimpleChromeCustomTabs` to your `Activity` as soon as it is resumed.

```java
public void onResume() {
super.onResume()
super.onResume();
SimpleChromeCustomTabs.getInstance().connectTo(this);
}
```
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,9 @@ public void navigateTo(Uri url, Activity activityContext) {
*/
@Override
public void connectTo(@NonNull Activity activity) {
connection.connectTo(activity);
if (isDisconnected()) {
connection.connectTo(activity);
}
}

@Override
Expand All @@ -120,7 +122,14 @@ public CustomTabsSession newSession() {

@Override
public void disconnectFrom(@NonNull Activity activity) {
connection.disconnectFrom(activity);
if (isConnected()) {
connection.disconnectFrom(activity);
}
}

@Override
public boolean isDisconnected() {
return !isConnected();
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package com.novoda.simplechromecustomtabs.connection;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.customtabs.CustomTabsClient;
import android.support.customtabs.CustomTabsServiceConnection;
import android.util.Log;

import com.novoda.simplechromecustomtabs.SimpleChromeCustomTabs;
import com.novoda.simplechromecustomtabs.provider.AvailableAppProvider;
Expand All @@ -24,7 +25,7 @@ public static Binder newInstance() {
return new Binder(availableAppProvider);
}

public void bindCustomTabsServiceTo(@NonNull final Activity activity, ServiceConnectionCallback callback) {
public void bindCustomTabsServiceTo(@NonNull final Context context, ServiceConnectionCallback callback) {
if (isConnected()) {
return;
}
Expand All @@ -34,7 +35,7 @@ public void bindCustomTabsServiceTo(@NonNull final Activity activity, ServiceCon
new SimpleChromeCustomTabsAvailableAppProvider.PackageFoundCallback() {
@Override
public void onPackageFound(String packageName) {
CustomTabsClient.bindCustomTabsService(activity, packageName, serviceConnection);
CustomTabsClient.bindCustomTabsService(context, packageName, serviceConnection);
}

@Override
Expand All @@ -49,14 +50,19 @@ private boolean isConnected() {
return serviceConnection != null;
}

public void unbindCustomTabsService(@NonNull Activity activity) {
public void unbindCustomTabsService(@NonNull Context context) {
if (isDisconnected()) {
return;
}

activity.unbindService(serviceConnection);
serviceConnection.onServiceDisconnected(null);
serviceConnection = null;
try {
context.unbindService(serviceConnection);
} catch (IllegalArgumentException iae) {
Log.e("SimpleChromeCustomTabs", "There was a problem unbinding from a CustomTabs service. :/", iae);
} finally {
serviceConnection.onServiceDisconnected(null);
serviceConnection = null;
}
}

private boolean isDisconnected() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ public interface Connection {

void disconnectFrom(@NonNull Activity activity);

boolean isDisconnected();

}
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public static SimpleChromeCustomTabsConnection newInstance() {

@Override
public void connectTo(@NonNull Activity activity) {
binder.bindCustomTabsServiceTo(activity, this);
binder.bindCustomTabsServiceTo(activity.getApplicationContext(), this);
}

@Override
Expand Down Expand Up @@ -64,7 +64,12 @@ private boolean hasConnectedClient() {

@Override
public void disconnectFrom(@NonNull Activity activity) {
binder.unbindCustomTabsService(activity);
binder.unbindCustomTabsService(activity.getApplicationContext());
}

@Override
public boolean isDisconnected() {
return !isConnected();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public SimpleChromeCustomTabsIntentBuilder showingTitle() {
* TODO Allow intent creation without connection. Might be useful to re-customise a current session.
*/
public CustomTabsIntent createIntent() {
if (!connection.isConnected()) {
if (connection.isDisconnected()) {
throw new DeveloperError("An active connection to custom tabs service is required for intent creation");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.robolectric.Robolectric;

import static org.fest.assertions.api.Assertions.assertThat;
import static org.mockito.Mockito.*;
Expand All @@ -25,21 +26,23 @@ public class SimpleChromeCustomTabsConnectionTest {
public void setUp() {
initMocks(this);

when(mockActivity.getApplicationContext()).thenReturn(Robolectric.application);

simpleChromeCustomTabsConnection = new SimpleChromeCustomTabsConnection(mockBinder);
}

@Test
public void connectToBindsActivityToService() {
public void connectToBindsApplicationContextToService() {
simpleChromeCustomTabsConnection.connectTo(mockActivity);

verify(mockBinder).bindCustomTabsServiceTo(mockActivity, simpleChromeCustomTabsConnection);
verify(mockBinder).bindCustomTabsServiceTo(mockActivity.getApplicationContext(), simpleChromeCustomTabsConnection);
}

@Test
public void disconnectFromUnbindsActivityFromService() {
public void disconnectFromUnbindsApplicationContextFromService() {
simpleChromeCustomTabsConnection.disconnectFrom(mockActivity);

verify(mockBinder).unbindCustomTabsService(mockActivity);
verify(mockBinder).unbindCustomTabsService(mockActivity.getApplicationContext());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public void showingTitleAddsShowingTitleComposer() {
}

private void givenIsDisconnected() {
when(mockSimpleChromeCustomTabsConnection.isConnected()).thenReturn(false);
when(mockSimpleChromeCustomTabsConnection.isDisconnected()).thenReturn(true);
}

private void givenIsConnected() {
Expand Down

0 comments on commit afdb0c1

Please sign in to comment.