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();