added Config.java varibale to lock account creation to specfic domain

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/Config.java                           |  4 
src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java     | 10 
src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java        |  9 
src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java           | 75 
src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java |  9 
src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java     | 27 
src/main/java/eu/siacs/conversations/ui/adapter/AccountAdapter.java        |  7 
src/main/res/layout/activity_edit_account.xml                              |  1 
src/main/res/values/strings.xml                                            |  3 
9 files changed, 112 insertions(+), 33 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/Config.java 🔗

@@ -8,6 +8,10 @@ public final class Config {
 
 	public static final String LOGTAG = "conversations";
 
+
+	public static final String DOMAIN_LOCK = null; //only allow account creation for this domain
+	public static final boolean DISALLOW_REGISTRATION_IN_UI = false; //hide the register checkbox
+
 	public static final int PING_MAX_INTERVAL = 300;
 	public static final int PING_MIN_INTERVAL = 30;
 	public static final int PING_TIMEOUT = 10;

src/main/java/eu/siacs/conversations/ui/ConferenceDetailsActivity.java 🔗

@@ -28,6 +28,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 
+import eu.siacs.conversations.Config;
 import eu.siacs.conversations.R;
 import eu.siacs.conversations.crypto.PgpEngine;
 import eu.siacs.conversations.entities.Account;
@@ -421,8 +422,13 @@ public class ConferenceDetailsActivity extends XmppActivity implements OnConvers
 	private void updateView() {
 		final MucOptions mucOptions = mConversation.getMucOptions();
 		final User self = mucOptions.getSelf();
-		mAccountJid.setText(getString(R.string.using_account, mConversation
-					.getAccount().getJid().toBareJid()));
+		String account;
+		if (Config.DOMAIN_LOCK != null) {
+			account = mConversation.getAccount().getJid().getLocalpart();
+		} else {
+			account = mConversation.getAccount().getJid().toBareJid().toString();
+		}
+		mAccountJid.setText(getString(R.string.using_account, account));
 		mYourPhoto.setImageBitmap(avatarService().get(mConversation.getAccount(), getPixel(48)));
 		setTitle(mConversation.getName());
 		mFullJid.setText(mConversation.getJid().toBareJid().toString());

src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java 🔗

@@ -33,6 +33,7 @@ import org.whispersystems.libaxolotl.IdentityKey;
 
 import java.util.List;
 
+import eu.siacs.conversations.Config;
 import eu.siacs.conversations.R;
 import eu.siacs.conversations.crypto.PgpEngine;
 import eu.siacs.conversations.entities.Account;
@@ -359,7 +360,13 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
 		} else {
 			contactJidTv.setText(contact.getJid().toString());
 		}
-		accountJidTv.setText(getString(R.string.using_account, contact.getAccount().getJid().toBareJid()));
+		String account;
+		if (Config.DOMAIN_LOCK != null) {
+			account = contact.getAccount().getJid().getLocalpart();
+		} else {
+			account = contact.getAccount().getJid().toBareJid().toString();
+		}
+		accountJidTv.setText(getString(R.string.using_account, account));
 		badge.setImageBitmap(avatarService().get(contact, getPixel(72)));
 		badge.setOnClickListener(this.onBadgeClick);
 

src/main/java/eu/siacs/conversations/ui/EditAccountActivity.java 🔗

@@ -63,6 +63,7 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
 	private TextView mSessionEst;
 	private TextView mOtrFingerprint;
 	private TextView mAxolotlFingerprint;
+	private TextView mAccountJidLabel;
 	private ImageView mAvatar;
 	private RelativeLayout mOtrFingerprintBox;
 	private RelativeLayout mAxolotlFingerprintBox;
@@ -87,17 +88,34 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
 				xmppConnectionService.updateAccount(mAccount);
 				return;
 			}
