blob: deb738b27a45b8f9879f6c60d3c3aa84883af46e [file] [log] [blame]
package org.robolectric.shadows.gms;
import android.app.Activity;
import android.app.Dialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface.OnCancelListener;
import android.content.Intent;
import android.content.res.Resources;
import androidx.fragment.app.Fragment;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.common.base.Preconditions;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.Resetter;
/**
* Calls to static method of {@link GooglePlayServicesUtil} will be redirected to the provided
* {@link GooglePlayServicesUtilImpl} implementation. Use
* {@link #provideImpl(GooglePlayServicesUtilImpl)} to
* set the implementation instance. By default, a {@link GooglePlayServicesUtilImpl} is used in call
* redirection. Use mocks or subclassing {@link GooglePlayServicesUtilImpl} to achieve desired
* behaviors.
*/
@Implements(GooglePlayServicesUtil.class)
public class ShadowGooglePlayServicesUtil {
private static GooglePlayServicesUtilImpl googlePlayServicesUtilImpl =
new GooglePlayServicesUtilImpl();
public static synchronized GooglePlayServicesUtilImpl getImpl() {
return googlePlayServicesUtilImpl;
}
public static synchronized void provideImpl(GooglePlayServicesUtilImpl impl) {
googlePlayServicesUtilImpl = Preconditions.checkNotNull(impl);
}
@Resetter
public static synchronized void reset() {
googlePlayServicesUtilImpl = new GooglePlayServicesUtilImpl();
}
@Implementation
public static synchronized Context getRemoteContext(Context context) {
return googlePlayServicesUtilImpl.getRemoteContext(context);
}
@Implementation
public static synchronized Resources getRemoteResource(Context context) {
return googlePlayServicesUtilImpl.getRemoteResource(context);
}
@Implementation
public static synchronized boolean showErrorDialogFragment(int errorCode, Activity activity,
Fragment fragment, int requestCode, OnCancelListener cancelListener) {
return googlePlayServicesUtilImpl.showErrorDialogFragment(
errorCode, activity, fragment, requestCode, cancelListener);
}
@Implementation
public static synchronized boolean showErrorDialogFragment(int errorCode, Activity activity,
int requestCode) {
return googlePlayServicesUtilImpl.showErrorDialogFragment(
errorCode, activity, requestCode);
}
@Implementation
public static synchronized boolean showErrorDialogFragment(
int errorCode, Activity activity, int requestCode, OnCancelListener cancelListener) {
return googlePlayServicesUtilImpl.showErrorDialogFragment(
errorCode, activity, requestCode, cancelListener);
}
@Implementation
public static synchronized Dialog getErrorDialog(int errorCode, Activity activity,
int requestCode) {
return googlePlayServicesUtilImpl.getErrorDialog(errorCode, activity, requestCode);
}
@Implementation
public static synchronized Dialog getErrorDialog(int errorCode, Activity activity,
int requestCode, OnCancelListener cancelListener) {
return googlePlayServicesUtilImpl.getErrorDialog(
errorCode, activity, requestCode, cancelListener);
}
@Implementation
public static synchronized PendingIntent getErrorPendingIntent(int errorCode, Context context,
int requestCode) {
return googlePlayServicesUtilImpl.getErrorPendingIntent(errorCode, context, requestCode);
}
@Implementation
public static synchronized String getOpenSourceSoftwareLicenseInfo(Context context) {
return googlePlayServicesUtilImpl.getOpenSourceSoftwareLicenseInfo(context);
}
@Implementation
public static synchronized int isGooglePlayServicesAvailable(Context context) {
return googlePlayServicesUtilImpl.isGooglePlayServicesAvailable(context);
}
@Implementation
public static synchronized void showErrorNotification(int errorCode, Context context) {
googlePlayServicesUtilImpl.showErrorNotification(errorCode, context);
}
/**
* Class containing methods with same signatures of the static methods of
* {@link GooglePlayServicesUtil}.
*/
public static class GooglePlayServicesUtilImpl {
public Dialog getErrorDialog(int errorCode, Activity activity, int requestCode) {
return getErrorDialog(errorCode, activity, requestCode, null);
}
public Dialog getErrorDialog(int errorCode, Activity activity, int requestCode,
OnCancelListener cancelListener) {
if (errorCode == ConnectionResult.SUCCESS) {
return null;
}
return new Dialog(RuntimeEnvironment.getApplication());
}
public PendingIntent getErrorPendingIntent(int errorCode, Context context,
int requestCode) {
if (errorCode == ConnectionResult.SUCCESS) {
return null;
}
return PendingIntent.getActivity(
context, requestCode, new Intent(), PendingIntent.FLAG_CANCEL_CURRENT);
}
public String getOpenSourceSoftwareLicenseInfo(Context context) {
return "license";
}
public Context getRemoteContext(Context context) {
return RuntimeEnvironment.getApplication();
}
public Resources getRemoteResource(Context context) {
return RuntimeEnvironment.getApplication().getResources();
}
public int isGooglePlayServicesAvailable(Context context) {
return ConnectionResult.SERVICE_MISSING;
}
public boolean showErrorDialogFragment(int errorCode, Activity activity,
Fragment fragment, int requestCode, OnCancelListener cancelListener) {
return false;
}
public boolean showErrorDialogFragment(int errorCode, Activity activity, int requestCode) {
return false;
}
public boolean showErrorDialogFragment(int errorCode, Activity activity, int requestCode,
OnCancelListener cancelListener) {
return false;
}
public void showErrorNotification(int errorCode, Context context) {}
}
}