1
1
package fr .free .nrw .commons .auth ;
2
2
3
+ import android .Manifest ;
3
4
import android .accounts .Account ;
4
5
import android .accounts .AccountManager ;
5
6
import android .accounts .AccountManagerFuture ;
6
7
import android .accounts .AuthenticatorException ;
7
8
import android .accounts .OperationCanceledException ;
9
+ import android .content .pm .PackageManager ;
8
10
import android .os .AsyncTask ;
9
11
import android .os .Bundle ;
12
+ import android .support .annotation .Nullable ;
13
+ import android .support .v4 .app .ActivityCompat ;
10
14
import android .support .v7 .app .AppCompatActivity ;
11
15
12
16
import java .io .IOException ;
@@ -20,23 +24,24 @@ public abstract class AuthenticatedActivity extends AppCompatActivity {
20
24
CommonsApplication app ;
21
25
22
26
private String authCookie ;
23
-
27
+
24
28
public AuthenticatedActivity (String accountType ) {
25
- this .accountType = accountType ;
29
+ this .accountType = accountType ;
26
30
}
27
-
31
+
28
32
private class GetAuthCookieTask extends AsyncTask <Void , String , String > {
29
33
private Account account ;
30
34
private AccountManager accountManager ;
35
+
31
36
public GetAuthCookieTask (Account account , AccountManager accountManager ) {
32
37
this .account = account ;
33
38
this .accountManager = accountManager ;
34
39
}
35
-
40
+
36
41
@ Override
37
42
protected void onPostExecute (String result ) {
38
43
super .onPostExecute (result );
39
- if (result != null ) {
44
+ if (result != null ) {
40
45
authCookie = result ;
41
46
onAuthCookieAcquired (result );
42
47
} else {
@@ -60,26 +65,38 @@ protected String doInBackground(Void... params) {
60
65
}
61
66
}
62
67
}
63
-
68
+
64
69
private class AddAccountTask extends AsyncTask <Void , String , String > {
65
70
private AccountManager accountManager ;
71
+
66
72
public AddAccountTask (AccountManager accountManager ) {
67
73
this .accountManager = accountManager ;
68
74
}
69
-
75
+
70
76
@ Override
71
77
protected void onPostExecute (String result ) {
72
78
super .onPostExecute (result );
73
- if (result != null ) {
74
- Account [] allAccounts =accountManager .getAccountsByType (accountType );
75
- Account curAccount = allAccounts [0 ];
79
+ if (result != null ) {
80
+ Account curAccount = getCurrentAccount ();
76
81
GetAuthCookieTask getCookieTask = new GetAuthCookieTask (curAccount , accountManager );
77
82
getCookieTask .execute ();
78
83
} else {
79
84
onAuthFailure ();
80
85
}
81
86
}
82
87
88
+ @ Nullable
89
+ private Account getCurrentAccount () {
90
+ if (ActivityCompat .checkSelfPermission (AuthenticatedActivity .this , Manifest .permission .GET_ACCOUNTS ) != PackageManager .PERMISSION_GRANTED ) {
91
+ return null ;
92
+ }
93
+ Account [] allAccounts = accountManager .getAccountsByType (accountType );
94
+ if (allAccounts == null ) {
95
+ return null ;
96
+ }
97
+ return allAccounts [0 ];
98
+ }
99
+
83
100
@ Override
84
101
protected String doInBackground (Void ... params ) {
85
102
AccountManagerFuture <Bundle > resultFuture = accountManager .addAccount (accountType , null , null , null , AuthenticatedActivity .this , null , null );
0 commit comments