-			final boolean registerNewAccount = mRegisterNew.isChecked();
+			final boolean registerNewAccount = mRegisterNew.isChecked() && !Config.DISALLOW_REGISTRATION_IN_UI;
+			if (Config.DOMAIN_LOCK != null && mAccountJid.getText().toString().contains("@")) {
+				mAccountJid.setError(getString(R.string.invalid_username));
+				mAccountJid.requestFocus();
+				return;
+			}
 			final Jid jid;
 			try {
-				jid = Jid.fromString(mAccountJid.getText().toString());
+				if (Config.DOMAIN_LOCK != null) {
+					jid = Jid.fromParts(mAccountJid.getText().toString(),Config.DOMAIN_LOCK,null);
+				} else {
+					jid = Jid.fromString(mAccountJid.getText().toString());
+				}
 			} catch (final InvalidJidException e) {
-				mAccountJid.setError(getString(R.string.invalid_jid));
+				if (Config.DOMAIN_LOCK != null) {
+					mAccountJid.setError(getString(R.string.invalid_username));
+				} else {
+					mAccountJid.setError(getString(R.string.invalid_jid));
+				}
 				mAccountJid.requestFocus();
 				return;
 			}
 			if (jid.isDomainJid()) {
-				mAccountJid.setError(getString(R.string.invalid_jid));
+				if (Config.DOMAIN_LOCK != null) {
+					mAccountJid.setError(getString(R.string.invalid_username));
+				} else {
+					mAccountJid.setError(getString(R.string.invalid_jid));
+				}
 				mAccountJid.requestFocus();
 				return;
 			}
@@ -123,13 +141,9 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
 				mAccount.setOption(Account.OPTION_REGISTER, registerNewAccount);
 				xmppConnectionService.updateAccount(mAccount);
 			} else {
-				try {
-					if (xmppConnectionService.findAccountByJid(Jid.fromString(mAccountJid.getText().toString())) != null) {
-						mAccountJid.setError(getString(R.string.account_already_exists));
-						mAccountJid.requestFocus();
-						return;
-					}
-				} catch (final InvalidJidException e) {
+				if (xmppConnectionService.findAccountByJid(jid) != null) {
+					mAccountJid.setError(getString(R.string.account_already_exists));
+					mAccountJid.requestFocus();
 					return;
 				}
 				mAccount = new Account(jid.toBareJid(), password);
@@ -285,10 +299,17 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
 	}
 
 	protected boolean accountInfoEdited() {
-		return this.mAccount != null && (!this.mAccount.getJid().toBareJid().toString().equals(
-					this.mAccountJid.getText().toString())
-			|| !this.mAccount.getPassword().equals(
-						this.mPassword.getText().toString()));
+		if (this.mAccount == null) {
+			return false;
+		}
+		final String unmodified;
+		if (Config.DOMAIN_LOCK != null) {
+			unmodified = this.mAccount.getJid().getLocalpart();
+		} else {
+			unmodified = this.mAccount.getJid().toBareJid().toString();
+		}
+		return !unmodified.equals(this.mAccountJid.getText().toString()) ||
+				!this.mAccount.getPassword().equals(this.mPassword.getText().toString());
 	}
 
 	@Override
@@ -306,6 +327,11 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
 		setContentView(R.layout.activity_edit_account);
 		this.mAccountJid = (AutoCompleteTextView) findViewById(R.id.account_jid);
 		this.mAccountJid.addTextChangedListener(this.mTextWatcher);
+		this.mAccountJidLabel = (TextView) findViewById(R.id.account_jid_label);
+		if (Config.DOMAIN_LOCK != null) {
+			this.mAccountJidLabel.setText(R.string.username);
+			this.mAccountJid.setHint(R.string.username_hint);
+		}
 		this.mPassword = (EditText) findViewById(R.id.account_password);
 		this.mPassword.addTextChangedListener(this.mTextWatcher);
 		this.mPasswordConfirm = (EditText) findViewById(R.id.account_password_confirm);
@@ -348,6 +374,9 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
 			}
 		};
 		this.mRegisterNew.setOnCheckedChangeListener(OnCheckedShowConfirmPassword);
