8
8
import android .support .v4 .app .FragmentActivity ;
9
9
import android .support .v7 .app .AppCompatActivity ;
10
10
import android .support .v7 .widget .Toolbar ;
11
+ import android .text .TextUtils ;
11
12
import android .util .Log ;
12
13
import android .util .Patterns ;
13
14
import android .view .View ;
33
34
import org .json .JSONException ;
34
35
import org .json .JSONObject ;
35
36
37
+ import java .net .URI ;
38
+ import java .net .URISyntaxException ;
36
39
import java .util .List ;
37
40
38
41
public class LoginActivity extends AppCompatActivity implements View .OnClickListener ,
@@ -41,13 +44,15 @@ public class LoginActivity extends AppCompatActivity implements View.OnClickList
41
44
private static final int REQUEST_CODE_RESOLVE_ERR = 9000 ;
42
45
private static final int REQUEST_CODE_SIGN_IN = 9001 ;
43
46
47
+ private boolean startedFromAddRealm = false ;
44
48
private ProgressDialog connectionProgressDialog ;
45
49
private GoogleApiClient mGoogleApiClient ;
46
50
private EditText mServerEditText ;
47
51
private EditText mUserName ;
48
52
private EditText mPassword ;
49
53
private EditText serverIn ;
50
54
private EditText realmNameET ;
55
+ String serverURL ;
51
56
52
57
private View mGoogleSignInButton ;
53
58
@ Override
@@ -165,6 +170,43 @@ protected void onStop() {
165
170
super .onStop ();
166
171
}
167
172
173
+ private String getServerURL () {
174
+ if (ZulipApp .get ().serverStringSet .contains (realmNameET .getText ().toString ())) {
175
+ Toast .makeText (LoginActivity .this , R .string .realm_exists , Toast .LENGTH_SHORT ).show ();
176
+ return null ;
177
+ }
178
+
179
+ String serverURL = mServerEditText .getText ().toString ();
180
+ int errorMessage = R .string .invalid_server_domain ;
181
+
182
+ if (serverURL .isEmpty ()) {
183
+ serverIn .setError (getString (errorMessage ));
184
+ return "" ;
185
+ }
186
+
187
+ // add http if scheme is not included
188
+ if (!serverURL .contains ("://" )) {
189
+ serverURL = "http://" + serverURL ;
190
+ }
191
+
192
+ Uri serverUri = Uri .parse (serverURL );
193
+ if (serverUri .isRelative ()) {
194
+ serverUri = serverUri .buildUpon ().scheme ("http" ).build ();
195
+ }
196
+
197
+ // if does not begin with "api.zulip.com" and if the path is empty, use "/api" as first segment in the path
198
+ List <String > paths = serverUri .getPathSegments ();
199
+ if (!serverUri .getHost ().startsWith ("api." ) && paths .isEmpty ()) {
200
+ serverUri = serverUri .buildUpon ().appendEncodedPath ("api/" ).build ();
201
+ }
202
+ serverIn .setText (serverUri .toString ());
203
+ mServerEditText .setText (serverUri .toString ());
204
+ mServerEditText .setEnabled (false );
205
+ ((ZulipApp ) getApplication ()).setServerURL (serverUri .toString ());
206
+ Toast .makeText (this , getString (R .string .logging_into_server , serverUri .toString ()), Toast .LENGTH_SHORT ).show ();
207
+ return serverUri .toString ();
208
+ }
209
+
168
210
private boolean checkForError () {
169
211
String serverURL = serverIn .getText ().toString ();
170
212
int errorMessage = R .string .invalid_server_domain ;
@@ -208,7 +250,7 @@ private void handleSignInResult(GoogleSignInResult result) {
208
250
return ;
209
251
}
210
252
211
- final AsyncLogin loginTask = new AsyncLogin (LoginActivity .this , "google-oauth2-token" , account .getIdToken (), false );
253
+ final AsyncLogin loginTask = new AsyncLogin (LoginActivity .this , "google-oauth2-token" , account .getIdToken (), getRealmName (), startedFromAddRealm , serverURL , false );
212
254
loginTask .setCallback (new AsyncTaskCompleteListener () {
213
255
@ Override
214
256
public void onTaskComplete (String result , JSONObject object ) {
@@ -236,6 +278,20 @@ public void onTaskFailure(String result) {
236
278
}
237
279
}
238
280
281
+ private String getRealmName () {
282
+ if (TextUtils .isEmpty (realmNameET .getText ())) {
283
+ String server = ZulipApp .get ().getServerURI ();
284
+ URI uri = null ;
285
+ try {
286
+ uri = new URI (server );
287
+ } catch (URISyntaxException e ) {
288
+ return server ;
289
+ }
290
+ return uri .getHost ();
291
+ }
292
+ return realmNameET .getText ().toString ();
293
+ }
294
+
239
295
protected void openLegal () {
240
296
Intent i = new Intent (this , LegalActivity .class );
241
297
startActivityForResult (i , 0 );
@@ -305,14 +361,15 @@ public void onClick(View v) {
305
361
setupGoogleSignIn ();
306
362
break ;
307
363
case R .id .zulip_login :
308
- if (!isInputValid ()) {
309
- return ;
310
- }
311
- Toast .makeText (this , getString (R .string .logging_into_server , ZulipApp .get ().getServerURI ()), Toast .LENGTH_SHORT ).show ();
364
+ if (!isInputValid ()) return ;
365
+ serverURL = getServerURL ();
366
+ if (serverURL == null ) return ;
312
367
connectionProgressDialog .show ();
313
368
314
369
AsyncLogin alog = new AsyncLogin (LoginActivity .this ,
315
- mUserName .getText ().toString (), mPassword .getText ().toString (), false );
370
+ mUserName .getText ().toString (), mPassword .getText ().toString (),
371
+ getRealmName (), startedFromAddRealm , serverURL , false );
372
+
316
373
// Remove the CPD when done
317
374
alog .setCallback (new AsyncTaskCompleteListener () {
318
375
@ Override
@@ -334,7 +391,7 @@ public void onTaskFailure(String result) {
334
391
case R .id .local_server_button :
335
392
if (!isInputValidForDevAuth ()) return ;
336
393
connectionProgressDialog .show ();
337
- AsyncDevGetEmails asyncDevGetEmails = new AsyncDevGetEmails (LoginActivity .this );
394
+ AsyncDevGetEmails asyncDevGetEmails = new AsyncDevGetEmails (LoginActivity .this , getServerURL (), getRealmName (), startedFromAddRealm );
338
395
asyncDevGetEmails .setCallback (new AsyncTaskCompleteListener () {
339
396
@ Override
340
397
public void onTaskComplete (String result , JSONObject jsonObject ) {
0 commit comments