IprintGoogleSignIn.java 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package com.epson.iprint.storage.gdrivev3;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.support.annotation.NonNull;
  6. import android.support.annotation.Nullable;
  7. import com.google.android.gms.auth.api.signin.GoogleSignIn;
  8. import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
  9. import com.google.android.gms.auth.api.signin.GoogleSignInClient;
  10. import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
  11. import com.google.android.gms.common.api.Scope;
  12. import com.google.android.gms.tasks.OnCompleteListener;
  13. import com.google.android.gms.tasks.OnFailureListener;
  14. import com.google.android.gms.tasks.OnSuccessListener;
  15. import com.google.android.gms.tasks.Task;
  16. public class IprintGoogleSignIn {
  17. public enum OperationType {
  18. DOWNLOAD,
  19. UPLOAD
  20. }
  21. public interface SignInListener {
  22. void onDisconnectCompleted();
  23. void onSignInComplete(boolean z, GoogleSignInAccount googleSignInAccount);
  24. }
  25. public interface StartActivityResultCallback {
  26. void onActivityResult(int i, Intent intent);
  27. }
  28. /* access modifiers changed from: private */
  29. public static void handleLogin(Intent intent, final SignInListener signInListener) {
  30. GoogleSignIn.getSignedInAccountFromIntent(intent).addOnSuccessListener(new OnSuccessListener<GoogleSignInAccount>() {
  31. public void onSuccess(GoogleSignInAccount googleSignInAccount) {
  32. signInListener.onSignInComplete(true, googleSignInAccount);
  33. }
  34. }).addOnFailureListener(new OnFailureListener() {
  35. public void onFailure(@NonNull Exception exc) {
  36. signInListener.onSignInComplete(false, (GoogleSignInAccount) null);
  37. }
  38. });
  39. }
  40. public void startSignIn(@NonNull final SignInListener signInListener, @NonNull ActivityWrapper activityWrapper, @NonNull OperationType operationType) {
  41. if (getSignInAccount(activityWrapper.getActivity()) != null) {
  42. addTargetScope(activityWrapper, operationType);
  43. } else {
  44. activityWrapper.requestSignIn(getSignInIntent(activityWrapper.getActivity(), operationType), new StartActivityResultCallback() {
  45. public void onActivityResult(int i, Intent intent) {
  46. if (i != -1) {
  47. signInListener.onSignInComplete(false, (GoogleSignInAccount) null);
  48. } else {
  49. IprintGoogleSignIn.handleLogin(intent, signInListener);
  50. }
  51. }
  52. });
  53. }
  54. }
  55. private void addTargetScope(@NonNull ActivityWrapper activityWrapper, @NonNull OperationType operationType) {
  56. Scope targetScope = getTargetScope(operationType);
  57. GoogleSignInAccount signInAccount = getSignInAccount(activityWrapper.getActivity());
  58. GoogleSignIn.requestPermissions(activityWrapper.getActivity(), activityWrapper.getSingInAddScopeRequestCode(), signInAccount, targetScope);
  59. }
  60. @NonNull
  61. private static Intent getSignInIntent(Activity activity, OperationType operationType) {
  62. return getGoogleSignInClient(activity, operationType).getSignInIntent();
  63. }
  64. @NonNull
  65. private static GoogleSignInClient getGoogleSignInClient(@NonNull Activity activity, OperationType operationType) {
  66. return GoogleSignIn.getClient(activity, new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().requestScopes(getTargetScope(operationType), new Scope[0]).build());
  67. }
  68. @NonNull
  69. private static Scope getTargetScope(OperationType operationType) {
  70. if (operationType == OperationType.DOWNLOAD) {
  71. return new Scope(GoogleDownloader.getTargetScope());
  72. }
  73. return new Scope(DriveWriter.getWriteScope());
  74. }
  75. public void disconnectAccount(@NonNull ActivityWrapper activityWrapper, @NonNull final SignInListener signInListener) {
  76. getGoogleSignInClient(activityWrapper.getActivity(), OperationType.DOWNLOAD).revokeAccess().addOnCompleteListener(activityWrapper.getActivity(), new OnCompleteListener<Void>() {
  77. public void onComplete(@NonNull Task<Void> task) {
  78. signInListener.onDisconnectCompleted();
  79. }
  80. });
  81. }
  82. public boolean isSignInValid(@NonNull Context context, OperationType operationType) {
  83. GoogleSignInAccount signInAccount = getSignInAccount(context);
  84. if (signInAccount == null) {
  85. return false;
  86. }
  87. return signInAccount.getGrantedScopes().contains(getTargetScope(operationType));
  88. }
  89. @Nullable
  90. public GoogleSignInAccount getSignInAccount(@NonNull Context context) {
  91. return GoogleSignIn.getLastSignedInAccount(context);
  92. }
  93. }