+		if (Config.DISALLOW_REGISTRATION_IN_UI) {
+			this.mRegisterNew.setVisibility(View.GONE);
+		}
 	}
 
 	@Override
@@ -406,9 +435,6 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
 
 	@Override
 	protected void onBackendConnected() {
-		final KnownHostsAdapter mKnownHostsAdapter = new KnownHostsAdapter(this,
-				android.R.layout.simple_list_item_1,
-				xmppConnectionService.getKnownHosts());
 		if (this.jidToEdit != null) {
 			this.mAccount = xmppConnectionService.findAccountByJid(jidToEdit);
 			updateAccountInformation(true);
@@ -421,7 +447,12 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
 			this.mCancelButton.setEnabled(false);
 			this.mCancelButton.setTextColor(getSecondaryTextColor());
 		}
-		this.mAccountJid.setAdapter(mKnownHostsAdapter);
+		if (Config.DOMAIN_LOCK == null) {
+			final KnownHostsAdapter mKnownHostsAdapter = new KnownHostsAdapter(this,
+					android.R.layout.simple_list_item_1,
+					xmppConnectionService.getKnownHosts());
+			this.mAccountJid.setAdapter(mKnownHostsAdapter);
+		}
 		updateSaveButton();
 	}
 
@@ -451,7 +482,11 @@ public class EditAccountActivity extends XmppActivity implements OnAccountUpdate
 
 	private void updateAccountInformation(boolean init) {
 		if (init) {
-			this.mAccountJid.setText(this.mAccount.getJid().toBareJid().toString());
+			if (Config.DOMAIN_LOCK != null) {
+				this.mAccountJid.setText(this.mAccount.getJid().getLocalpart());
+			} else {
+				this.mAccountJid.setText(this.mAccount.getJid().toBareJid().toString());
+			}
 			this.mPassword.setText(this.mAccount.getPassword());
 		}
 		if (this.jidToEdit != null) {

src/main/java/eu/siacs/conversations/ui/PublishProfilePictureActivity.java 🔗

@@ -13,6 +13,7 @@ import android.widget.ImageView;
 import android.widget.TextView;
 import android.widget.Toast;
 
+import eu.siacs.conversations.Config;
 import eu.siacs.conversations.R;
 import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.utils.PhoneHelper;
@@ -192,7 +193,13 @@ public class PublishProfilePictureActivity extends XmppActivity {
 				} else {
 					loadImageIntoPreview(avatarUri);
 				}
-				this.accountTextView.setText(this.account.getJid().toBareJid().toString());
+				String account;
+				if (Config.DOMAIN_LOCK != null) {
+					account = this.account.getJid().getLocalpart();
+				} else {
+					account = this.account.getJid().toBareJid().toString();
+				}
+				this.accountTextView.setText(account);
 			}
 		}
 

src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java 🔗

@@ -289,7 +289,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
 
 	protected void toggleContactBlock() {
 		final int position = contact_context_id;
-		BlockContactDialog.show(this, xmppConnectionService, (Contact)contacts.get(position));
+		BlockContactDialog.show(this, xmppConnectionService, (Contact) contacts.get(position));
 	}
 
 	protected void deleteContact() {
@@ -299,7 +299,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
 		builder.setNegativeButton(R.string.cancel, null);
 		builder.setTitle(R.string.action_delete_contact);
 		builder.setMessage(getString(R.string.remove_contact_text,
-					contact.getJid()));
+				contact.getJid()));
 		builder.setPositiveButton(R.string.delete, new OnClickListener() {
 
 			@Override
@@ -319,7 +319,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
 		builder.setNegativeButton(R.string.cancel, null);
 		builder.setTitle(R.string.delete_bookmark);
 		builder.setMessage(getString(R.string.remove_bookmark_text,
-					bookmark.getJid()));
+				bookmark.getJid()));
 		builder.setPositiveButton(R.string.delete, new OnClickListener() {
 
 			@Override
@@ -368,7 +368,11 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
 						}
 						final Jid accountJid;
 						try {
-							accountJid = Jid.fromString((String) spinner.getSelectedItem());
+							if (Config.DOMAIN_LOCK != null) {
+								accountJid = Jid.fromParts((String) spinner.getSelectedItem(),Config.DOMAIN_LOCK,null);
+							} else {
+								accountJid = Jid.fromString((String) spinner.getSelectedItem());
+							}
 						} catch (final InvalidJidException e) {
 							return;
 						}
@@ -379,8 +383,7 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
 							jid.setError(getString(R.string.invalid_jid));
 							return;
 						}
