allow 'login with certificate' from welcome screen. fixes #3724
This commit is contained in:
		
							parent
							
								
									36d2ecfcfa
								
							
						
					
					
						commit
						1b4f9cc8ab
					
				@ -369,7 +369,7 @@ public class ManageAccountActivity extends XmppActivity implements OnAccountUpda
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private void deleteAccount(final Account account) {
 | 
					    private void deleteAccount(final Account account) {
 | 
				
			||||||
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
 | 
					        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
 | 
				
			||||||
        builder.setTitle(getString(R.string.mgmt_account_are_you_sure));
 | 
					        builder.setTitle(getString(R.string.mgmt_account_are_you_sure));
 | 
				
			||||||
        builder.setIconAttribute(android.R.attr.alertDialogIcon);
 | 
					        builder.setIconAttribute(android.R.attr.alertDialogIcon);
 | 
				
			||||||
        builder.setMessage(getString(R.string.mgmt_account_delete_confirm_text));
 | 
					        builder.setMessage(getString(R.string.mgmt_account_delete_confirm_text));
 | 
				
			||||||
 | 
				
			|||||||
@ -1,11 +1,14 @@
 | 
				
			|||||||
package eu.siacs.conversations.ui;
 | 
					package eu.siacs.conversations.ui;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import android.Manifest;
 | 
					import android.Manifest;
 | 
				
			||||||
 | 
					import android.content.ActivityNotFoundException;
 | 
				
			||||||
import android.content.Intent;
 | 
					import android.content.Intent;
 | 
				
			||||||
import android.content.pm.ActivityInfo;
 | 
					import android.content.pm.ActivityInfo;
 | 
				
			||||||
import android.content.pm.PackageManager;
 | 
					import android.content.pm.PackageManager;
 | 
				
			||||||
import android.databinding.DataBindingUtil;
 | 
					import android.databinding.DataBindingUtil;
 | 
				
			||||||
import android.os.Bundle;
 | 
					import android.os.Bundle;
 | 
				
			||||||
 | 
					import android.security.KeyChain;
 | 
				
			||||||
 | 
					import android.security.KeyChainAliasCallback;
 | 
				
			||||||
import android.support.annotation.NonNull;
 | 
					import android.support.annotation.NonNull;
 | 
				
			||||||
import android.support.v7.app.AppCompatActivity;
 | 
					import android.support.v7.app.AppCompatActivity;
 | 
				
			||||||
import android.support.v7.widget.Toolbar;
 | 
					import android.support.v7.widget.Toolbar;
 | 
				
			||||||
@ -21,6 +24,7 @@ import eu.siacs.conversations.Config;
 | 
				
			|||||||
import eu.siacs.conversations.R;
 | 
					import eu.siacs.conversations.R;
 | 
				
			||||||
import eu.siacs.conversations.databinding.ActivityWelcomeBinding;
 | 
					import eu.siacs.conversations.databinding.ActivityWelcomeBinding;
 | 
				
			||||||
import eu.siacs.conversations.entities.Account;
 | 
					import eu.siacs.conversations.entities.Account;
 | 
				
			||||||
 | 
					import eu.siacs.conversations.services.XmppConnectionService;
 | 
				
			||||||
import eu.siacs.conversations.utils.InstallReferrerUtils;
 | 
					import eu.siacs.conversations.utils.InstallReferrerUtils;
 | 
				
			||||||
import eu.siacs.conversations.utils.SignupUtils;
 | 
					import eu.siacs.conversations.utils.SignupUtils;
 | 
				
			||||||
import eu.siacs.conversations.utils.XmppUri;
 | 
					import eu.siacs.conversations.utils.XmppUri;
 | 
				
			||||||
@ -29,7 +33,7 @@ import rocks.xmpp.addr.Jid;
 | 
				
			|||||||
import static eu.siacs.conversations.utils.PermissionUtils.allGranted;
 | 
					import static eu.siacs.conversations.utils.PermissionUtils.allGranted;
 | 
				
			||||||
import static eu.siacs.conversations.utils.PermissionUtils.writeGranted;
 | 
					import static eu.siacs.conversations.utils.PermissionUtils.writeGranted;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class WelcomeActivity extends XmppActivity {
 | 
					public class WelcomeActivity extends XmppActivity implements XmppConnectionService.OnAccountCreated, KeyChainAliasCallback {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final int REQUEST_IMPORT_BACKUP = 0x63fb;
 | 
					    private static final int REQUEST_IMPORT_BACKUP = 0x63fb;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -154,10 +158,42 @@ public class WelcomeActivity extends XmppActivity {
 | 
				
			|||||||
            case R.id.action_scan_qr_code:
 | 
					            case R.id.action_scan_qr_code:
 | 
				
			||||||
                UriHandlerActivity.scan(this);
 | 
					                UriHandlerActivity.scan(this);
 | 
				
			||||||
                break;
 | 
					                break;
 | 
				
			||||||
 | 
					            case R.id.action_add_account_with_cert:
 | 
				
			||||||
 | 
					                addAccountFromKey();
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return super.onOptionsItemSelected(item);
 | 
					        return super.onOptionsItemSelected(item);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private void addAccountFromKey() {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            KeyChain.choosePrivateKeyAlias(this, this, null, null, null, -1, null);
 | 
				
			||||||
 | 
					        } catch (ActivityNotFoundException e) {
 | 
				
			||||||
 | 
					            Toast.makeText(this, R.string.device_does_not_support_certificates, Toast.LENGTH_LONG).show();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void alias(final String alias) {
 | 
				
			||||||
 | 
					        if (alias != null) {
 | 
				
			||||||
 | 
					            xmppConnectionService.createAccountFromKey(alias, this);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void onAccountCreated(final Account account) {
 | 
				
			||||||
 | 
					        final Intent intent = new Intent(this, EditAccountActivity.class);
 | 
				
			||||||
 | 
					        intent.putExtra("jid", account.getJid().asBareJid().toString());
 | 
				
			||||||
 | 
					        intent.putExtra("init", true);
 | 
				
			||||||
 | 
					        addInviteUri(intent);
 | 
				
			||||||
 | 
					        startActivity(intent);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void informUser(final int r) {
 | 
				
			||||||
 | 
					        runOnUiThread(() -> Toast.makeText(this, r, Toast.LENGTH_LONG).show());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
 | 
					    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
 | 
				
			||||||
        UriHandlerActivity.onRequestPermissionResult(this, requestCode, grantResults);
 | 
					        UriHandlerActivity.onRequestPermissionResult(this, requestCode, grantResults);
 | 
				
			||||||
 | 
				
			|||||||
@ -1,16 +1,22 @@
 | 
				
			|||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
 | 
					<menu xmlns:android="http://schemas.android.com/apk/res/android"
 | 
				
			||||||
      xmlns:app="http://schemas.android.com/apk/res-auto">
 | 
					    xmlns:app="http://schemas.android.com/apk/res-auto">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <item
 | 
					    <item
 | 
				
			||||||
        android:id="@+id/action_scan_qr_code"
 | 
					        android:id="@+id/action_scan_qr_code"
 | 
				
			||||||
        android:title="@string/scan_qr_code"
 | 
					        android:icon="?attr/icon_scan_qr_code"
 | 
				
			||||||
        app:showAsAction="ifRoom"
 | 
					 | 
				
			||||||
        android:orderInCategory="10"
 | 
					        android:orderInCategory="10"
 | 
				
			||||||
 | 
					        android:title="@string/scan_qr_code"
 | 
				
			||||||
        android:visible="@bool/show_qr_code_scan"
 | 
					        android:visible="@bool/show_qr_code_scan"
 | 
				
			||||||
        android:icon="?attr/icon_scan_qr_code"/>
 | 
					        app:showAsAction="ifRoom" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <item
 | 
				
			||||||
 | 
					        android:id="@+id/action_add_account_with_cert"
 | 
				
			||||||
 | 
					        android:title="@string/action_add_account_with_certificate"
 | 
				
			||||||
 | 
					        android:visible="true"
 | 
				
			||||||
 | 
					        app:showAsAction="never" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <item
 | 
					    <item
 | 
				
			||||||
        android:id="@+id/action_import_backup"
 | 
					        android:id="@+id/action_import_backup"
 | 
				
			||||||
        app:showAsAction="never"
 | 
					        android:title="@string/restore_backup"
 | 
				
			||||||
        android:title="@string/restore_backup"/>
 | 
					        app:showAsAction="never" />
 | 
				
			||||||
</menu>
 | 
					</menu>
 | 
				
			||||||
@ -2199,6 +2199,7 @@ public class XmppConnectionService extends Service {
 | 
				
			|||||||
                    final Account account = new Account(info.first, "");
 | 
					                    final Account account = new Account(info.first, "");
 | 
				
			||||||
                    account.setPrivateKeyAlias(alias);
 | 
					                    account.setPrivateKeyAlias(alias);
 | 
				
			||||||
                    account.setOption(Account.OPTION_DISABLED, true);
 | 
					                    account.setOption(Account.OPTION_DISABLED, true);
 | 
				
			||||||
 | 
					                    account.setOption(Account.OPTION_FIXED_USERNAME, true);
 | 
				
			||||||
                    account.setDisplayName(info.second);
 | 
					                    account.setDisplayName(info.second);
 | 
				
			||||||
                    createAccount(account);
 | 
					                    createAccount(account);
 | 
				
			||||||
                    callback.onAccountCreated(account);
 | 
					                    callback.onAccountCreated(account);
 | 
				
			||||||
 | 
				
			|||||||
@ -784,12 +784,6 @@ public class EditAccountActivity extends OmemoActivity implements OnAccountUpdat
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            this.mInitMode |= this.mAccount.isOptionSet(Account.OPTION_REGISTER);
 | 
					            this.mInitMode |= this.mAccount.isOptionSet(Account.OPTION_REGISTER);
 | 
				
			||||||
            this.mUsernameMode |= mAccount.isOptionSet(Account.OPTION_MAGIC_CREATE) && mAccount.isOptionSet(Account.OPTION_REGISTER);
 | 
					            this.mUsernameMode |= mAccount.isOptionSet(Account.OPTION_MAGIC_CREATE) && mAccount.isOptionSet(Account.OPTION_REGISTER);
 | 
				
			||||||
            if (this.mAccount.getPrivateKeyAlias() != null) {
 | 
					 | 
				
			||||||
                this.binding.accountPassword.setHint(R.string.authenticate_with_certificate);
 | 
					 | 
				
			||||||
                if (this.mInitMode) {
 | 
					 | 
				
			||||||
                    this.binding.accountPassword.requestFocus();
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            if (mPendingFingerprintVerificationUri != null) {
 | 
					            if (mPendingFingerprintVerificationUri != null) {
 | 
				
			||||||
                processFingerprintVerification(mPendingFingerprintVerificationUri, false);
 | 
					                processFingerprintVerification(mPendingFingerprintVerificationUri, false);
 | 
				
			||||||
                mPendingFingerprintVerificationUri = null;
 | 
					                mPendingFingerprintVerificationUri = null;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user