diff --git a/jni/dc_wrapper.c b/jni/dc_wrapper.c
index 398b58bb7..6e715da7b 100644
--- a/jni/dc_wrapper.c
+++ b/jni/dc_wrapper.c
@@ -854,19 +854,10 @@ JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteAllLocations(JNIEnv *env,
}
-JNIEXPORT jlong Java_com_b44t_messenger_DcContext_getProviderFromDomainCPtr(JNIEnv *env, jobject obj, jstring domain)
-{
- CHAR_REF(domain);
- jlong ret = (jlong)dc_provider_new_from_domain(domainPtr);
- CHAR_UNREF(domain);
- return ret;
-}
-
-
JNIEXPORT jlong Java_com_b44t_messenger_DcContext_getProviderFromEmailCPtr(JNIEnv *env, jobject obj, jstring email)
{
CHAR_REF(email);
- jlong ret = (jlong)dc_provider_new_from_email(emailPtr);
+ jlong ret = (jlong)dc_provider_new_from_email(get_dc_context(env, obj), emailPtr);
CHAR_UNREF(email);
return ret;
}
@@ -1602,33 +1593,15 @@ JNIEXPORT void Java_com_b44t_messenger_DcProvider_unrefProviderCPtr(JNIEnv *env,
}
-JNIEXPORT jstring Java_com_b44t_messenger_DcProvider_getName(JNIEnv *env, jobject obj)
-{
- char* temp = dc_provider_get_name(get_dc_provider(env, obj));
- jstring ret = JSTRING_NEW(temp);
- dc_str_unref(temp);
- return ret;
-}
-
-
JNIEXPORT jint Java_com_b44t_messenger_DcProvider_getStatus(JNIEnv *env, jobject obj)
{
return (jint)dc_provider_get_status(get_dc_provider(env, obj));
}
-JNIEXPORT jstring Java_com_b44t_messenger_DcProvider_getStatusDate(JNIEnv *env, jobject obj)
+JNIEXPORT jstring Java_com_b44t_messenger_DcProvider_getBeforeLoginHint(JNIEnv *env, jobject obj)
{
- char* temp = dc_provider_get_status_date(get_dc_provider(env, obj));
- jstring ret = JSTRING_NEW(temp);
- dc_str_unref(temp);
- return ret;
-}
-
-
-JNIEXPORT jstring Java_com_b44t_messenger_DcProvider_getMarkdown(JNIEnv *env, jobject obj)
-{
- char* temp = dc_provider_get_markdown(get_dc_provider(env, obj));
+ char* temp = dc_provider_get_before_login_hint(get_dc_provider(env, obj));
jstring ret = JSTRING_NEW(temp);
dc_str_unref(temp);
return ret;
diff --git a/res/layout/registration_activity.xml b/res/layout/registration_activity.xml
index a7db971b0..c0ad3dce2 100644
--- a/res/layout/registration_activity.xml
+++ b/res/layout/registration_activity.xml
@@ -74,6 +74,38 @@
+
+
+
+
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@id/provider_layout" />
#552090ea
#ff2090ea
+ #fffdf7b2
+ #ff101010
+ #fffd0b00
+ #ffffffff
diff --git a/src/com/b44t/messenger/DcContext.java b/src/com/b44t/messenger/DcContext.java
index 15529b89d..c0eef06dd 100644
--- a/src/com/b44t/messenger/DcContext.java
+++ b/src/com/b44t/messenger/DcContext.java
@@ -166,7 +166,6 @@ public class DcContext {
public native boolean isSendingLocationsToChat(int chat_id);
public @NonNull DcArray getLocations (int chat_id, int contact_id, long timestamp_start, long timestamp_end) { return new DcArray(getLocationsCPtr(chat_id, contact_id, timestamp_start, timestamp_end)); }
public native void deleteAllLocations ();
- public @Nullable DcProvider getProviderFromDomain(String email) { long cptr = getProviderFromDomainCPtr(email); return cptr!=0 ? new DcProvider(cptr) : null; }
public @Nullable DcProvider getProviderFromEmail (String email) { long cptr = getProviderFromEmailCPtr(email); return cptr!=0 ? new DcProvider(cptr) : null; }
/**
@@ -195,6 +194,5 @@ public class DcContext {
private native long getContactCPtr (int id);
private native long getLocationsCPtr (int chat_id, int contact_id, long timestamp_start, long timestamp_end);
private native long checkQrCPtr (String qr);
- private native long getProviderFromDomainCPtr (String qr);
- private native long getProviderFromEmailCPtr (String qr);
+ private native long getProviderFromEmailCPtr (String addr);
}
diff --git a/src/com/b44t/messenger/DcProvider.java b/src/com/b44t/messenger/DcProvider.java
index 0e5f17144..09941cfe4 100644
--- a/src/com/b44t/messenger/DcProvider.java
+++ b/src/com/b44t/messenger/DcProvider.java
@@ -16,11 +16,9 @@ public class DcProvider {
providerCPtr = 0;
}
- public native String getName ();
- public native int getStatus ();
- public native String getStatusDate ();
- public native String getMarkdown ();
- public native String getOverviewPage();
+ public native int getStatus ();
+ public native String getBeforeLoginHint ();
+ public native String getOverviewPage ();
// working with raw c-data
private long providerCPtr; // CAVE: the name is referenced in the JNI
diff --git a/src/org/thoughtcrime/securesms/RegistrationActivity.java b/src/org/thoughtcrime/securesms/RegistrationActivity.java
index 45b6b4d79..037064a1d 100644
--- a/src/org/thoughtcrime/securesms/RegistrationActivity.java
+++ b/src/org/thoughtcrime/securesms/RegistrationActivity.java
@@ -1,16 +1,22 @@
package org.thoughtcrime.securesms;
+import android.content.ActivityNotFoundException;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.res.Resources;
import android.net.Uri;
import android.os.Bundle;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.constraintlayout.widget.Group;
+
+import com.b44t.messenger.DcProvider;
import com.google.android.material.textfield.TextInputEditText;
import com.google.android.material.textfield.TextInputLayout;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
+
import android.text.TextUtils;
import android.util.Patterns;
import android.view.Menu;
@@ -45,6 +51,7 @@ import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SEND_PASSWORD;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SEND_PORT;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SEND_SERVER;
import static org.thoughtcrime.securesms.connect.DcHelper.CONFIG_SEND_USER;
+import static org.thoughtcrime.securesms.connect.DcHelper.getContext;
public class RegistrationActivity extends BaseActionBarActivity implements DcEventCenter.DcEventDelegate {
@@ -58,6 +65,12 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
private TextInputEditText emailInput;
private TextInputEditText passwordInput;
+
+ private View providerLayout;
+ private TextView providerHint;
+ private TextView providerLink;
+ private @Nullable DcProvider provider;
+
private Group advancedGroup;
private ImageView advancedIcon;
private ProgressDialog progressDialog;
@@ -78,6 +91,12 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
emailInput = findViewById(R.id.email_text);
passwordInput = findViewById(R.id.password_text);
+
+ providerLayout = findViewById(R.id.provider_layout);
+ providerHint = findViewById(R.id.provider_hint);
+ providerLink = findViewById(R.id.provider_link);
+ providerLink.setOnClickListener(l -> onProviderLink());
+
advancedGroup = findViewById(R.id.advanced_group);
advancedIcon = findViewById(R.id.advanced_icon);
TextView advancedTextView = findViewById(R.id.advanced_text);
@@ -253,9 +272,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
.setTitle(R.string.login_info_oauth2_title)
.setMessage(R.string.login_info_oauth2_text)
.setNegativeButton(R.string.cancel, (dialog, which)->{
- if(isGmail(email)) {
- showGmailNoOauth2Hint();
- }
+ updateProviderInfo();
oauth2started.set(false);
})
.setPositiveButton(R.string.perm_continue, (dialog, which)-> {
@@ -266,24 +283,64 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
})
.setCancelable(false)
.show();
- } else if (isGmail(email)) {
- showGmailNoOauth2Hint();
- oauth2started.set(false);
- } else if (isOutlook(email)) {
- showOutlookHint();
- oauth2started.set(false);
- }
- else {
+ } else {
+ updateProviderInfo();
oauth2started.set(false);
}
}
else {
+ updateProviderInfo();
oauth2started.set(false);
}
return oauth2started;
}
+ private void updateProviderInfo() {
+ provider = getContext(this).getProviderFromEmail(emailInput.getText().toString());
+ if (provider!=null) {
+ Resources res = getResources();
+ providerHint.setText(provider.getBeforeLoginHint());
+ switch (provider.getStatus()) {
+ case DcProvider.DC_PROVIDER_STATUS_PREPARATION:
+ providerHint.setTextColor(res.getColor(R.color.provider_prep_fg));
+ providerLink.setTextColor(res.getColor(R.color.provider_prep_fg));
+ providerLayout.setBackgroundColor(res.getColor(R.color.provider_prep_bg));
+ providerLayout.setVisibility(View.VISIBLE);
+ break;
+
+ case DcProvider.DC_PROVIDER_STATUS_BROKEN:
+ providerHint.setTextColor(res.getColor(R.color.provider_broken_fg));
+ providerLink.setTextColor(res.getColor(R.color.provider_broken_fg));
+ providerLayout.setBackgroundColor(getResources().getColor(R.color.provider_broken_bg));
+ providerLayout.setVisibility(View.VISIBLE);
+ break;
+
+ default:
+ providerLayout.setVisibility(View.GONE);
+ break;
+ }
+ } else {
+ providerLayout.setVisibility(View.GONE);
+ }
+ }
+
+ private void onProviderLink() {
+ if (provider!=null) {
+ String url = provider.getOverviewPage();
+ if(!url.isEmpty()) {
+ try {
+ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(this, R.string.no_browser_installed, Toast.LENGTH_LONG).show();
+ }
+ } else {
+ // this should normally not happen
+ Toast.makeText(this, "ErrProviderWithoutUrl", Toast.LENGTH_LONG).show();
+ }
+ }
+ }
+
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
@@ -309,45 +366,6 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
return !TextUtils.isEmpty(email) && Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
- private boolean isGmail(String email) {
- return email != null && (email.toLowerCase().contains("@gmail.") || email.toLowerCase().contains("@googlemail."));
- }
-
- private void showGmailNoOauth2Hint()
- {
- if(!gmailDialogShown) {
- gmailDialogShown = true;
- new AlertDialog.Builder(this)
- .setMessage(R.string.login_info_gmail_text)
- .setPositiveButton(R.string.ok, null)
- .show();
- }
- }
-
- private boolean isOutlook(String email) {
- return email != null
- && (email.toLowerCase().contains("@outlook.") || email.toLowerCase().contains("@hotmail."));
- }
-
- private boolean outlookDialogShown;
- private void showOutlookHint()
- {
- if(!outlookDialogShown) {
- outlookDialogShown = true;
- new AlertDialog.Builder(this)
- .setMessage(
- "Outlook- and Hotmail-e-mail-addresses "
- + "may currently not work as expected "
- + "as these servers may remove some important transport information."
- + "\n\n"
- + "Hopefully sooner or later there will be a fix; "
- + "for now, we suggest to use another e-mail-address "
- + "or try Delta Chat again when the issue is fixed.")
- .setPositiveButton(R.string.ok, null)
- .show();
- }
- }
-
private void verifyEmail(TextInputEditText view) {
String error = getString(R.string.login_error_mail);
String email = view.getText().toString();