-						final Account account = xmppConnectionService
-							.findAccountByJid(accountJid);
+						final Account account = xmppConnectionService.findAccountByJid(accountJid);
 						if (account == null) {
 							dialog.dismiss();
 							return;
@@ -428,7 +431,11 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
 						}
 						final Jid accountJid;
 						try {
-							accountJid = Jid.fromString((String) spinner.getSelectedItem());
+							if (Config.DOMAIN_LOCK != null) {
+								accountJid = Jid.fromParts((String) spinner.getSelectedItem(),Config.DOMAIN_LOCK,null);
+							} else {
+								accountJid = Jid.fromString((String) spinner.getSelectedItem());
+							}
 						} catch (final InvalidJidException e) {
 							return;
 						}
@@ -576,7 +583,11 @@ public class StartConversationActivity extends XmppActivity implements OnRosterU
 		this.mActivatedAccounts.clear();
 		for (Account account : xmppConnectionService.getAccounts()) {
 			if (account.getStatus() != Account.State.DISABLED) {
-				this.mActivatedAccounts.add(account.getJid().toBareJid().toString());
+				if (Config.DOMAIN_LOCK != null) {
+					this.mActivatedAccounts.add(account.getJid().getLocalpart());
+				} else {
+					this.mActivatedAccounts.add(account.getJid().toBareJid().toString());
+				}
 			}
 		}
 		final Intent intent = getIntent();

src/main/java/eu/siacs/conversations/ui/adapter/AccountAdapter.java 🔗

@@ -11,6 +11,7 @@ import android.widget.TextView;
 
 import java.util.List;
 
+import eu.siacs.conversations.Config;
 import eu.siacs.conversations.R;
 import eu.siacs.conversations.entities.Account;
 import eu.siacs.conversations.ui.ManageAccountActivity;
@@ -35,7 +36,11 @@ public class AccountAdapter extends ArrayAdapter<Account> {
 			view = inflater.inflate(R.layout.account_row, parent, false);
 		}
 		TextView jid = (TextView) view.findViewById(R.id.account_jid);
-		jid.setText(account.getJid().toBareJid().toString());
+		if (Config.DOMAIN_LOCK != null) {
+			jid.setText(account.getJid().getLocalpart());
+		} else {
+			jid.setText(account.getJid().toBareJid().toString());
+		}
 		TextView statusView = (TextView) view.findViewById(R.id.account_status);
 		ImageView imageView = (ImageView) view.findViewById(R.id.account_image);
 		imageView.setImageBitmap(activity.avatarService().get(account, activity.getPixel(48)));

src/main/res/layout/activity_edit_account.xml 🔗

@@ -42,6 +42,7 @@
                     android:orientation="vertical"
                     android:layout_toRightOf="@+id/avater">
                 <TextView
+                    android:id="@+id/account_jid_label"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="@string/account_settings_jabber_id"

src/main/res/values/strings.xml 🔗

@@ -499,4 +499,7 @@
 	<string name="search_for_contacts_or_groups">Search for contacts or groups</string>
 	<string name="send_private_message">Send private message</string>
 	<string name="user_has_left_conference">%s has left the conference!</string>
+	<string name="username">Username</string>
+	<string name="username_hint">Username</string>
+	<string name="invalid_username">This is not a valid username</string>
 </resources>