导航菜单

页面标题

页面副标题

Delta Chat v1.58.3 - WelcomeActivity.java 源代码

正在查看: Delta Chat v1.58.3 应用的 WelcomeActivity.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package org.thoughtcrime.securesms;

import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.text.util.Linkify;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcEvent;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import org.thoughtcrime.securesms.connect.AccountManager;
import org.thoughtcrime.securesms.connect.DcEventCenter;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.mms.AttachmentManager;
import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.qr.BackupTransferActivity;
import org.thoughtcrime.securesms.qr.RegistrationQrActivity;
import org.thoughtcrime.securesms.service.GenericForegroundService;
import org.thoughtcrime.securesms.service.NotificationController;
import org.thoughtcrime.securesms.util.StorageUtil;
import org.thoughtcrime.securesms.util.StreamUtil;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.views.ProgressDialog;

public class WelcomeActivity extends BaseActionBarActivity implements DcEventCenter.DcEventDelegate {
    public static final String BACKUP_QR_EXTRA = "backup_qr_extra";
    public static final String DC_REQUEST_ACCOUNT_DATA = "chat.delta.DC_REQUEST_ACCOUNT_DATA";
    public static final int PICK_BACKUP = 20574;
    private static final String TAG = "WelcomeActivity";
    public static final String TMP_BACKUP_FILE = "tmp-backup-file";
    DcContext dcContext;
    private boolean imexUserAborted;
    private NotificationController notificationController;
    private ProgressDialog progressDialog = null;

