Aegis/app/src/main/java/com/beemdevelopment/aegis/ui/IntroActivity.java

134 lines
5 KiB
Java
Raw Normal View History

package com.beemdevelopment.aegis.ui;
import android.os.Bundle;
2018-05-09 15:49:32 +02:00
import android.view.WindowManager;
import androidx.fragment.app.Fragment;
import com.beemdevelopment.aegis.AegisApplication;
import com.beemdevelopment.aegis.Preferences;
import com.beemdevelopment.aegis.R;
import com.beemdevelopment.aegis.ui.slides.SecuritySetupSlide;
import com.beemdevelopment.aegis.ui.slides.SecurityPickerSlide;
import com.beemdevelopment.aegis.vault.Vault;
import com.beemdevelopment.aegis.vault.VaultFile;
import com.beemdevelopment.aegis.vault.VaultFileCredentials;
import com.beemdevelopment.aegis.vault.VaultFileException;
import com.beemdevelopment.aegis.vault.VaultManager;
import com.beemdevelopment.aegis.vault.VaultManagerException;
2020-05-05 19:14:10 +02:00
import com.github.appintro.AppIntro2;
import com.github.appintro.AppIntroFragment;
import com.github.appintro.model.SliderPage;
import org.json.JSONObject;
public class IntroActivity extends AppIntro2 {
private SecuritySetupSlide securitySetupSlide;
private SecurityPickerSlide _securityPickerSlide;
2017-08-26 21:15:53 +02:00
private Fragment _endSlide;
private AegisApplication _app;
private Preferences _prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_app = (AegisApplication) getApplication();
2018-05-09 15:49:32 +02:00
// set FLAG_SECURE on the window of every IntroActivity
_prefs = new Preferences(this);
if (_prefs.isSecureScreenEnabled()) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
}
2018-05-09 15:49:32 +02:00
2018-06-06 18:01:35 +02:00
setWizardMode(true);
2020-05-05 19:14:10 +02:00
setSkipButtonEnabled(false);
showStatusBar(true);
setSystemBackButtonLocked(true);
2018-09-18 23:56:25 +02:00
setBarColor(getResources().getColor(R.color.colorPrimary));
SliderPage homeSliderPage = new SliderPage();
2018-10-09 23:13:51 +02:00
homeSliderPage.setTitle(getString(R.string.welcome));
2019-09-06 23:58:04 +02:00
homeSliderPage.setImageDrawable(R.drawable.app_icon);
2018-09-18 23:56:25 +02:00
homeSliderPage.setTitleColor(getResources().getColor(R.color.primary_text_dark));
2018-10-09 23:13:51 +02:00
homeSliderPage.setDescription(getString(R.string.app_description));
2020-05-05 19:14:10 +02:00
homeSliderPage.setDescriptionColor(getResources().getColor(R.color.primary_text_dark));
homeSliderPage.setBackgroundColor(getResources().getColor(R.color.colorSecondary));
addSlide(AppIntroFragment.newInstance(homeSliderPage));
_securityPickerSlide = new SecurityPickerSlide();
_securityPickerSlide.setBgColor(getResources().getColor(R.color.colorSecondary));
addSlide(_securityPickerSlide);
securitySetupSlide = new SecuritySetupSlide();
securitySetupSlide.setBgColor(getResources().getColor(R.color.colorSecondary));
addSlide(securitySetupSlide);
SliderPage endSliderPage = new SliderPage();
2018-10-09 23:13:51 +02:00
endSliderPage.setTitle(getString(R.string.setup_completed));
endSliderPage.setDescription(getString(R.string.setup_completed_description));
2019-09-06 23:58:04 +02:00
endSliderPage.setImageDrawable(R.drawable.app_icon);
2020-05-05 19:14:10 +02:00
endSliderPage.setBackgroundColor(getResources().getColor(R.color.colorSecondary));
2017-08-26 21:15:53 +02:00
_endSlide = AppIntroFragment.newInstance(endSliderPage);
addSlide(_endSlide);
}
@Override
public void onSlideChanged(Fragment oldFragment, Fragment newFragment) {
if (oldFragment == _securityPickerSlide && newFragment != _endSlide) {
// skip to the last slide if no encryption will be used
int cryptType = getIntent().getIntExtra("cryptType", SecurityPickerSlide.CRYPT_TYPE_INVALID);
if (cryptType == SecurityPickerSlide.CRYPT_TYPE_NONE) {
// TODO: no magic indices
2020-05-05 19:14:10 +02:00
goToNextSlide(false);
}
}
2020-05-05 19:14:10 +02:00
if (newFragment == _endSlide) {
setWizardMode(false);
}
2020-05-05 19:14:10 +02:00
setSwipeLock(true);
}
@Override
public void onDonePressed(Fragment currentFragment) {
super.onDonePressed(currentFragment);
int cryptType = securitySetupSlide.getCryptType();
VaultFileCredentials creds = securitySetupSlide.getCredentials();
Vault vault = new Vault();
VaultFile vaultFile = new VaultFile();
try {
JSONObject obj = vault.toJson();
if (cryptType == SecurityPickerSlide.CRYPT_TYPE_NONE) {
vaultFile.setContent(obj);
2017-08-06 21:45:27 +02:00
} else {
vaultFile.setContent(obj, creds);
2017-08-06 21:45:27 +02:00
}
VaultManager.save(getApplicationContext(), vaultFile);
} catch (VaultManagerException | VaultFileException e) {
e.printStackTrace();
Dialogs.showErrorDialog(this, R.string.vault_init_error, e);
return;
}
if (cryptType == SecurityPickerSlide.CRYPT_TYPE_NONE) {
_app.initVaultManager(vault, null);
} else {
_app.initVaultManager(vault, creds);
}
// skip the intro from now on
_prefs.setIntroDone(true);
setResult(RESULT_OK);
finish();
}
public void goToNextSlide() {
super.goToNextSlide(false);
}
}