mirror of
https://github.com/ArcaneChat/android.git
synced 2026-07-03 14:05:24 +02:00
Merge pull request #1219 from deltachat/provider-db
implement provider-db
This commit is contained in:
+3
-30
@@ -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;
|
||||
|
||||
@@ -74,6 +74,38 @@
|
||||
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<LinearLayout
|
||||
android:id="@+id/provider_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="16dp"
|
||||
android:layout_marginRight="16dp"
|
||||
android:layout_marginTop="12dp"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintTop_toBottomOf="@id/password"
|
||||
>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/provider_hint"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="12dp"
|
||||
android:textSize="16sp"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/provider_link"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="12dp"
|
||||
android:paddingRight="12dp"
|
||||
android:paddingBottom="12dp"
|
||||
android:textSize="16sp"
|
||||
android:text="@string/more_info_desktop"
|
||||
android:textStyle="bold" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/no_servers_hint"
|
||||
android:layout_width="0dp"
|
||||
@@ -82,7 +114,7 @@
|
||||
android:padding="16dp"
|
||||
android:text="@string/login_no_servers_hint"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/password" />
|
||||
app:layout_constraintTop_toBottomOf="@id/provider_layout" />
|
||||
|
||||
<androidx.constraintlayout.widget.Group
|
||||
android:id="@+id/advanced_group"
|
||||
|
||||
@@ -59,5 +59,9 @@
|
||||
<color name="trackTintColor">#552090ea</color>
|
||||
<color name="trackHighlightTintColor">#ff2090ea</color>
|
||||
|
||||
<color name="provider_prep_bg">#fffdf7b2</color>
|
||||
<color name="provider_prep_fg">#ff101010</color>
|
||||
<color name="provider_broken_bg">#fffd0b00</color>
|
||||
<color name="provider_broken_fg">#ffffffff</color>
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user