    @Override
    public boolean runOnMain() {
        return DcEventCenter.DcEventDelegate.CC.$default$runOnMain(this);
    }

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.welcome_activity);
        Button button = (Button) findViewById(R.id.signup_button);
        Button button2 = (Button) findViewById(R.id.signin_button);
        View inflate = View.inflate(this, R.layout.login_options_view, null);
        final AlertDialog create = new AlertDialog.Builder(this).setView(inflate).setTitle(R.string.onboarding_alternative_logins).setNegativeButton(R.string.cancel, (DialogInterface.OnClickListener) null).create();
        inflate.findViewById(R.id.add_as_second_device_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public final void onClick(View view) {
                WelcomeActivity.this.m1321lambda$onCreate$0$orgthoughtcrimesecuresmsWelcomeActivity(create, view);
            }
        });
        inflate.findViewById(R.id.backup_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public final void onClick(View view) {
                WelcomeActivity.this.m1322lambda$onCreate$1$orgthoughtcrimesecuresmsWelcomeActivity(create, view);
            }
        });
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public final void onClick(View view) {
                WelcomeActivity.this.m1323lambda$onCreate$2$orgthoughtcrimesecuresmsWelcomeActivity(view);
            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public final void onClick(View view) {
                create.show();
            }
        });
        registerForEvents();
        initializeActionBar();
        if (DcHelper.hasAnyConfiguredContext(this)) {
            return;
        }
        Intent intent = new Intent();
        intent.setPackage("chat.delta.androidyggmail");
        intent.setAction(DC_REQUEST_ACCOUNT_DATA);
        sendBroadcast(intent);
    }

    void m1321lambda$onCreate$0$orgthoughtcrimesecuresmsWelcomeActivity(AlertDialog alertDialog, View view) {
        startAddAsSecondDeviceActivity();
        alertDialog.dismiss();
    }

    void m1322lambda$onCreate$1$orgthoughtcrimesecuresmsWelcomeActivity(AlertDialog alertDialog, View view) {
        startImportBackup();
        alertDialog.dismiss();
    }

    void m1323lambda$onCreate$2$orgthoughtcrimesecuresmsWelcomeActivity(View view) {
        startInstantOnboardingActivity();
    }

    protected void initializeActionBar() {
        ActionBar supportActionBar = getSupportActionBar();
        if (supportActionBar == null) {
            throw new AssertionError();
        }
        boolean canRollbackAccountCreation = AccountManager.getInstance().canRollbackAccountCreation(this);
        supportActionBar.setDisplayHomeAsUpEnabled(canRollbackAccountCreation);
        getSupportActionBar().setTitle(canRollbackAccountCreation ? R.string.add_account : R.string.welcome_desktop);
    }

    private void registerForEvents() {
        this.dcContext = DcHelper.getContext(this);
        DcHelper.getEventCenter(this).addObserver(2051, this);
    }

    public boolean onOptionsItemSelected(MenuItem menuItem) {
        super.onOptionsItemSelected(menuItem);
        if (menuItem.getItemId() != 16908332) {
            return false;
        }
        onBackPressed();
        return true;
    }

    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
    }

    public void onStart() {
        super.onStart();
        String stringExtra = getIntent().getStringExtra(BACKUP_QR_EXTRA);
        if (stringExtra != null) {
            getIntent().removeExtra(BACKUP_QR_EXTRA);
            startBackupTransfer(stringExtra);
        }
    }

    public void onDestroy() {
        super.onDestroy();
        DcHelper.getEventCenter(this).removeObservers(this);
    }

    public void onRequestPermissionsResult(int i, String[] strArr, int[] iArr) {
        Permissions.onRequestPermissionsResult((Activity) this, i, strArr, iArr);
    }

    private void startInstantOnboardingActivity() {
        Intent intent = new Intent((Context) this, (Class<?>) InstantOnboardingActivity.class);
        intent.putExtra("from_welcome", true);
        startActivity(intent);
    }

    private void startAddAsSecondDeviceActivity() {
        new IntentIntegrator(this).setCaptureActivity(RegistrationQrActivity.class).addExtra(RegistrationQrActivity.ADD_AS_SECOND_DEVICE_EXTRA, true).initiateScan();
    }

    private void startImportBackup() {
        Permissions.with((Activity) this).request("android.permission.WRITE_EXTERNAL_STORAGE", "android.permission.READ_EXTERNAL_STORAGE").alwaysGrantOnSdk30().ifNecessary().withPermanentDenialDialog(getString(R.string.perm_explain_access_to_storage_denied)).onAllGranted(new Runnable() {
            @Override
            public final void run() {
                WelcomeActivity.this.m1327xb76ac1a2();
            }
        }).execute();
    }

    void m1327xb76ac1a2() {
        File imexDir = DcHelper.getImexDir();
        if (Build.VERSION.SDK_INT >= 30) {
            AttachmentManager.selectMediaType(this, "application/x-tar", null, PICK_BACKUP, StorageUtil.getDownloadUri());
            return;
        }
        final String imexHasBackup = this.dcContext.imexHasBackup(imexDir.getAbsolutePath());
        if (imexHasBackup != null) {
            new AlertDialog.Builder(this).setTitle(R.string.import_backup_title).setMessage(String.format(getResources().getString(R.string.import_backup_ask), imexHasBackup)).setNegativeButton(android.R.string.cancel, (DialogInterface.OnClickListener) null).setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                @Override
                public final void onClick(DialogInterface dialogInterface, int i) {
                    WelcomeActivity.this.m1326xf47e5843(imexHasBackup, dialogInterface, i);
                }
            }).show();
        } else {
            new AlertDialog.Builder(this).setTitle(R.string.import_backup_title).setMessage(String.format(getResources().getString(R.string.import_backup_no_backup_found), imexDir.getAbsolutePath())).setPositiveButton(android.R.string.ok, (DialogInterface.OnClickListener) null).show();
        }
    }

    void m1326xf47e5843(String str, DialogInterface dialogInterface, int i) {
        startImport(str, null);
    }

    private void startImport(final String str, final Uri uri) {
        this.notificationController = GenericForegroundService.startForegroundTask(this, getString(R.string.import_backup_title));
        ProgressDialog progressDialog = this.progressDialog;
        if (progressDialog != null) {
            progressDialog.dismiss();
            this.progressDialog = null;
        }
        this.imexUserAborted = false;
        ProgressDialog progressDialog2 = new ProgressDialog(this);
        this.progressDialog = progressDialog2;
        progressDialog2.setMessage(getResources().getString(R.string.one_moment));
        this.progressDialog.setCanceledOnTouchOutside(false);
        this.progressDialog.setCancelable(false);
        this.progressDialog.setButton(-2, getResources().getString(android.R.string.cancel), new DialogInterface.OnClickListener() {
            @Override
            public final void onClick(DialogInterface dialogInterface, int i) {
                WelcomeActivity.this.m1324lambda$startImport$6$orgthoughtcrimesecuresmsWelcomeActivity(dialogInterface, i);
            }
        });
        this.progressDialog.show();
        Util.runOnBackground(new Runnable() {
            @Override
            public final void run() {
                WelcomeActivity.this.m1325lambda$startImport$7$orgthoughtcrimesecuresmsWelcomeActivity(str, uri);
            }
        });
    }

    void m1324lambda$startImport$6$orgthoughtcrimesecuresmsWelcomeActivity(DialogInterface dialogInterface, int i) {
        this.imexUserAborted = true;
        this.dcContext.stopOngoingProcess();
        this.notificationController.close();
        cleanupTempBackupFile();
    }

    void m1325lambda$startImport$7$orgthoughtcrimesecuresmsWelcomeActivity(String str, Uri uri) {
        if (str == null) {
            try {
                str = copyToCacheDir(uri).getAbsolutePath();
            } catch (IOException e) {
                e.printStackTrace();
                this.notificationController.close();
                cleanupTempBackupFile();
                return;
            }
        }
        DcHelper.getEventCenter(this).captureNextError();
        this.dcContext.imex(12, str);
    }

    private File copyToCacheDir(Uri uri) throws IOException {
        InputStream openInputStream = getContentResolver().openInputStream(uri);
        try {
            File createTempFile = File.createTempFile(TMP_BACKUP_FILE, ".tmp", getCacheDir());
            FileOutputStream fileOutputStream = new FileOutputStream(createTempFile);
            try {
                StreamUtil.copy(openInputStream, fileOutputStream);
                fileOutputStream.close();
                if (openInputStream != null) {
                    openInputStream.close();
                }
                return createTempFile;
            } finally {
            }
        } catch (Throwable th) {
            if (openInputStream != null) {
                try {
                    openInputStream.close();
                } catch (Throwable th2) {
                    th.addSuppressed(th2);
                }
            }
            throw th;
        }
    }

    private void startBackupTransfer(String str) {
        ProgressDialog progressDialog = this.progressDialog;
        if (progressDialog != null) {
            progressDialog.dismiss();
            this.progressDialog = null;
        }
        Intent intent = new Intent((Context) this, (Class<?>) BackupTransferActivity.class);
        intent.putExtra(BackupTransferActivity.TRANSFER_MODE, BackupTransferActivity.TransferMode.RECEIVER_SCAN_QR.getInt());
        intent.putExtra(BackupTransferActivity.QR_CODE, str);
        startActivity(intent);
    }

    private void progressError(String str) {
        this.progressDialog.dismiss();
        maybeShowConfigurationError(this, str);
    }

    private void progressUpdate(int i) {
        this.progressDialog.setMessage(getResources().getString(R.string.one_moment) + String.format(" %d%%", Integer.valueOf(i / 10)));
    }

    private void progressSuccess() {
        DcHelper.getEventCenter(this).endCaptureNextError();
        this.progressDialog.dismiss();
        Intent intent = new Intent(getApplicationContext(), (Class<?>) ConversationListActivity.class);
        intent.putExtra("from_welcome", true);
        startActivity(intent);
        finish();
    }

    public static void maybeShowConfigurationError(Activity activity, String str) {
        if (activity.isFinishing() || str == null || str.isEmpty()) {
            return;
        }
        AlertDialog create = new AlertDialog.Builder(activity).setMessage(str).setPositiveButton(android.R.string.ok, (DialogInterface.OnClickListener) null).create();
        create.show();
        try {
            Linkify.addLinks((TextView) create.findViewById(android.R.id.message), 3);
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void handleEvent(DcEvent dcEvent) {
        if (dcEvent.getId() == 2051) {
            long data1Int = dcEvent.getData1Int();
            if (this.progressDialog == null || this.notificationController == null) {
                if (data1Int == 1000) {
                    finish();
                    return;
                }
                return;
            }
            if (data1Int == 0) {
                if (!this.imexUserAborted) {
                    progressError(this.dcContext.getLastError());
                }
                this.notificationController.close();
                cleanupTempBackupFile();
                return;
            }
            if (data1Int < 1000) {
                int i = (int) data1Int;
                progressUpdate(i);
                this.notificationController.setProgress(1000L, data1Int, String.format(" %d%%", Integer.valueOf(i / 10)));
            } else if (data1Int == 1000) {
                DcHelper.getAccounts(this).startIo();
                progressSuccess();
                this.notificationController.close();
                cleanupTempBackupFile();
            }
        }
    }

    protected void onActivityResult(int i, int i2, Intent intent) {
        super.onActivityResult(i, i2, intent);
        if (i2 != -1) {
            return;
        }
        if (i != 49374) {
            if (i == 20574) {
                Uri data = intent != null ? intent.getData() : null;
                if (data == null) {
                    Log.e(TAG, " Can't import null URI");
                    return;
                } else {
                    startImport(null, data);
                    return;
                }
            }
            return;
        }
        final String stringExtra = intent.getStringExtra(RegistrationQrActivity.QRDATA_EXTRA);
        if (stringExtra == null) {
            IntentResult parseActivityResult = IntentIntegrator.parseActivityResult(i, i2, intent);
            if (parseActivityResult == null || parseActivityResult.getFormatName() == null) {
                return;
            } else {
                stringExtra = parseActivityResult.getContents();
            }
        }
        int state = this.dcContext.checkQr(stringExtra).getState();
        if (state == 252) {
            new AlertDialog.Builder(this).setTitle(R.string.multidevice_receiver_title).setMessage(R.string.multidevice_receiver_scanning_ask).setPositiveButton(R.string.perm_continue, new DialogInterface.OnClickListener() {
                @Override
                public final void onClick(DialogInterface dialogInterface, int i3) {
                    WelcomeActivity.this.m1320x16dfe7e3(stringExtra, dialogInterface, i3);
                }
            }).setNegativeButton(R.string.cancel, (DialogInterface.OnClickListener) null).setCancelable(false).show();
        } else if (state == 255) {
            new AlertDialog.Builder(this).setTitle(R.string.multidevice_receiver_title).setMessage(R.string.multidevice_receiver_needs_update).setPositiveButton(R.string.ok, (DialogInterface.OnClickListener) null).show();
        } else {
            new AlertDialog.Builder(this).setMessage(R.string.qraccount_qr_code_cannot_be_used).setPositiveButton(R.string.ok, (DialogInterface.OnClickListener) null).show();
        }
    }

    void m1320x16dfe7e3(String str, DialogInterface dialogInterface, int i) {
        startBackupTransfer(str);
    }

    private void cleanupTempBackupFile() {
        try {
            for (File file : getCacheDir().listFiles(new FilenameFilter() {
                @Override
                public final boolean accept(File file2, String str) {
                    boolean startsWith;
                    startsWith = str.startsWith(WelcomeActivity.TMP_BACKUP_FILE);
                    return startsWith;
                }
            })) {
                if (file.getName().endsWith("tmp")) {
                    Log.i(TAG, "Deleting temp backup file " + file);
                    file.delete();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void onBackPressed() {
        AccountManager accountManager = AccountManager.getInstance();
        if (accountManager.canRollbackAccountCreation(this)) {
            accountManager.rollbackAccountCreation(this);
        } else {
            super.onBackPressed();
        }
    }
}