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