Use requireContext, requireActivity and requirePreference where possible

This commit is contained in:
Alexander Bakker 2022-04-10 18:44:25 +02:00
parent f7b4cceb81
commit beadf4db8b
17 changed files with 123 additions and 113 deletions

View file

@ -47,14 +47,14 @@ public abstract class DatabaseImporter {
_context = context;
}
protected Context getContext() {
protected Context requireContext() {
return _context;
}
protected abstract SuFile getAppPath() throws DatabaseImporterException, PackageManager.NameNotFoundException;
protected SuFile getAppPath(String pkgName, String subPath) throws PackageManager.NameNotFoundException {
PackageManager man = getContext().getPackageManager();
PackageManager man = requireContext().getPackageManager();
return new SuFile(man.getApplicationInfo(pkgName, 0).dataDir, subPath);
}

View file

@ -34,7 +34,7 @@ public class FreeOtpPlusImporter extends DatabaseImporter {
State state;
if (isInternal) {
state = new FreeOtpImporter(getContext()).read(stream);
state = new FreeOtpImporter(requireContext()).read(stream);
} else {
try {
String json = new String(IOUtils.readAll(stream), StandardCharsets.UTF_8);

View file

@ -34,7 +34,7 @@ public class GoogleAuthImporter extends DatabaseImporter {
@Override
public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {
SqlImporterHelper helper = new SqlImporterHelper(getContext());
SqlImporterHelper helper = new SqlImporterHelper(requireContext());
List<Entry> entries = helper.read(Entry.class, stream, "accounts");
return new State(entries);
}
@ -42,7 +42,7 @@ public class GoogleAuthImporter extends DatabaseImporter {
@Override
public DatabaseImporter.State readFromApp() throws PackageManager.NameNotFoundException, DatabaseImporterException {
SuFile path = getAppPath();
SqlImporterHelper helper = new SqlImporterHelper(getContext());
SqlImporterHelper helper = new SqlImporterHelper(requireContext());
List<Entry> entries = helper.read(Entry.class, path, "accounts");
return new State(entries);
}

View file

@ -34,7 +34,7 @@ public class MicrosoftAuthImporter extends DatabaseImporter {
@Override
public State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {
SqlImporterHelper helper = new SqlImporterHelper(getContext());
SqlImporterHelper helper = new SqlImporterHelper(requireContext());
List<Entry> entries = helper.read(Entry.class, stream, "accounts");
return new State(entries);
}
@ -42,7 +42,7 @@ public class MicrosoftAuthImporter extends DatabaseImporter {
@Override
public DatabaseImporter.State readFromApp() throws PackageManager.NameNotFoundException, DatabaseImporterException {
SuFile path = getAppPath();
SqlImporterHelper helper = new SqlImporterHelper(getContext());
SqlImporterHelper helper = new SqlImporterHelper(requireContext());
List<Entry> entries = helper.read(Entry.class, path, "accounts");
return new State(entries);
}

View file

@ -19,7 +19,7 @@ public class WinAuthImporter extends DatabaseImporter {
@Override
public WinAuthImporter.State read(InputStream stream, boolean isInternal) throws DatabaseImporterException {
GoogleAuthUriImporter importer = new GoogleAuthUriImporter(getContext());
GoogleAuthUriImporter importer = new GoogleAuthUriImporter(requireContext());
DatabaseImporter.State state = importer.read(stream);
return new State(state);
}

View file

@ -41,23 +41,23 @@ public abstract class SimpleWebViewDialog extends DialogFragment {
public Dialog onCreateDialog(Bundle savedInstanceState) {
final View view;
try {
view = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_web_view, null);
view = LayoutInflater.from(requireActivity()).inflate(R.layout.dialog_web_view, null);
} catch (InflateException e) {
e.printStackTrace();
return new AlertDialog.Builder(getActivity())
return new AlertDialog.Builder(requireActivity())
.setTitle(android.R.string.dialog_alert_title)
.setMessage(getString(R.string.webview_error))
.setPositiveButton(android.R.string.ok, null)
.show();
}
AlertDialog dialog = new AlertDialog.Builder(getActivity())
AlertDialog dialog = new AlertDialog.Builder(requireActivity())
.setTitle(_title)
.setView(view)
.setPositiveButton(android.R.string.ok, null)
.show();
String content = getContent(getContext());
String content = getContent(requireContext());
final WebView webView = view.findViewById(R.id.web_view);
webView.loadData(content, "text/html", "UTF-8");
return dialog;
@ -70,11 +70,11 @@ public abstract class SimpleWebViewDialog extends DialogFragment {
protected String getBackgroundColor() {
int backgroundColorResource = _theme == Theme.AMOLED ? R.attr.cardBackgroundFocused : R.attr.cardBackground;
return colorToCSS(ThemeHelper.getThemeColor(backgroundColorResource, getContext().getTheme()));
return colorToCSS(ThemeHelper.getThemeColor(backgroundColorResource, requireContext().getTheme()));
}
protected String getTextColor() {
return colorToCSS(0xFFFFFF & ThemeHelper.getThemeColor(R.attr.primaryText, getContext().getTheme()));
return colorToCSS(0xFFFFFF & ThemeHelper.getThemeColor(R.attr.primaryText, requireContext().getTheme()));
}
@SuppressLint("DefaultLocale")

View file

@ -27,17 +27,17 @@ public class AppearancePreferencesFragment extends PreferencesFragment {
super.onCreatePreferences(savedInstanceState, rootKey);
addPreferencesFromResource(R.xml.preferences_appearance);
_groupsPreference = findPreference("pref_groups");
_groupsPreference = requirePreference("pref_groups");
_groupsPreference.setOnPreferenceClickListener(preference -> {
Intent intent = new Intent(getActivity(), GroupManagerActivity.class);
Intent intent = new Intent(requireActivity(), GroupManagerActivity.class);
intent.putExtra("groups", new ArrayList<>(_vaultManager.getVault().getGroups()));
startActivityForResult(intent, CODE_GROUPS);
return true;
});
_resetUsageCountPreference = findPreference("pref_reset_usage_count");
_resetUsageCountPreference = requirePreference("pref_reset_usage_count");
_resetUsageCountPreference.setOnPreferenceClickListener(preference -> {
Dialogs.showSecureDialog(new AlertDialog.Builder(getActivity())
Dialogs.showSecureDialog(new AlertDialog.Builder(requireActivity())
.setTitle(R.string.preference_reset_usage_count)
.setMessage(R.string.preference_reset_usage_count_dialog)
.setPositiveButton(android.R.string.yes, (dialog, which) -> _prefs.clearUsageCount())
@ -47,12 +47,12 @@ public class AppearancePreferencesFragment extends PreferencesFragment {
});
int currentTheme = _prefs.getCurrentTheme().ordinal();
Preference darkModePreference = findPreference("pref_dark_mode");
Preference darkModePreference = requirePreference("pref_dark_mode");
darkModePreference.setSummary(String.format("%s: %s", getString(R.string.selected), getResources().getStringArray(R.array.theme_titles)[currentTheme]));
darkModePreference.setOnPreferenceClickListener(preference -> {
int currentTheme1 = _prefs.getCurrentTheme().ordinal();
Dialogs.showSecureDialog(new AlertDialog.Builder(getActivity())
Dialogs.showSecureDialog(new AlertDialog.Builder(requireActivity())
.setTitle(R.string.choose_theme)
.setSingleChoiceItems(R.array.theme_titles, currentTheme1, (dialog, which) -> {
int i = ((AlertDialog) dialog).getListView().getCheckedItemPosition();
@ -61,7 +61,7 @@ public class AppearancePreferencesFragment extends PreferencesFragment {
dialog.dismiss();
getResult().putExtra("needsRecreate", true);
getActivity().recreate();
requireActivity().recreate();
})
.setNegativeButton(android.R.string.cancel, null)
.create());
@ -69,11 +69,11 @@ public class AppearancePreferencesFragment extends PreferencesFragment {
return true;
});
Preference langPreference = findPreference("pref_lang");
Preference langPreference = requirePreference("pref_lang");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
langPreference.setOnPreferenceChangeListener((preference, newValue) -> {
getResult().putExtra("needsRecreate", true);
getActivity().recreate();
requireActivity().recreate();
return true;
});
} else {
@ -82,12 +82,12 @@ public class AppearancePreferencesFragment extends PreferencesFragment {
}
int currentViewMode = _prefs.getCurrentViewMode().ordinal();
Preference viewModePreference = findPreference("pref_view_mode");
Preference viewModePreference = requirePreference("pref_view_mode");
viewModePreference.setSummary(String.format("%s: %s", getString(R.string.selected), getResources().getStringArray(R.array.view_mode_titles)[currentViewMode]));
viewModePreference.setOnPreferenceClickListener(preference -> {
int currentViewMode1 = _prefs.getCurrentViewMode().ordinal();
Dialogs.showSecureDialog(new AlertDialog.Builder(getActivity())
Dialogs.showSecureDialog(new AlertDialog.Builder(requireActivity())
.setTitle(R.string.choose_view_mode)
.setSingleChoiceItems(R.array.view_mode_titles, currentViewMode1, (dialog, which) -> {
int i = ((AlertDialog) dialog).getListView().getCheckedItemPosition();
@ -102,13 +102,13 @@ public class AppearancePreferencesFragment extends PreferencesFragment {
return true;
});
Preference codeDigitGroupingPreference = findPreference("pref_code_group_size");
Preference codeDigitGroupingPreference = requirePreference("pref_code_group_size");
codeDigitGroupingPreference.setOnPreferenceChangeListener((preference, newValue) -> {
getResult().putExtra("needsRefresh", true);
return true;
});
Preference issuerPreference = findPreference("pref_account_name");
Preference issuerPreference = requirePreference("pref_account_name");
issuerPreference.setOnPreferenceChangeListener((preference, newValue) -> {
getResult().putExtra("needsRefresh", true);
return true;

View file

@ -32,7 +32,7 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
super.onCreatePreferences(savedInstanceState, rootKey);
addPreferencesFromResource(R.xml.preferences_backups);
_backupsPreference = findPreference("pref_backups");
_backupsPreference = requirePreference("pref_backups");
_backupsPreference.setOnPreferenceChangeListener((preference, newValue) -> {
if ((boolean) newValue) {
selectBackupsLocation();
@ -44,7 +44,7 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
return false;
});
_androidBackupsPreference = findPreference("pref_android_backups");
_androidBackupsPreference = requirePreference("pref_android_backups");
_androidBackupsPreference.setOnPreferenceChangeListener((preference, newValue) -> {
_prefs.setIsAndroidBackupsEnabled((boolean) newValue);
updateBackupPreference();
@ -53,7 +53,7 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
});
Uri backupLocation = _prefs.getBackupsLocation();
_backupsLocationPreference = findPreference("pref_backups_location");
_backupsLocationPreference = requirePreference("pref_backups_location");
if (backupLocation != null) {
_backupsLocationPreference.setSummary(String.format("%s: %s", getString(R.string.pref_backups_location_summary), Uri.decode(backupLocation.toString())));
}
@ -62,7 +62,7 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
return false;
});
_backupsTriggerPreference = findPreference("pref_backups_trigger");
_backupsTriggerPreference = requirePreference("pref_backups_trigger");
_backupsTriggerPreference.setOnPreferenceClickListener(preference -> {
if (_prefs.isBackupsEnabled()) {
scheduleBackup();
@ -70,10 +70,10 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
return true;
});
_backupsVersionsPreference = findPreference("pref_backups_versions");
_backupsVersionsPreference = requirePreference("pref_backups_versions");
_backupsVersionsPreference.setSummary(getResources().getQuantityString(R.plurals.pref_backups_versions_summary, _prefs.getBackupsVersionCount(), _prefs.getBackupsVersionCount()));
_backupsVersionsPreference.setOnPreferenceClickListener(preference -> {
Dialogs.showBackupVersionsPickerDialog(getActivity(), _prefs.getBackupsVersionCount(), number -> {
Dialogs.showBackupVersionsPickerDialog(requireActivity(), _prefs.getBackupsVersionCount(), number -> {
number = number * 5 + 5;
_prefs.setBackupsVersionCount(number);
_backupsVersionsPreference.setSummary(getResources().getQuantityString(R.plurals.pref_backups_versions_summary, _prefs.getBackupsVersionCount(), _prefs.getBackupsVersionCount()));
@ -96,7 +96,7 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
}
int flags = Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
getContext().getContentResolver().takePersistableUriPermission(data.getData(), flags);
requireContext().getContentResolver().takePersistableUriPermission(data.getData(), flags);
_prefs.setBackupsLocation(uri);
_prefs.setIsBackupsEnabled(true);
@ -132,10 +132,10 @@ public class BackupsPreferencesFragment extends PreferencesFragment {
private void scheduleBackup() {
try {
_vaultManager.scheduleBackup();
Toast.makeText(getActivity(), R.string.backup_successful, Toast.LENGTH_LONG).show();
Toast.makeText(requireActivity(), R.string.backup_successful, Toast.LENGTH_LONG).show();
} catch (VaultRepositoryException e) {
e.printStackTrace();
Dialogs.showErrorDialog(getContext(), R.string.backup_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.backup_error, e);
}
}
}

View file

@ -14,20 +14,20 @@ public class BehaviorPreferencesFragment extends PreferencesFragment {
super.onCreatePreferences(savedInstanceState, rootKey);
addPreferencesFromResource(R.xml.preferences_behavior);
Preference copyOnTapPreference = findPreference("pref_copy_on_tap");
Preference copyOnTapPreference = requirePreference("pref_copy_on_tap");
copyOnTapPreference.setOnPreferenceChangeListener((preference, newValue) -> {
getResult().putExtra("needsRefresh", true);
return true;
});
Preference entryHighlightPreference = findPreference("pref_highlight_entry");
Preference entryHighlightPreference = requirePreference("pref_highlight_entry");
entryHighlightPreference.setOnPreferenceChangeListener((preference, newValue) -> {
getResult().putExtra("needsRefresh", true);
_entryPausePreference.setEnabled(_prefs.isTapToRevealEnabled() || (boolean) newValue);
return true;
});
_entryPausePreference = findPreference("pref_pause_entry");
_entryPausePreference = requirePreference("pref_pause_entry");
_entryPausePreference.setOnPreferenceChangeListener((preference, newValue) -> {
getResult().putExtra("needsRefresh", true);
return true;

View file

@ -62,7 +62,7 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte
_iconPacksView = view.findViewById(R.id.view_icon_packs);
_adapter = new IconPackAdapter(this);
_iconPacksRecyclerView = view.findViewById(R.id.list_icon_packs);
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
LinearLayoutManager layoutManager = new LinearLayoutManager(requireContext());
_iconPacksRecyclerView.setLayoutManager(layoutManager);
_iconPacksRecyclerView.setAdapter(_adapter);
_iconPacksRecyclerView.setNestedScrollingEnabled(false);
@ -83,7 +83,7 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte
@Override
public void onRemoveIconPack(IconPack pack) {
Dialogs.showSecureDialog(new AlertDialog.Builder(getContext())
Dialogs.showSecureDialog(new AlertDialog.Builder(requireContext())
.setTitle(R.string.remove_icon_pack)
.setMessage(R.string.remove_icon_pack_description)
.setPositiveButton(android.R.string.yes, (dialog, whichButton) -> {
@ -91,7 +91,7 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte
_iconPackManager.removeIconPack(pack);
} catch (IconPackException e) {
e.printStackTrace();
Dialogs.showErrorDialog(getContext(), R.string.icon_pack_delete_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.icon_pack_delete_error, e);
return;
}
_adapter.removeIconPack(pack);
@ -111,10 +111,10 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte
}
private void importIconPack(Uri uri) {
ImportIconPackTask task = new ImportIconPackTask(getContext(), result -> {
ImportIconPackTask task = new ImportIconPackTask(requireContext(), result -> {
Exception e = result.getException();
if (e instanceof IconPackExistsException) {
Dialogs.showSecureDialog(new AlertDialog.Builder(getContext())
Dialogs.showSecureDialog(new AlertDialog.Builder(requireContext())
.setTitle(R.string.error_occurred)
.setMessage(R.string.icon_pack_import_exists_error)
.setPositiveButton(R.string.yes, (dialog, which) -> {
@ -125,7 +125,7 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte
.setNegativeButton(R.string.no, null)
.create());
} else if (e != null) {
Dialogs.showErrorDialog(getContext(), R.string.icon_pack_import_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.icon_pack_import_error, e);
} else {
_adapter.addIconPack(result.getIconPack());
updateEmptyState();
@ -139,7 +139,7 @@ public class IconPacksManagerFragment extends Fragment implements IconPackAdapte
_iconPackManager.removeIconPack(pack);
} catch (IconPackException e) {
e.printStackTrace();
Dialogs.showErrorDialog(getContext(), R.string.icon_pack_delete_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.icon_pack_delete_error, e);
return false;
}

View file

@ -53,9 +53,9 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
_importerType = (Class<? extends DatabaseImporter>) savedInstanceState.getSerializable("importerType");
}
Preference importPreference = findPreference("pref_import");
Preference importPreference = requirePreference("pref_import");
importPreference.setOnPreferenceClickListener(preference -> {
Dialogs.showImportersDialog(getContext(), false, definition -> {
Dialogs.showImportersDialog(requireContext(), false, definition -> {
_importerType = definition.getType();
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
@ -65,15 +65,15 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
return true;
});
Preference importAppPreference = findPreference("pref_import_app");
Preference importAppPreference = requirePreference("pref_import_app");
importAppPreference.setOnPreferenceClickListener(preference -> {
Dialogs.showImportersDialog(getContext(), true, definition -> {
Dialogs.showImportersDialog(requireContext(), true, definition -> {
startImportEntriesActivity(definition.getType(), null);
});
return true;
});
Preference exportPreference = findPreference("pref_export");
Preference exportPreference = requirePreference("pref_export");
exportPreference.setOnPreferenceClickListener(preference -> {
startExport();
return true;
@ -113,30 +113,30 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
}
ImportFileTask.Params params = new ImportFileTask.Params(uri, "import", null);
ImportFileTask task = new ImportFileTask(getContext(), result -> {
ImportFileTask task = new ImportFileTask(requireContext(), result -> {
if (result.getException() == null) {
startImportEntriesActivity(_importerType, result.getFile());
} else {
Dialogs.showErrorDialog(getContext(), R.string.reading_file_error, result.getException());
Dialogs.showErrorDialog(requireContext(), R.string.reading_file_error, result.getException());
}
});
task.execute(getLifecycle(), params);
}
private void startImportEntriesActivity(Class<? extends DatabaseImporter> importerType, File file) {
Intent intent = new Intent(getActivity(), ImportEntriesActivity.class);
Intent intent = new Intent(requireActivity(), ImportEntriesActivity.class);
intent.putExtra("importerType", importerType);
intent.putExtra("file", file);
startActivityForResult(intent, CODE_IMPORT);
}
private void startExport() {
View view = LayoutInflater.from(getContext()).inflate(R.layout.dialog_export, null);
View view = LayoutInflater.from(requireContext()).inflate(R.layout.dialog_export, null);
TextView warningText = view.findViewById(R.id.text_export_warning);
CheckBox checkBoxEncrypt = view.findViewById(R.id.checkbox_export_encrypt);
CheckBox checkBoxAccept = view.findViewById(R.id.checkbox_accept);
AutoCompleteTextView dropdown = view.findViewById(R.id.dropdown_export_format);
DropdownHelper.fillDropdown(getContext(), dropdown, R.array.export_formats);
DropdownHelper.fillDropdown(requireContext(), dropdown, R.array.export_formats);
dropdown.setText(getString(R.string.export_format_aegis), false);
dropdown.setOnItemClickListener((parent, view1, position, id) -> {
checkBoxEncrypt.setChecked(position == 0);
@ -144,7 +144,7 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
warningText.setVisibility(checkBoxEncrypt.isChecked() ? View.GONE : View.VISIBLE);
});
AlertDialog dialog = new AlertDialog.Builder(getContext())
AlertDialog dialog = new AlertDialog.Builder(requireContext())
.setTitle(R.string.pref_export_summary)
.setView(view)
.setNeutralButton(R.string.share, null)
@ -200,7 +200,7 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
file = File.createTempFile(fileInfo.getFilename() + "-", "." + fileInfo.getExtension(), getExportCacheDir());
} catch (IOException e) {
e.printStackTrace();
Dialogs.showErrorDialog(getContext(), R.string.exporting_vault_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.exporting_vault_error, e);
return;
}
@ -210,14 +210,14 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
cb.exportVault(stream);
} catch (IOException | VaultRepositoryException e) {
e.printStackTrace();
Dialogs.showErrorDialog(getContext(), R.string.exporting_vault_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.exporting_vault_error, e);
return;
}
// if the user creates an export, hide the backup reminder
_prefs.setIsBackupReminderNeeded(false);
Uri uri = FileProvider.getUriForFile(getContext(), BuildConfig.FILE_PROVIDER_AUTHORITY, file);
Uri uri = FileProvider.getUriForFile(requireContext(), BuildConfig.FILE_PROVIDER_AUTHORITY, file);
Intent intent = new Intent(Intent.ACTION_SEND)
.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
.setType(getExportMimeType(requestCode))
@ -253,7 +253,7 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
}
private File getExportCacheDir() throws IOException {
File dir = new File(getContext().getCacheDir(), "export");
File dir = new File(requireContext().getCacheDir(), "export");
if (!dir.exists() && !dir.mkdir()) {
throw new IOException(String.format("Unable to create directory %s", dir));
}
@ -267,7 +267,7 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
if (_vaultManager.getVault().isEncryptionEnabled()) {
cb.exportVault(stream -> _vaultManager.getVault().export(stream));
} else {
Dialogs.showSetPasswordDialog(getActivity(), new Dialogs.SlotListener() {
Dialogs.showSetPasswordDialog(requireActivity(), new Dialogs.SlotListener() {
@Override
public void onSlotResult(Slot slot, Cipher cipher) {
VaultFileCredentials creds = new VaultFileCredentials();
@ -313,10 +313,10 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
outStream = new FileOutputStream(file);
cb.exportVault(outStream);
new ExportTask(getContext(), new ExportResultListener()).execute(getLifecycle(), new ExportTask.Params(file, uri));
new ExportTask(requireContext(), new ExportResultListener()).execute(getLifecycle(), new ExportTask.Params(file, uri));
} catch (VaultRepositoryException | IOException e) {
e.printStackTrace();
Dialogs.showErrorDialog(getContext(), R.string.exporting_vault_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.exporting_vault_error, e);
} finally {
try {
if (outStream != null) {
@ -344,12 +344,12 @@ public class ImportExportPreferencesFragment extends PreferencesFragment {
public void onTaskFinished(Exception e) {
if (e != null) {
e.printStackTrace();
Dialogs.showErrorDialog(getContext(), R.string.exporting_vault_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.exporting_vault_error, e);
} else {
// if the user creates an export, hide the backup reminder
_prefs.setIsBackupReminderNeeded(false);
Toast.makeText(getContext(), getString(R.string.exported_vault), Toast.LENGTH_SHORT).show();
Toast.makeText(requireContext(), getString(R.string.exported_vault), Toast.LENGTH_SHORT).show();
}
}
}

View file

@ -5,6 +5,8 @@ import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.CallSuper;
import androidx.annotation.NonNull;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import com.beemdevelopment.aegis.Preferences;
@ -21,7 +23,6 @@ import dagger.hilt.android.AndroidEntryPoint;
public abstract class PreferencesFragment extends PreferenceFragmentCompat {
// activity request codes
public static final int CODE_IMPORT_SELECT = 0;
public static final int CODE_SLOTS = 2;
public static final int CODE_GROUPS = 3;
public static final int CODE_IMPORT = 4;
public static final int CODE_EXPORT = 5;
@ -48,7 +49,7 @@ public abstract class PreferencesFragment extends PreferenceFragmentCompat {
public void onResume() {
super.onResume();
Intent intent = getActivity().getIntent();
Intent intent = requireActivity().getIntent();
String preference = intent.getStringExtra("pref");
if (preference != null) {
scrollToPreference(preference);
@ -62,7 +63,7 @@ public abstract class PreferencesFragment extends PreferenceFragmentCompat {
public void setResult(Intent result) {
_result = result;
getActivity().setResult(Activity.RESULT_OK, _result);
requireActivity().setResult(Activity.RESULT_OK, _result);
}
protected boolean saveAndBackupVault() {
@ -70,10 +71,20 @@ public abstract class PreferencesFragment extends PreferenceFragmentCompat {
_vaultManager.saveAndBackup();
} catch (VaultRepositoryException e) {
e.printStackTrace();
Dialogs.showErrorDialog(getContext(), R.string.saving_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.saving_error, e);
return false;
}
return true;
}
@NonNull
protected <T extends Preference> T requirePreference(@NonNull CharSequence key) {
T pref = findPreference(key);
if (pref == null) {
throw new IllegalStateException(String.format("Preference %s not found", key));
}
return pref;
}
}

View file

@ -55,16 +55,16 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
super.onCreatePreferences(savedInstanceState, rootKey);
addPreferencesFromResource(R.xml.preferences_security);
Preference tapToRevealPreference = findPreference("pref_tap_to_reveal");
Preference tapToRevealPreference = requirePreference("pref_tap_to_reveal");
tapToRevealPreference.setOnPreferenceChangeListener((preference, newValue) -> {
getResult().putExtra("needsRefresh", true);
return true;
});
Preference screenPreference = findPreference("pref_secure_screen");
Preference screenPreference = requirePreference("pref_secure_screen");
screenPreference.setOnPreferenceChangeListener((preference, newValue) -> {
getResult().putExtra("needsRecreate", true);
Window window = getActivity().getWindow();
Window window = requireActivity().getWindow();
if ((boolean) newValue) {
window.addFlags(WindowManager.LayoutParams.FLAG_SECURE);
} else {
@ -73,10 +73,10 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
return true;
});
Preference tapToRevealTimePreference = findPreference("pref_tap_to_reveal_time");
Preference tapToRevealTimePreference = requirePreference("pref_tap_to_reveal_time");
tapToRevealTimePreference.setSummary(_prefs.getTapToRevealTime() + " seconds");
tapToRevealTimePreference.setOnPreferenceClickListener(preference -> {
Dialogs.showTapToRevealTimeoutPickerDialog(getActivity(), _prefs.getTapToRevealTime(), number -> {
Dialogs.showTapToRevealTimeoutPickerDialog(requireActivity(), _prefs.getTapToRevealTime(), number -> {
_prefs.setTapToRevealTime(number);
tapToRevealTimePreference.setSummary(number + " seconds");
getResult().putExtra("needsRefresh", true);
@ -84,12 +84,12 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
return false;
});
_encryptionPreference = findPreference("pref_encryption");
_encryptionPreference = requirePreference("pref_encryption");
_encryptionPreference.setOnPreferenceChangeListener((preference, newValue) -> {
if (!_vaultManager.getVault().isEncryptionEnabled()) {
Dialogs.showSetPasswordDialog(getActivity(), new EnableEncryptionListener());
Dialogs.showSetPasswordDialog(requireActivity(), new EnableEncryptionListener());
} else {
Dialogs.showSecureDialog(new AlertDialog.Builder(getActivity())
Dialogs.showSecureDialog(new AlertDialog.Builder(requireContext())
.setTitle(R.string.disable_encryption)
.setMessage(getText(R.string.disable_encryption_description))
.setPositiveButton(android.R.string.yes, (dialog, which) -> {
@ -97,7 +97,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
_vaultManager.disableEncryption();
} catch (VaultRepositoryException e) {
e.printStackTrace();
Dialogs.showErrorDialog(getContext(), R.string.disable_encryption_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.disable_encryption_error, e);
return;
}
@ -112,13 +112,13 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
return false;
});
_biometricsPreference = findPreference("pref_biometrics");
_biometricsPreference = requirePreference("pref_biometrics");
_biometricsPreference.setOnPreferenceChangeListener((preference, newValue) -> {
VaultFileCredentials creds = _vaultManager.getVault().getCredentials();
SlotList slots = creds.getSlots();
if (!slots.has(BiometricSlot.class)) {
if (BiometricsHelper.isAvailable(getContext())) {
if (BiometricsHelper.isAvailable(requireContext())) {
BiometricSlotInitializer initializer = new BiometricSlotInitializer(SecurityPreferencesFragment.this, new RegisterBiometricsListener());
BiometricPrompt.PromptInfo info = new BiometricPrompt.PromptInfo.Builder()
.setTitle(getString(R.string.set_up_biometric))
@ -147,27 +147,27 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
return false;
});
_setPasswordPreference = findPreference("pref_password");
_setPasswordPreference = requirePreference("pref_password");
_setPasswordPreference.setOnPreferenceClickListener(preference -> {
Dialogs.showSetPasswordDialog(getActivity(), new SetPasswordListener());
Dialogs.showSetPasswordDialog(requireActivity(), new SetPasswordListener());
return false;
});
_pinKeyboardPreference = findPreference("pref_pin_keyboard");
_pinKeyboardPreference = requirePreference("pref_pin_keyboard");
_pinKeyboardPreference.setOnPreferenceChangeListener((preference, newValue) -> {
if (!(boolean) newValue) {
return true;
}
Dialogs.showPasswordInputDialog(getActivity(), R.string.set_password_confirm, R.string.pin_keyboard_description, password -> {
Dialogs.showPasswordInputDialog(requireContext(), R.string.set_password_confirm, R.string.pin_keyboard_description, password -> {
if (isDigitsOnly(new String(password))) {
List<PasswordSlot> slots = _vaultManager.getVault().getCredentials().getSlots().findAll(PasswordSlot.class);
PasswordSlotDecryptTask.Params params = new PasswordSlotDecryptTask.Params(slots, password);
PasswordSlotDecryptTask task = new PasswordSlotDecryptTask(getActivity(), new PasswordConfirmationListener());
PasswordSlotDecryptTask task = new PasswordSlotDecryptTask(requireContext(), new PasswordConfirmationListener());
task.execute(getLifecycle(), params);
} else {
_pinKeyboardPreference.setChecked(false);
Dialogs.showSecureDialog(new AlertDialog.Builder(getActivity())
Dialogs.showSecureDialog(new AlertDialog.Builder(requireContext())
.setTitle(R.string.pin_keyboard_error)
.setMessage(R.string.pin_keyboard_error_description)
.setCancelable(false)
@ -180,7 +180,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
return false;
});
_autoLockPreference = findPreference("pref_auto_lock");
_autoLockPreference = requirePreference("pref_auto_lock");
_autoLockPreference.setSummary(getAutoLockSummary());
_autoLockPreference.setOnPreferenceClickListener((preference) -> {
final int[] items = Preferences.AUTO_LOCK_SETTINGS;
@ -190,7 +190,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
checkedItems[i] = _prefs.isAutoLockTypeEnabled(items[i]);
}
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext())
.setTitle(R.string.pref_auto_lock_prompt)
.setMultiChoiceItems(textItems, checkedItems, (dialog, index, isChecked) -> checkedItems[index] = isChecked)
.setPositiveButton(android.R.string.ok, (dialog, which) -> {
@ -210,7 +210,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
return false;
});
_passwordReminderPreference = findPreference("pref_password_reminder_freq");
_passwordReminderPreference = requirePreference("pref_password_reminder_freq");
_passwordReminderPreference.setSummary(getPasswordReminderSummary());
_passwordReminderPreference.setOnPreferenceClickListener((preference) -> {
final PassReminderFreq currFreq = _prefs.getPasswordReminderFrequency();
@ -219,7 +219,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
.map(f -> getString(f.getStringRes()))
.toArray(String[]::new);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext())
.setTitle(R.string.pref_password_reminder_title)
.setSingleChoiceItems(textItems, currFreq.ordinal(), (dialog, which) -> {
int i = ((AlertDialog) dialog).getListView().getCheckedItemPosition();
@ -246,7 +246,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
SlotList slots = _vaultManager.getVault().getCredentials().getSlots();
boolean multiPassword = slots.findAll(PasswordSlot.class).size() > 1;
boolean multiBio = slots.findAll(BiometricSlot.class).size() > 1;
boolean canUseBio = BiometricsHelper.isAvailable(getContext());
boolean canUseBio = BiometricsHelper.isAvailable(requireContext());
_setPasswordPreference.setEnabled(!multiPassword);
_biometricsPreference.setEnabled(canUseBio && !multiBio);
_biometricsPreference.setChecked(slots.has(BiometricSlot.class), true);
@ -319,7 +319,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
if (_prefs.isPinKeyboardEnabled()) {
_pinKeyboardPreference.setChecked(false);
Toast.makeText(getContext(), R.string.pin_keyboard_disabled, Toast.LENGTH_SHORT).show();
Toast.makeText(requireContext(), R.string.pin_keyboard_disabled, Toast.LENGTH_SHORT).show();
}
}
@ -327,7 +327,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
public void onException(Exception e) {
e.printStackTrace();
updateEncryptionPreferences();
Dialogs.showErrorDialog(getContext(), R.string.encryption_set_password_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.encryption_set_password_error, e);
}
}
@ -352,7 +352,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
@Override
public void onSlotInitializationFailed(int errorCode, @NonNull CharSequence errString) {
if (!BiometricsHelper.isCanceled(errorCode)) {
Dialogs.showErrorDialog(getContext(), R.string.encryption_enable_biometrics_error, errString);
Dialogs.showErrorDialog(requireContext(), R.string.encryption_enable_biometrics_error, errString);
}
}
}
@ -378,7 +378,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
@Override
public void onException(Exception e) {
e.printStackTrace();
Dialogs.showErrorDialog(getContext(), R.string.encryption_set_password_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.encryption_set_password_error, e);
}
}
@ -388,7 +388,7 @@ public class SecurityPreferencesFragment extends PreferencesFragment {
if (result != null) {
_pinKeyboardPreference.setChecked(true);
} else {
Dialogs.showSecureDialog(new AlertDialog.Builder(getActivity())
Dialogs.showSecureDialog(new AlertDialog.Builder(requireActivity())
.setTitle(R.string.pin_keyboard_error)
.setMessage(R.string.invalid_password)
.setCancelable(false)

View file

@ -46,7 +46,7 @@ public class SecurityPickerSlide extends SlideFragment {
* if the API version is new enough, permission is granted and a scanner is found.
*/
private void updateBiometricsOption(boolean autoSelect) {
boolean canUseBio = BiometricsHelper.isAvailable(getContext());
boolean canUseBio = BiometricsHelper.isAvailable(requireContext());
_bioButton.setEnabled(canUseBio);
_bioText.setEnabled(canUseBio);
@ -66,7 +66,7 @@ public class SecurityPickerSlide extends SlideFragment {
@Override
public void onNotFinishedError() {
Toast.makeText(getContext(), R.string.snackbar_authentication_method, Toast.LENGTH_SHORT).show();
Toast.makeText(requireContext(), R.string.snackbar_authentication_method, Toast.LENGTH_SHORT).show();
}
@Override

View file

@ -84,7 +84,7 @@ public class SecuritySetupSlide extends SlideFragment {
Strength strength = _zxcvbn.measure(_textPassword.getText());
_barPasswordStrength.setProgress(strength.getScore());
_barPasswordStrength.setProgressTintList(ColorStateList.valueOf(Color.parseColor(PasswordStrengthHelper.getColor(strength.getScore()))));
_textPasswordStrength.setText((_textPassword.getText().length() != 0) ? PasswordStrengthHelper.getString(strength.getScore(), getContext()) : "");
_textPasswordStrength.setText((_textPassword.getText().length() != 0) ? PasswordStrengthHelper.getString(strength.getScore(), requireContext()) : "");
_textPasswordWrapper.setError(strength.getFeedback().getWarning());
strength.wipe();
}
@ -125,7 +125,7 @@ public class SecuritySetupSlide extends SlideFragment {
private void deriveKey() {
PasswordSlot slot = new PasswordSlot();
KeyDerivationTask.Params params = new KeyDerivationTask.Params(slot, EditTextHelper.getEditTextChars(_textPassword));
KeyDerivationTask task = new KeyDerivationTask(getContext(), new PasswordDerivationListener());
KeyDerivationTask task = new KeyDerivationTask(requireContext(), new PasswordDerivationListener());
task.execute(getLifecycle(), params);
}
@ -153,7 +153,7 @@ public class SecuritySetupSlide extends SlideFragment {
@Override
public void onNotFinishedError() {
if (!EditTextHelper.areEditTextsEqual(_textPassword, _textPasswordConfirm)) {
Toast.makeText(getContext(), R.string.password_equality_error, Toast.LENGTH_SHORT).show();
Toast.makeText(requireContext(), R.string.password_equality_error, Toast.LENGTH_SHORT).show();
} else if (_cryptType != SecurityPickerSlide.CRYPT_TYPE_BIOMETRIC) {
deriveKey();
} else if (!_creds.getSlots().has(BiometricSlot.class)) {
@ -175,7 +175,7 @@ public class SecuritySetupSlide extends SlideFragment {
_creds.getSlots().add(slot);
} catch (SlotException e) {
e.printStackTrace();
Dialogs.showErrorDialog(getContext(), R.string.enable_encryption_error, e);
Dialogs.showErrorDialog(requireContext(), R.string.enable_encryption_error, e);
return;
}
@ -201,7 +201,7 @@ public class SecuritySetupSlide extends SlideFragment {
@Override
public void onSlotInitializationFailed(int errorCode, @NonNull CharSequence errString) {
if (!BiometricsHelper.isCanceled(errorCode)) {
Dialogs.showErrorDialog(getContext(), R.string.encryption_enable_biometrics_error, errString);
Dialogs.showErrorDialog(requireContext(), R.string.encryption_enable_biometrics_error, errString);
}
}
}

View file

@ -107,7 +107,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
RecyclerViewPreloader<VaultEntry> preloader = new RecyclerViewPreloader<>(Glide.with(this), modelProvider, _preloadSizeProvider, 10);
_recyclerView.addOnScrollListener(preloader);
LinearLayoutManager layoutManager = new LinearLayoutManager(view.getContext());
LinearLayoutManager layoutManager = new LinearLayoutManager(requireContext());
_recyclerView.setLayoutManager(layoutManager);
_touchCallback = new SimpleItemTouchHelperCallback(_adapter);
_touchHelper = new ItemTouchHelper(_touchCallback);
@ -115,7 +115,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
_recyclerView.setAdapter(_adapter);
int resId = R.anim.layout_animation_fall_down;
LayoutAnimationController animation = AnimationUtils.loadLayoutAnimation(getContext(), resId);
LayoutAnimationController animation = AnimationUtils.loadLayoutAnimation(requireContext(), resId);
_recyclerView.setLayoutAnimation(animation);
_refresher = new UiRefresher(new UiRefresher.Listener() {
@ -376,9 +376,8 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
}
public void runEntriesAnimation() {
final Context context = _recyclerView.getContext();
final LayoutAnimationController controller =
AnimationUtils.loadLayoutAnimation(context, R.anim.layout_animation_fall_down);
AnimationUtils.loadLayoutAnimation(requireContext(), R.anim.layout_animation_fall_down);
_recyclerView.setLayoutAnimation(controller);
_recyclerView.scheduleLayoutAnimation();
@ -386,7 +385,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
private void initializeGroupChip() {
View view = getLayoutInflater().inflate(R.layout.dialog_select_groups, null);
BottomSheetDialog dialog = new BottomSheetDialog(getContext());
BottomSheetDialog dialog = new BottomSheetDialog(requireContext());
dialog.setContentView(view);
ChipGroup chipGroup = view.findViewById(R.id.groupChipGroup);
@ -479,8 +478,8 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
float height = _viewMode.getDividerHeight();
if (_showProgress && height == 0) {
DividerItemDecoration divider = new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL);
divider.setDrawable(ContextCompat.getDrawable(getContext(), R.drawable.entry_divider));
DividerItemDecoration divider = new DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL);
divider.setDrawable(ContextCompat.getDrawable(requireContext(), R.drawable.entry_divider));
_dividerDecoration = divider;
} else {
_dividerDecoration = new VerticalSpaceItemDecoration(height);
@ -518,7 +517,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
private VerticalSpaceItemDecoration(float dp) {
// convert dp to pixels
_height = MetricsHelper.convertDpToPixels(getContext(), dp);
_height = MetricsHelper.convertDpToPixels(requireContext(), dp);
}
@Override

View file

@ -316,7 +316,7 @@ public class VaultManager {
e.printStackTrace();
if (isDocsAction(intent.getAction())) {
Dialogs.showErrorDialog(fragment.getContext(), R.string.documentsui_error, e);
Dialogs.showErrorDialog(fragment.requireContext(), R.string.documentsui_error, e);
} else {
throw e;
}