From 562f5498d17b06eaf78153fee95df0aea13855ae Mon Sep 17 00:00:00 2001 From: Mario Danic Date: Fri, 12 Jan 2018 15:25:15 +0100 Subject: [PATCH] Improvements to login Signed-off-by: Mario Danic --- .../talk/activities/CallActivity.java | 6 +- .../AccountVerificationController.java | 16 +++-- .../controllers/SwitchAccountController.java | 6 +- .../controllers/WebViewLoginController.java | 65 ++++++++++++------- .../com/nextcloud/talk/utils/PushUtils.java | 6 +- .../talk/utils/bundle/BundleKeys.java | 1 + .../talk/utils/database/user/UserUtils.java | 17 +++-- .../res/layout/controller_web_view_login.xml | 11 ++-- 8 files changed, 83 insertions(+), 45 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java index 0e94446b3..33af8ca16 100644 --- a/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java +++ b/app/src/main/java/com/nextcloud/talk/activities/CallActivity.java @@ -242,9 +242,9 @@ public class CallActivity extends AppCompatActivity { basicInitialization(); if (!userEntity.getCurrent()) { - userUtils.createOrUpdateUser(userEntity.getUsername(), - userEntity.getToken(), userEntity.getBaseUrl(), null, - null, true, null) + userUtils.createOrUpdateUser(null, + null, null, null, + null, true, null, userEntity.getId()) .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java index 735e1bb07..87f2d0af2 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/AccountVerificationController.java @@ -82,6 +82,7 @@ public class AccountVerificationController extends BaseController { private String username; private String token; private boolean isAccountImport; + private String originalProtocol; public AccountVerificationController(Bundle args) { super(args); @@ -92,6 +93,9 @@ public class AccountVerificationController extends BaseController { if (args.containsKey(BundleKeys.KEY_IS_ACCOUNT_IMPORT)) { isAccountImport = true; } + if (args.containsKey(BundleKeys.KEY_ORIGINAL_PROTOCOL)) { + originalProtocol = args.getString(BundleKeys.KEY_ORIGINAL_PROTOCOL); + } } } @@ -115,7 +119,8 @@ public class AccountVerificationController extends BaseController { dispose(null); - if (isAccountImport && !baseUrl.startsWith("http://") && !baseUrl.startsWith("https://")) { + if (isAccountImport && !baseUrl.startsWith("http://") && !baseUrl.startsWith("https://") || (!TextUtils + .isEmpty(originalProtocol) && !baseUrl.startsWith(originalProtocol))) { determineBaseUrlProtocol(true); } else { checkEverything(); @@ -127,6 +132,9 @@ public class AccountVerificationController extends BaseController { cookieManager.getCookieStore().removeAll(); String queryUrl; + + baseUrl = baseUrl.replace("http://", "").replace("https://", ""); + if (checkForcedHttps) { queryUrl = "https://" + baseUrl + ApiHelper.getUrlPostfixForStatus(); } else { @@ -188,7 +196,7 @@ public class AccountVerificationController extends BaseController { if (!TextUtils.isEmpty(displayName)) { dbQueryDisposable = userUtils.createOrUpdateUser(username, token, baseUrl, displayName, null, true, - userProfileOverall.getOcs().getData().getUserId()) + userProfileOverall.getOcs().getData().getUserId(), null) .subscribeOn(Schedulers.newThread()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(userEntity -> { @@ -300,7 +308,7 @@ public class AccountVerificationController extends BaseController { @Override public void onComplete() { - new Handler().postDelayed(() -> getRouter().popToRoot(), 10000); + new Handler().postDelayed(() -> getRouter().popToRoot(), 7500); } @Override @@ -311,7 +319,7 @@ public class AccountVerificationController extends BaseController { } else { ErrorMessageHolder.getInstance().setMessageType( ErrorMessageHolder.ErrorMessageType.FAILED_TO_IMPORT_ACCOUNT); - new Handler().postDelayed(() -> getRouter().popToRoot(), 10000); + new Handler().postDelayed(() -> getRouter().popToRoot(), 7500); } } diff --git a/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java b/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java index f18a441ed..7f302c968 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/SwitchAccountController.java @@ -97,9 +97,9 @@ public class SwitchAccountController extends BaseController { public boolean onItemClick(int position) { if (userItems.size() > position) { UserEntity userEntity = ((AdvancedUserItem) userItems.get(position)).getEntity(); - userUtils.createOrUpdateUser(userEntity.getUsername(), - userEntity.getToken(), userEntity.getBaseUrl(), null, - null, true, null) + userUtils.createOrUpdateUser(null, + null, null, null, + null, true, null, userEntity.getId()) .subscribe(new Observer() { @Override public void onSubscribe(Disposable d) { diff --git a/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java b/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java index f61b5c606..5ed4f1353 100644 --- a/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java +++ b/app/src/main/java/com/nextcloud/talk/controllers/WebViewLoginController.java @@ -280,29 +280,50 @@ public class WebViewLoginController extends BaseController { getRouter().popToRoot(); } - // We use the URL user entered because one provided by the server is NOT reliable ErrorMessageHolder.ErrorMessageType finalErrorMessageType = errorMessageType; - userQueryDisposable = userUtils.createOrUpdateUser(loginData.getUsername(), loginData.getToken(), - loginData.getServerUrl(), null, null, true, - null). - subscribe(userEntity -> { - cookieManager.getCookieStore().removeAll(); - if (!isPasswordUpdate && finalErrorMessageType == null) { - BundleBuilder bundleBuilder = new BundleBuilder(new Bundle()); - bundleBuilder.putString(BundleKeys.KEY_USERNAME, userEntity.getUsername()); - bundleBuilder.putString(BundleKeys.KEY_TOKEN, userEntity.getToken()); - bundleBuilder.putString(BundleKeys.KEY_BASE_URL, userEntity.getBaseUrl()); - getRouter().pushController(RouterTransaction.with(new AccountVerificationController - (bundleBuilder.build())).pushChangeHandler(new HorizontalChangeHandler()) - .popChangeHandler(new HorizontalChangeHandler())); - } else { - if (finalErrorMessageType != null) { - ErrorMessageHolder.getInstance().setMessageType(finalErrorMessageType); - } - getRouter().popToRoot(); - } - }, throwable -> dispose(), - this::dispose); + cookieManager.getCookieStore().removeAll(); + + if (!isPasswordUpdate && finalErrorMessageType == null) { + BundleBuilder bundleBuilder = new BundleBuilder(new Bundle()); + bundleBuilder.putString(BundleKeys.KEY_USERNAME, loginData.getUsername()); + bundleBuilder.putString(BundleKeys.KEY_TOKEN, loginData.getToken()); + bundleBuilder.putString(BundleKeys.KEY_BASE_URL, loginData.getServerUrl()); + String protocol = ""; + + if (baseUrl.startsWith("http://")) { + protocol = "http://"; + } else if (baseUrl.startsWith("https://")) { + protocol = "https://"; + } + + if (!TextUtils.isEmpty(protocol)) { + bundleBuilder.putString(BundleKeys.KEY_ORIGINAL_PROTOCOL, protocol); + } + getRouter().pushController(RouterTransaction.with(new AccountVerificationController + (bundleBuilder.build())).pushChangeHandler(new HorizontalChangeHandler()) + .popChangeHandler(new HorizontalChangeHandler())); + } else { + if (isPasswordUpdate) { + if (currentUser != null) { + userQueryDisposable = userUtils.createOrUpdateUser(null, null, + null, null, null, true, + null, currentUser.getId()). + subscribe(userEntity -> { + if (finalErrorMessageType != null) { + ErrorMessageHolder.getInstance().setMessageType(finalErrorMessageType); + } + getRouter().popToRoot(); + }, throwable -> dispose(), + this::dispose); + } + } else { + if (finalErrorMessageType != null) { + ErrorMessageHolder.getInstance().setMessageType(finalErrorMessageType); + } + getRouter().popToRoot(); + + } + } } } } diff --git a/app/src/main/java/com/nextcloud/talk/utils/PushUtils.java b/app/src/main/java/com/nextcloud/talk/utils/PushUtils.java index 694984619..061f48b16 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/PushUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/PushUtils.java @@ -301,11 +301,11 @@ public class PushUtils { .getData().getPublicKey()); pushConfigurationState.setUsesRegularPass(false); - userUtils.createOrUpdateUser(userEntity.getUsername(), - userEntity.getToken(), userEntity.getBaseUrl(), + userUtils.createOrUpdateUser(null, + null, null, userEntity.getDisplayName(), LoganSquare.serialize(pushConfigurationState), null, - null) + null, userEntity.getId()) .subscribe(new Consumer() { @Override public void accept(UserEntity userEntity) throws Exception { diff --git a/app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.java b/app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.java index 766e6c7cc..a6ea4de64 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.java +++ b/app/src/main/java/com/nextcloud/talk/utils/bundle/BundleKeys.java @@ -25,4 +25,5 @@ public class BundleKeys { public static final String KEY_TOKEN = "KEY_TOKEN"; public static final String KEY_BASE_URL = "KEY_BASE_URL"; public static final String KEY_IS_ACCOUNT_IMPORT = "IS_ACCOUNT_IMPORT"; + public static final String KEY_ORIGINAL_PROTOCOL = "ORIGINAL_PROTOCOL"; } diff --git a/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java b/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java index 3f6eab18f..68f40c279 100644 --- a/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java +++ b/app/src/main/java/com/nextcloud/talk/utils/database/user/UserUtils.java @@ -148,13 +148,20 @@ public class UserUtils { } - public Observable createOrUpdateUser(String username, String token, String serverUrl, + public Observable createOrUpdateUser(@Nullable String username, @Nullable String token, @Nullable String + serverUrl, @Nullable String displayName, @Nullable String pushConfigurationState, @Nullable Boolean currentUser, - @Nullable String userId) { - Result findUserQueryResult = dataStore.select(User.class).where(UserEntity.USERNAME.eq(username). - and(UserEntity.BASE_URL.eq(serverUrl.toLowerCase()))).limit(1).get(); + @Nullable String userId, + @Nullable Long internalId) { + Result findUserQueryResult; + if (internalId == null) { + findUserQueryResult = dataStore.select(User.class).where(UserEntity.USERNAME.eq(username). + and(UserEntity.BASE_URL.eq(serverUrl.toLowerCase()))).limit(1).get(); + } else { + findUserQueryResult = dataStore.select(User.class).where(UserEntity.ID.eq(internalId)).get(); + } UserEntity user = (UserEntity) findUserQueryResult.firstOrNull(); @@ -183,7 +190,7 @@ public class UserUtils { user.setUserId(userId); } - if (!token.equals(user.getToken())) { + if (token != null && !token.equals(user.getToken())) { user.setToken(token); } diff --git a/app/src/main/res/layout/controller_web_view_login.xml b/app/src/main/res/layout/controller_web_view_login.xml index 5836da41a..463eebca9 100644 --- a/app/src/main/res/layout/controller_web_view_login.xml +++ b/app/src/main/res/layout/controller_web_view_login.xml @@ -20,9 +20,9 @@ --> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:indeterminateTint="@color/colorPrimary" + android:indeterminateTintMode="src_in"/>