mirror of
https://github.com/beemdevelopment/Aegis.git
synced 2025-05-14 14:02:49 +00:00
Replace startActivityForResult with result launchers
This commit is contained in:
parent
adaae9e6d6
commit
ca530f229b
8 changed files with 206 additions and 176 deletions
|
@ -21,6 +21,8 @@ import android.widget.LinearLayout;
|
||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
|
|
||||||
import androidx.activity.OnBackPressedCallback;
|
import androidx.activity.OnBackPressedCallback;
|
||||||
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.ActionBar;
|
import androidx.appcompat.app.ActionBar;
|
||||||
|
@ -89,8 +91,6 @@ import java.util.stream.Collectors;
|
||||||
import de.hdodenhof.circleimageview.CircleImageView;
|
import de.hdodenhof.circleimageview.CircleImageView;
|
||||||
|
|
||||||
public class EditEntryActivity extends AegisActivity {
|
public class EditEntryActivity extends AegisActivity {
|
||||||
private static final int PICK_IMAGE_REQUEST = 0;
|
|
||||||
|
|
||||||
private boolean _isNew = false;
|
private boolean _isNew = false;
|
||||||
private boolean _isManual = false;
|
private boolean _isManual = false;
|
||||||
private VaultEntry _origEntry;
|
private VaultEntry _origEntry;
|
||||||
|
@ -128,6 +128,29 @@ public class EditEntryActivity extends AegisActivity {
|
||||||
private BackPressHandler _backPressHandler;
|
private BackPressHandler _backPressHandler;
|
||||||
private IconBackPressHandler _iconBackPressHandler;
|
private IconBackPressHandler _iconBackPressHandler;
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> pickImageResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
Intent data = activityResult.getData();
|
||||||
|
if (activityResult.getResultCode() != RESULT_OK || data == null || data.getData() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String fileType = SafHelper.getMimeType(this, data.getData());
|
||||||
|
if (fileType != null && fileType.equals(IconType.SVG.toMimeType())) {
|
||||||
|
ImportFileTask.Params params = new ImportFileTask.Params(data.getData(), "icon", null);
|
||||||
|
ImportFileTask task = new ImportFileTask(this, result -> {
|
||||||
|
if (result.getError() == null) {
|
||||||
|
CustomSvgIcon icon = new CustomSvgIcon(result.getFile());
|
||||||
|
selectIcon(icon);
|
||||||
|
} else {
|
||||||
|
Dialogs.showErrorDialog(this, R.string.reading_file_error, result.getError());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
task.execute(getLifecycle(), params);
|
||||||
|
} else {
|
||||||
|
startEditingIcon(data.getData());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -489,7 +512,7 @@ public class EditEntryActivity extends AegisActivity {
|
||||||
|
|
||||||
Intent chooserIntent = Intent.createChooser(galleryIntent, getString(R.string.select_icon));
|
Intent chooserIntent = Intent.createChooser(galleryIntent, getString(R.string.select_icon));
|
||||||
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { fileIntent });
|
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { fileIntent });
|
||||||
_vaultManager.startActivityForResult(this, chooserIntent, PICK_IMAGE_REQUEST);
|
_vaultManager.fireIntentLauncher(this, chooserIntent, pickImageResultLauncher);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resetUsageCount() {
|
private void resetUsageCount() {
|
||||||
|
@ -618,29 +641,6 @@ public class EditEntryActivity extends AegisActivity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onActivityResult(int requestCode, final int resultCode, Intent data) {
|
|
||||||
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
|
|
||||||
String fileType = SafHelper.getMimeType(this, data.getData());
|
|
||||||
if (fileType != null && fileType.equals(IconType.SVG.toMimeType())) {
|
|
||||||
ImportFileTask.Params params = new ImportFileTask.Params(data.getData(), "icon", null);
|
|
||||||
ImportFileTask task = new ImportFileTask(this, result -> {
|
|
||||||
if (result.getError() == null) {
|
|
||||||
CustomSvgIcon icon = new CustomSvgIcon(result.getFile());
|
|
||||||
selectIcon(icon);
|
|
||||||
} else {
|
|
||||||
Dialogs.showErrorDialog(this, R.string.reading_file_error, result.getError());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
task.execute(getLifecycle(), params);
|
|
||||||
} else {
|
|
||||||
startEditingIcon(data.getData());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
private int parsePeriod() throws ParseException {
|
private int parsePeriod() throws ParseException {
|
||||||
try {
|
try {
|
||||||
return Integer.parseInt(_textPeriodCounter.getText().toString());
|
return Integer.parseInt(_textPeriodCounter.getText().toString());
|
||||||
|
|
|
@ -30,6 +30,8 @@ import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.activity.OnBackPressedCallback;
|
import androidx.activity.OnBackPressedCallback;
|
||||||
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.view.ActionMode;
|
import androidx.appcompat.view.ActionMode;
|
||||||
|
@ -68,17 +70,6 @@ import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class MainActivity extends AegisActivity implements EntryListView.Listener {
|
public class MainActivity extends AegisActivity implements EntryListView.Listener {
|
||||||
// activity request codes
|
|
||||||
private static final int CODE_SCAN = 0;
|
|
||||||
private static final int CODE_ADD_ENTRY = 1;
|
|
||||||
private static final int CODE_EDIT_ENTRY = 2;
|
|
||||||
private static final int CODE_DO_INTRO = 3;
|
|
||||||
private static final int CODE_DECRYPT = 4;
|
|
||||||
private static final int CODE_PREFERENCES = 5;
|
|
||||||
private static final int CODE_SCAN_IMAGE = 6;
|
|
||||||
private static final int CODE_ASSIGN_ICONS = 7;
|
|
||||||
|
|
||||||
|
|
||||||
// Permission request codes
|
// Permission request codes
|
||||||
private static final int CODE_PERM_CAMERA = 0;
|
private static final int CODE_PERM_CAMERA = 0;
|
||||||
|
|
||||||
|
@ -108,6 +99,69 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
private SearchViewBackPressHandler _searchViewBackPressHandler;
|
private SearchViewBackPressHandler _searchViewBackPressHandler;
|
||||||
private ActionModeBackPressHandler _actionModeBackPressHandler;
|
private ActionModeBackPressHandler _actionModeBackPressHandler;
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> authResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
_isAuthenticating = false;
|
||||||
|
if (activityResult.getResultCode() == RESULT_OK) {
|
||||||
|
onDecryptResult();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> introResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
_isDoingIntro = false;
|
||||||
|
if (activityResult.getResultCode() == RESULT_OK) {
|
||||||
|
onIntroResult();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> scanResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
if (activityResult.getResultCode() != RESULT_OK || activityResult.getData() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
onScanResult(activityResult.getData());
|
||||||
|
});
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> assignIconsResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
if (activityResult.getResultCode() != RESULT_OK || activityResult.getData() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
onAssignEntriesResult(activityResult.getData());
|
||||||
|
});
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> preferenceResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
if (activityResult.getResultCode() != RESULT_OK || activityResult.getData() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
onPreferencesResult(activityResult.getData());
|
||||||
|
});
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> editEntryResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
if (activityResult.getResultCode() != RESULT_OK || activityResult.getData() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
onEditEntryResult(activityResult.getData());
|
||||||
|
});
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> addEntryResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
if (activityResult.getResultCode() != RESULT_OK || activityResult.getData() == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
onAddEntryResult(activityResult.getData());
|
||||||
|
});
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> codeScanResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
if (activityResult.getResultCode() == RESULT_OK && activityResult.getData() != null) {
|
||||||
|
onScanImageResult(activityResult.getData());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -155,7 +209,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
|
|
||||||
view.findViewById(R.id.fab_enter).setOnClickListener(v1 -> {
|
view.findViewById(R.id.fab_enter).setOnClickListener(v1 -> {
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
startEditEntryActivityForManual(CODE_ADD_ENTRY);
|
startEditEntryActivityForManual();
|
||||||
});
|
});
|
||||||
view.findViewById(R.id.fab_scan_image).setOnClickListener(v2 -> {
|
view.findViewById(R.id.fab_scan_image).setOnClickListener(v2 -> {
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
|
@ -201,48 +255,6 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
instance.putBoolean("isAuthenticating", _isAuthenticating);
|
instance.putBoolean("isAuthenticating", _isAuthenticating);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
if (requestCode == CODE_DECRYPT) {
|
|
||||||
_isAuthenticating = false;
|
|
||||||
}
|
|
||||||
if (requestCode == CODE_DO_INTRO) {
|
|
||||||
_isDoingIntro = false;
|
|
||||||
}
|
|
||||||
if (resultCode != RESULT_OK) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (requestCode) {
|
|
||||||
case CODE_SCAN:
|
|
||||||
onScanResult(data);
|
|
||||||
break;
|
|
||||||
case CODE_ADD_ENTRY:
|
|
||||||
onAddEntryResult(data);
|
|
||||||
break;
|
|
||||||
case CODE_EDIT_ENTRY:
|
|
||||||
onEditEntryResult(data);
|
|
||||||
break;
|
|
||||||
case CODE_DO_INTRO:
|
|
||||||
onIntroResult();
|
|
||||||
break;
|
|
||||||
case CODE_DECRYPT:
|
|
||||||
onDecryptResult();
|
|
||||||
break;
|
|
||||||
case CODE_PREFERENCES:
|
|
||||||
onPreferencesResult(data);
|
|
||||||
break;
|
|
||||||
case CODE_SCAN_IMAGE:
|
|
||||||
onScanImageResult(data);
|
|
||||||
break;
|
|
||||||
case CODE_ASSIGN_ICONS:
|
|
||||||
onAssignEntriesResult(data);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
||||||
if (!PermissionHelper.checkResults(grantResults)) {
|
if (!PermissionHelper.checkResults(grantResults)) {
|
||||||
|
@ -303,27 +315,27 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startEditEntryActivityForNew(int requestCode, VaultEntry entry) {
|
private void startEditEntryActivityForNew(VaultEntry entry) {
|
||||||
Intent intent = new Intent(this, EditEntryActivity.class);
|
Intent intent = new Intent(this, EditEntryActivity.class);
|
||||||
intent.putExtra("newEntry", entry);
|
intent.putExtra("newEntry", entry);
|
||||||
intent.putExtra("isManual", false);
|
intent.putExtra("isManual", false);
|
||||||
startActivityForResult(intent, requestCode);
|
addEntryResultLauncher.launch(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startEditEntryActivityForManual(int requestCode) {
|
private void startEditEntryActivityForManual() {
|
||||||
Intent intent = new Intent(this, EditEntryActivity.class);
|
Intent intent = new Intent(this, EditEntryActivity.class);
|
||||||
intent.putExtra("newEntry", VaultEntry.getDefault());
|
intent.putExtra("newEntry", VaultEntry.getDefault());
|
||||||
intent.putExtra("isManual", true);
|
intent.putExtra("isManual", true);
|
||||||
startActivityForResult(intent, requestCode);
|
addEntryResultLauncher.launch(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startEditEntryActivity(int requestCode, VaultEntry entry) {
|
private void startEditEntryActivity(VaultEntry entry) {
|
||||||
Intent intent = new Intent(this, EditEntryActivity.class);
|
Intent intent = new Intent(this, EditEntryActivity.class);
|
||||||
intent.putExtra("entryUUID", entry.getUUID());
|
intent.putExtra("entryUUID", entry.getUUID());
|
||||||
startActivityForResult(intent, requestCode);
|
editEntryResultLauncher.launch(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startAssignIconsActivity(int requestCode, List<VaultEntry> entries) {
|
private void startAssignIconsActivity(List<VaultEntry> entries) {
|
||||||
ArrayList<UUID> assignIconEntriesIds = new ArrayList<>();
|
ArrayList<UUID> assignIconEntriesIds = new ArrayList<>();
|
||||||
Intent assignIconIntent = new Intent(getBaseContext(), AssignIconsActivity.class);
|
Intent assignIconIntent = new Intent(getBaseContext(), AssignIconsActivity.class);
|
||||||
for (VaultEntry entry : entries) {
|
for (VaultEntry entry : entries) {
|
||||||
|
@ -331,13 +343,13 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
}
|
}
|
||||||
|
|
||||||
assignIconIntent.putExtra("entries", assignIconEntriesIds);
|
assignIconIntent.putExtra("entries", assignIconEntriesIds);
|
||||||
startActivityForResult(assignIconIntent, requestCode);
|
assignIconsResultLauncher.launch(assignIconIntent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startIntroActivity() {
|
private void startIntroActivity() {
|
||||||
if (!_isDoingIntro) {
|
if (!_isDoingIntro) {
|
||||||
Intent intro = new Intent(this, IntroActivity.class);
|
Intent intro = new Intent(this, IntroActivity.class);
|
||||||
startActivityForResult(intro, CODE_DO_INTRO);
|
introResultLauncher.launch(intro);
|
||||||
_isDoingIntro = true;
|
_isDoingIntro = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -473,7 +485,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
|
|
||||||
private void importScannedEntries(List<VaultEntry> entries) {
|
private void importScannedEntries(List<VaultEntry> entries) {
|
||||||
if (entries.size() == 1) {
|
if (entries.size() == 1) {
|
||||||
startEditEntryActivityForNew(CODE_ADD_ENTRY, entries.get(0));
|
startEditEntryActivityForNew(entries.get(0));
|
||||||
} else if (entries.size() > 1) {
|
} else if (entries.size() > 1) {
|
||||||
for (VaultEntry entry: entries) {
|
for (VaultEntry entry: entries) {
|
||||||
_vaultManager.getVault().addEntry(entry);
|
_vaultManager.getVault().addEntry(entry);
|
||||||
|
@ -517,7 +529,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
}
|
}
|
||||||
|
|
||||||
Intent scannerActivity = new Intent(getApplicationContext(), ScannerActivity.class);
|
Intent scannerActivity = new Intent(getApplicationContext(), ScannerActivity.class);
|
||||||
startActivityForResult(scannerActivity, CODE_SCAN);
|
scanResultLauncher.launch(scannerActivity);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startScanImageActivity() {
|
private void startScanImageActivity() {
|
||||||
|
@ -531,7 +543,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
|
|
||||||
Intent chooserIntent = Intent.createChooser(galleryIntent, getString(R.string.select_picture));
|
Intent chooserIntent = Intent.createChooser(galleryIntent, getString(R.string.select_picture));
|
||||||
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { fileIntent });
|
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { fileIntent });
|
||||||
_vaultManager.startActivityForResult(this, chooserIntent, CODE_SCAN_IMAGE);
|
_vaultManager.fireIntentLauncher(this, chooserIntent, codeScanResultLauncher);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startPreferencesActivity() {
|
private void startPreferencesActivity() {
|
||||||
|
@ -542,7 +554,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
Intent intent = new Intent(this, PreferencesActivity.class);
|
Intent intent = new Intent(this, PreferencesActivity.class);
|
||||||
intent.putExtra("fragment", fragmentType);
|
intent.putExtra("fragment", fragmentType);
|
||||||
intent.putExtra("pref", preference);
|
intent.putExtra("pref", preference);
|
||||||
startActivityForResult(intent, CODE_PREFERENCES);
|
preferenceResultLauncher.launch(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doShortcutActions() {
|
private void doShortcutActions() {
|
||||||
|
@ -589,7 +601,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
}
|
}
|
||||||
|
|
||||||
VaultEntry entry = new VaultEntry(info);
|
VaultEntry entry = new VaultEntry(info);
|
||||||
startEditEntryActivityForNew(CODE_ADD_ENTRY, entry);
|
startEditEntryActivityForNew(entry);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Intent.ACTION_SEND:
|
case Intent.ACTION_SEND:
|
||||||
|
@ -617,7 +629,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
}
|
}
|
||||||
|
|
||||||
VaultEntry entry = new VaultEntry(info);
|
VaultEntry entry = new VaultEntry(info);
|
||||||
startEditEntryActivityForNew(CODE_ADD_ENTRY, entry);
|
startEditEntryActivityForNew(entry);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -826,7 +838,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
if (!_isAuthenticating) {
|
if (!_isAuthenticating) {
|
||||||
Intent intent = new Intent(this, AuthActivity.class);
|
Intent intent = new Intent(this, AuthActivity.class);
|
||||||
intent.putExtra("inhibitBioPrompt", inhibitBioPrompt);
|
intent.putExtra("inhibitBioPrompt", inhibitBioPrompt);
|
||||||
startActivityForResult(intent, CODE_DECRYPT);
|
authResultLauncher.launch(intent);
|
||||||
_isAuthenticating = true;
|
_isAuthenticating = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1120,7 +1132,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
copyEntryCode(_selectedEntries.get(0));
|
copyEntryCode(_selectedEntries.get(0));
|
||||||
mode.finish();
|
mode.finish();
|
||||||
} else if (itemId == R.id.action_edit) {
|
} else if (itemId == R.id.action_edit) {
|
||||||
startEditEntryActivity(CODE_EDIT_ENTRY, _selectedEntries.get(0));
|
startEditEntryActivity(_selectedEntries.get(0));
|
||||||
mode.finish();
|
mode.finish();
|
||||||
} else if (itemId == R.id.action_toggle_favorite) {
|
} else if (itemId == R.id.action_toggle_favorite) {
|
||||||
for (VaultEntry entry : _selectedEntries) {
|
for (VaultEntry entry : _selectedEntries) {
|
||||||
|
@ -1154,7 +1166,7 @@ public class MainActivity extends AegisActivity implements EntryListView.Listene
|
||||||
setFavoriteMenuItemVisiblity();
|
setFavoriteMenuItemVisiblity();
|
||||||
setIsMultipleSelected(_selectedEntries.size() > 1);
|
setIsMultipleSelected(_selectedEntries.size() > 1);
|
||||||
} else if (itemId == R.id.action_assign_icons) {
|
} else if (itemId == R.id.action_assign_icons) {
|
||||||
startAssignIconsActivity(CODE_ASSIGN_ICONS, _selectedEntries);
|
startAssignIconsActivity(_selectedEntries);
|
||||||
mode.finish();
|
mode.finish();
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -11,6 +11,8 @@ import android.text.style.ForegroundColorSpan;
|
||||||
import android.text.style.StyleSpan;
|
import android.text.style.StyleSpan;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.SwitchPreferenceCompat;
|
import androidx.preference.SwitchPreferenceCompat;
|
||||||
|
@ -32,6 +34,15 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
|
||||||
private Preference _builtinBackupStatusPreference;
|
private Preference _builtinBackupStatusPreference;
|
||||||
private Preference _androidBackupStatusPreference;
|
private Preference _androidBackupStatusPreference;
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> backupsResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
Intent data = activityResult.getData();
|
||||||
|
int resultCode = activityResult.getResultCode();
|
||||||
|
if (data != null) {
|
||||||
|
onSelectBackupsLocationResult(resultCode, data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
@ -137,13 +148,6 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
if (data != null && requestCode == CODE_BACKUPS) {
|
|
||||||
onSelectBackupsLocationResult(resultCode, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onSelectBackupsLocationResult(int resultCode, Intent data) {
|
private void onSelectBackupsLocationResult(int resultCode, Intent data) {
|
||||||
Uri uri = data.getData();
|
Uri uri = data.getData();
|
||||||
if (resultCode != Activity.RESULT_OK || uri == null) {
|
if (resultCode != Activity.RESULT_OK || uri == null) {
|
||||||
|
@ -226,7 +230,7 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
|
||||||
| Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
|
| Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
|
||||||
| Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
|
| Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
|
||||||
|
|
||||||
_vaultManager.startActivityForResult(this, intent, CODE_BACKUPS);
|
_vaultManager.fireIntentLauncher(this, intent, backupsResultLauncher);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void scheduleBackup() {
|
private void scheduleBackup() {
|
||||||
|
|
|
@ -10,6 +10,8 @@ import android.view.animation.Animation;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
|
@ -36,8 +38,6 @@ import dagger.hilt.android.AndroidEntryPoint;
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
public class IconPacksManagerFragment extends Fragment implements IconPackAdapter.Listener {
|
public class IconPacksManagerFragment extends Fragment implements IconPackAdapter.Listener {
|
||||||
private static final int CODE_IMPORT = 0;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
IconPackManager _iconPackManager;
|
IconPackManager _iconPackManager;
|
||||||
|
|
||||||
|
@ -49,6 +49,14 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte
|
||||||
private LinearLayout _noIconPacksView;
|
private LinearLayout _noIconPacksView;
|
||||||
private FabScrollHelper _fabScrollHelper;
|
private FabScrollHelper _fabScrollHelper;
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> importResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
Intent data = activityResult.getData();
|
||||||
|
if (activityResult.getResultCode() == Activity.RESULT_OK && data != null && data.getData() != null) {
|
||||||
|
importIconPack(data.getData());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
public IconPacksManagerFragment() {
|
public IconPacksManagerFragment() {
|
||||||
super(R.layout.fragment_icon_packs);
|
super(R.layout.fragment_icon_packs);
|
||||||
}
|
}
|
||||||
|
@ -112,15 +120,6 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte
|
||||||
.create());
|
.create());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
|
||||||
|
|
||||||
if (requestCode == CODE_IMPORT && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
|
|
||||||
importIconPack(data.getData());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void importIconPack(Uri uri) {
|
private void importIconPack(Uri uri) {
|
||||||
ImportIconPackTask task = new ImportIconPackTask(requireContext(), result -> {
|
ImportIconPackTask task = new ImportIconPackTask(requireContext(), result -> {
|
||||||
Exception e = result.getException();
|
Exception e = result.getException();
|
||||||
|
@ -162,7 +161,7 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte
|
||||||
private void startImportIconPack() {
|
private void startImportIconPack() {
|
||||||
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||||
intent.setType("*/*");
|
intent.setType("*/*");
|
||||||
_vaultManager.startActivityForResult(this, intent, CODE_IMPORT);
|
_vaultManager.fireIntentLauncher(this, intent, importResultLauncher);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateEmptyState() {
|
private void updateEmptyState() {
|
||||||
|
|
|
@ -12,6 +12,8 @@ import android.widget.CheckBox;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;
|
||||||
import androidx.annotation.ArrayRes;
|
import androidx.annotation.ArrayRes;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
@ -66,6 +68,35 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
|
||||||
private DatabaseImporter.Definition _importerDef;
|
private DatabaseImporter.Definition _importerDef;
|
||||||
private Vault.EntryFilter _exportFilter;
|
private Vault.EntryFilter _exportFilter;
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> importResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
getResult().putExtra("needsRecreate", true);
|
||||||
|
});
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> importSelectResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
Intent data = activityResult.getData();
|
||||||
|
if (data != null) {
|
||||||
|
onImportSelectResult(activityResult.getResultCode(), data);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> exportResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult ->
|
||||||
|
onExportResult(CODE_EXPORT, activityResult.getResultCode(), activityResult.getData()));
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> exportPlainResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult ->
|
||||||
|
onExportResult(CODE_EXPORT_PLAIN, activityResult.getResultCode(), activityResult.getData()));
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> exportHtmlResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult ->
|
||||||
|
onExportResult(CODE_EXPORT_HTML, activityResult.getResultCode(), activityResult.getData()));
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> exportGoogleUriResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult ->
|
||||||
|
onExportResult(CODE_EXPORT_GOOGLE_URI, activityResult.getResultCode(), activityResult.getData()));
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||||
super.onCreatePreferences(savedInstanceState, rootKey);
|
super.onCreatePreferences(savedInstanceState, rootKey);
|
||||||
|
@ -82,7 +113,7 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
|
||||||
|
|
||||||
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||||
intent.setType("*/*");
|
intent.setType("*/*");
|
||||||
_vaultManager.startActivityForResult(this, intent, CODE_IMPORT_SELECT);
|
_vaultManager.fireIntentLauncher(this, intent, importSelectResultLauncher);
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
@ -114,28 +145,6 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
|
||||||
outState.putSerializable("importerDef", _importerDef);
|
outState.putSerializable("importerDef", _importerDef);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
if (requestCode == CODE_IMPORT) {
|
|
||||||
getResult().putExtra("needsRecreate", true);
|
|
||||||
} else if (data != null) {
|
|
||||||
switch (requestCode) {
|
|
||||||
case CODE_IMPORT_SELECT:
|
|
||||||
onImportSelectResult(resultCode, data);
|
|
||||||
break;
|
|
||||||
case CODE_EXPORT:
|
|
||||||
// intentional fallthrough
|
|
||||||
case CODE_EXPORT_PLAIN:
|
|
||||||
// intentional fallthrough
|
|
||||||
case CODE_EXPORT_HTML:
|
|
||||||
// intentional fallthrough
|
|
||||||
case CODE_EXPORT_GOOGLE_URI:
|
|
||||||
onExportResult(requestCode, resultCode, data);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void onImportSelectResult(int resultCode, Intent data) {
|
private void onImportSelectResult(int resultCode, Intent data) {
|
||||||
Uri uri = data.getData();
|
Uri uri = data.getData();
|
||||||
if (resultCode != Activity.RESULT_OK || uri == null) {
|
if (resultCode != Activity.RESULT_OK || uri == null) {
|
||||||
|
@ -157,7 +166,7 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
|
||||||
Intent intent = new Intent(requireContext(), ImportEntriesActivity.class);
|
Intent intent = new Intent(requireContext(), ImportEntriesActivity.class);
|
||||||
intent.putExtra("importerDef", importerDef);
|
intent.putExtra("importerDef", importerDef);
|
||||||
intent.putExtra("file", file);
|
intent.putExtra("file", file);
|
||||||
startActivityForResult(intent, CODE_IMPORT);
|
importResultLauncher.launch(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startExport() {
|
private void startExport() {
|
||||||
|
@ -260,14 +269,15 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
int pos = getStringResourceIndex(R.array.export_formats, dropdown.getText().toString());
|
int pos = getStringResourceIndex(R.array.export_formats, dropdown.getText().toString());
|
||||||
int requestCode = getExportRequestCode(pos, checkBoxEncrypt.isChecked());
|
boolean encrypt = checkBoxEncrypt.isChecked();
|
||||||
VaultBackupManager.FileInfo fileInfo = getExportFileInfo(pos, checkBoxEncrypt.isChecked());
|
VaultBackupManager.FileInfo fileInfo = getExportFileInfo(pos, encrypt);
|
||||||
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT)
|
Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT)
|
||||||
.addCategory(Intent.CATEGORY_OPENABLE)
|
.addCategory(Intent.CATEGORY_OPENABLE)
|
||||||
.setType(getExportMimeType(requestCode))
|
.setType(getExportMimeType(getExportRequestCode(pos, encrypt)))
|
||||||
.putExtra(Intent.EXTRA_TITLE, fileInfo.toString());
|
.putExtra(Intent.EXTRA_TITLE, fileInfo.toString());
|
||||||
|
|
||||||
_vaultManager.startActivityForResult(this, intent, requestCode);
|
ActivityResultLauncher<Intent> resultLauncher = getExportRequestLauncher(pos, encrypt);
|
||||||
|
_vaultManager.fireIntentLauncher(this, intent, resultLauncher);
|
||||||
});
|
});
|
||||||
|
|
||||||
btnNeutral.setOnClickListener(v -> {
|
btnNeutral.setOnClickListener(v -> {
|
||||||
|
@ -286,8 +296,9 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
File file;
|
File file;
|
||||||
|
boolean encrypt = checkBoxEncrypt.isChecked();
|
||||||
try {
|
try {
|
||||||
VaultBackupManager.FileInfo fileInfo = getExportFileInfo(pos, checkBoxEncrypt.isChecked());
|
VaultBackupManager.FileInfo fileInfo = getExportFileInfo(pos, encrypt);
|
||||||
file = File.createTempFile(fileInfo.getFilename() + "-", "." + fileInfo.getExtension(), getExportCacheDir());
|
file = File.createTempFile(fileInfo.getFilename() + "-", "." + fileInfo.getExtension(), getExportCacheDir());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -295,7 +306,8 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int requestCode = getExportRequestCode(pos, checkBoxEncrypt.isChecked());
|
int requestCode = getExportRequestCode(pos, encrypt);
|
||||||
|
ActivityResultLauncher<Intent> resultLauncher = getExportRequestLauncher(pos, encrypt);
|
||||||
startExportVault(requestCode, cb -> {
|
startExportVault(requestCode, cb -> {
|
||||||
try (OutputStream stream = new FileOutputStream(file)) {
|
try (OutputStream stream = new FileOutputStream(file)) {
|
||||||
cb.exportVault(stream);
|
cb.exportVault(stream);
|
||||||
|
@ -314,7 +326,7 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
|
||||||
.setType(getExportMimeType(requestCode))
|
.setType(getExportMimeType(requestCode))
|
||||||
.putExtra(Intent.EXTRA_STREAM, uri);
|
.putExtra(Intent.EXTRA_STREAM, uri);
|
||||||
Intent chooser = Intent.createChooser(intent, getString(R.string.pref_export_summary));
|
Intent chooser = Intent.createChooser(intent, getString(R.string.pref_export_summary));
|
||||||
_vaultManager.startActivity(this, chooser);
|
_vaultManager.fireIntentLauncher(this, chooser, resultLauncher);
|
||||||
}, _exportFilter);
|
}, _exportFilter);
|
||||||
_exportFilter = null;
|
_exportFilter = null;
|
||||||
});
|
});
|
||||||
|
@ -391,6 +403,16 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
|
||||||
return CODE_EXPORT_GOOGLE_URI;
|
return CODE_EXPORT_GOOGLE_URI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ActivityResultLauncher<Intent> getExportRequestLauncher(int spinnerPos, boolean encrypt) {
|
||||||
|
if (spinnerPos == 0) {
|
||||||
|
return encrypt ? exportResultLauncher : exportPlainResultLauncher;
|
||||||
|
} else if (spinnerPos == 1) {
|
||||||
|
return exportHtmlResultLauncher;
|
||||||
|
}
|
||||||
|
|
||||||
|
return exportGoogleUriResultLauncher;
|
||||||
|
}
|
||||||
|
|
||||||
private static VaultBackupManager.FileInfo getExportFileInfo(int spinnerPos, boolean encrypt) {
|
private static VaultBackupManager.FileInfo getExportFileInfo(int spinnerPos, boolean encrypt) {
|
||||||
if (spinnerPos == 0) {
|
if (spinnerPos == 0) {
|
||||||
String filename = encrypt ? VaultRepository.FILENAME_PREFIX_EXPORT : VaultRepository.FILENAME_PREFIX_EXPORT_PLAIN;
|
String filename = encrypt ? VaultRepository.FILENAME_PREFIX_EXPORT : VaultRepository.FILENAME_PREFIX_EXPORT_PLAIN;
|
||||||
|
@ -483,7 +505,10 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onExportResult(int requestCode, int resultCode, Intent data) {
|
private void onExportResult(int requestCode, int resultCode, @Nullable Intent data) {
|
||||||
|
if (data == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
Uri uri = data.getData();
|
Uri uri = data.getData();
|
||||||
if (resultCode != Activity.RESULT_OK || uri == null) {
|
if (resultCode != Activity.RESULT_OK || uri == null) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -25,14 +25,10 @@ import dagger.hilt.android.AndroidEntryPoint;
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
public abstract class PreferencesFragment extends PreferenceFragmentCompat {
|
public abstract class PreferencesFragment extends PreferenceFragmentCompat {
|
||||||
// activity request codes
|
// activity request codes
|
||||||
public static final int CODE_IMPORT_SELECT = 0;
|
|
||||||
public static final int CODE_GROUPS = 3;
|
|
||||||
public static final int CODE_IMPORT = 4;
|
|
||||||
public static final int CODE_EXPORT = 5;
|
public static final int CODE_EXPORT = 5;
|
||||||
public static final int CODE_EXPORT_PLAIN = 6;
|
public static final int CODE_EXPORT_PLAIN = 6;
|
||||||
public static final int CODE_EXPORT_GOOGLE_URI = 7;
|
public static final int CODE_EXPORT_GOOGLE_URI = 7;
|
||||||
public static final int CODE_EXPORT_HTML = 8;
|
public static final int CODE_EXPORT_HTML = 8;
|
||||||
public static final int CODE_BACKUPS = 9;
|
|
||||||
|
|
||||||
private Intent _result;
|
private Intent _result;
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@ import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import com.beemdevelopment.aegis.R;
|
import com.beemdevelopment.aegis.R;
|
||||||
|
@ -24,29 +26,28 @@ import java.io.FileInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
public class WelcomeSlide extends SlideFragment {
|
public class WelcomeSlide extends SlideFragment {
|
||||||
public static final int CODE_IMPORT_VAULT = 0;
|
|
||||||
|
|
||||||
private boolean _imported;
|
private boolean _imported;
|
||||||
private VaultFileCredentials _creds;
|
private VaultFileCredentials _creds;
|
||||||
|
|
||||||
|
private final ActivityResultLauncher<Intent> vaultImportResultLauncher =
|
||||||
|
registerForActivityResult(new StartActivityForResult(), activityResult -> {
|
||||||
|
Intent data = activityResult.getData();
|
||||||
|
if (data != null && data.getData() != null) {
|
||||||
|
startImportVault(data.getData());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View view = inflater.inflate(R.layout.fragment_welcome_slide, container, false);
|
View view = inflater.inflate(R.layout.fragment_welcome_slide, container, false);
|
||||||
view.findViewById(R.id.btnImport).setOnClickListener(v -> {
|
view.findViewById(R.id.btnImport).setOnClickListener(v -> {
|
||||||
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||||
intent.setType("*/*");
|
intent.setType("*/*");
|
||||||
startActivityForResult(intent, CODE_IMPORT_VAULT);
|
vaultImportResultLauncher.launch(intent);
|
||||||
});
|
});
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
if (requestCode == CODE_IMPORT_VAULT && data != null && data.getData() != null) {
|
|
||||||
startImportVault(data.getData());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSaveIntroState(@NonNull Bundle introState) {
|
public void onSaveIntroState(@NonNull Bundle introState) {
|
||||||
introState.putBoolean("imported", _imported);
|
introState.putBoolean("imported", _imported);
|
||||||
|
|
|
@ -6,6 +6,7 @@ import android.content.ActivityNotFoundException;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
|
||||||
|
import androidx.activity.result.ActivityResultLauncher;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
|
@ -304,11 +305,11 @@ public class VaultManager {
|
||||||
* Starts an external activity, temporarily blocks automatic lock of Aegis and
|
* Starts an external activity, temporarily blocks automatic lock of Aegis and
|
||||||
* shows an error dialog if the target activity is not found.
|
* shows an error dialog if the target activity is not found.
|
||||||
*/
|
*/
|
||||||
public void startActivityForResult(Activity activity, Intent intent, int requestCode) {
|
public void fireIntentLauncher(Activity activity, Intent intent, ActivityResultLauncher<Intent> resultLauncher) {
|
||||||
setBlockAutoLock(true);
|
setBlockAutoLock(true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
activity.startActivityForResult(intent, requestCode, null);
|
resultLauncher.launch(intent);
|
||||||
} catch (ActivityNotFoundException e) {
|
} catch (ActivityNotFoundException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
||||||
|
@ -324,19 +325,11 @@ public class VaultManager {
|
||||||
* Starts an external activity, temporarily blocks automatic lock of Aegis and
|
* Starts an external activity, temporarily blocks automatic lock of Aegis and
|
||||||
* shows an error dialog if the target activity is not found.
|
* shows an error dialog if the target activity is not found.
|
||||||
*/
|
*/
|
||||||
public void startActivity(Fragment fragment, Intent intent) {
|
public void fireIntentLauncher(Fragment fragment, Intent intent, ActivityResultLauncher<Intent> resultLauncher) {
|
||||||
startActivityForResult(fragment, intent, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts an external activity, temporarily blocks automatic lock of Aegis and
|
|
||||||
* shows an error dialog if the target activity is not found.
|
|
||||||
*/
|
|
||||||
public void startActivityForResult(Fragment fragment, Intent intent, int requestCode) {
|
|
||||||
setBlockAutoLock(true);
|
setBlockAutoLock(true);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
fragment.startActivityForResult(intent, requestCode, null);
|
resultLauncher.launch(intent);
|
||||||
} catch (ActivityNotFoundException e) {
|
} catch (ActivityNotFoundException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue