diff --git a/app/src/main/java/es/wolfi/app/passman/activities/LoginActivity.java b/app/src/main/java/es/wolfi/app/passman/activities/LoginActivity.java index fa78add2..c6f3ceb0 100644 --- a/app/src/main/java/es/wolfi/app/passman/activities/LoginActivity.java +++ b/app/src/main/java/es/wolfi/app/passman/activities/LoginActivity.java @@ -42,6 +42,7 @@ import butterknife.OnClick; import es.wolfi.app.passman.R; import es.wolfi.app.passman.SettingValues; +import es.wolfi.app.passman.SettingsCache; import es.wolfi.app.passman.SingleTon; import es.wolfi.passman.API.Core; import es.wolfi.utils.KeyStoreUtils; @@ -69,7 +70,8 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_login); ButterKnife.bind(this); - settings = PreferenceManager.getDefaultSharedPreferences(this); + new SettingsCache().loadSharedPreferences(getBaseContext()); + settings = SettingsCache.getSharedPreferences(); KeyStoreUtils.initialize(settings); ton = SingleTon.getTon(); diff --git a/app/src/main/java/es/wolfi/app/passman/activities/PasswordListActivity.java b/app/src/main/java/es/wolfi/app/passman/activities/PasswordListActivity.java index 9afb0707..892c2fc8 100644 --- a/app/src/main/java/es/wolfi/app/passman/activities/PasswordListActivity.java +++ b/app/src/main/java/es/wolfi/app/passman/activities/PasswordListActivity.java @@ -332,7 +332,10 @@ public void run() { } // Update the vault record to avoid future loads - ((HashMap) ton.getExtra(SettingValues.VAULTS.toString())).put(result.guid, result); + HashMap vaults = (HashMap) ton.getExtra(SettingValues.VAULTS.toString()); + if (vaults != null) { + vaults.put(result.guid, result); + } ton.addExtra(SettingValues.ACTIVE_VAULT.toString(), result); showActiveVault(); @@ -354,7 +357,7 @@ void showUnlockVault() { getSupportFragmentManager() .beginTransaction() .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_out_left, R.anim.slide_out_left) - .replace(R.id.content_password_list, new VaultLockScreenFragment(), "vault") + .replace(R.id.content_password_list, VaultLockScreenFragment.newInstance(v), "vault") .addToBackStack(null) .commit(); } diff --git a/app/src/main/java/es/wolfi/app/passman/fragments/SettingsFragment.java b/app/src/main/java/es/wolfi/app/passman/fragments/SettingsFragment.java index e9e0b09b..29fd1da3 100644 --- a/app/src/main/java/es/wolfi/app/passman/fragments/SettingsFragment.java +++ b/app/src/main/java/es/wolfi/app/passman/fragments/SettingsFragment.java @@ -180,12 +180,13 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { enable_credential_list_icons_switch.setChecked(settings.getBoolean(SettingValues.ENABLE_CREDENTIAL_LIST_ICONS.toString(), true)); enable_offline_cache_switch.setChecked(settings.getBoolean(SettingValues.ENABLE_OFFLINE_CACHE.toString(), true)); - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + Set> vaults = getVaultsEntrySet(); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O && vaults != null) { String last_selected_guid = ""; if (settings.getString(SettingValues.AUTOFILL_VAULT_GUID.toString(), null) != null) { last_selected_guid = settings.getString(SettingValues.AUTOFILL_VAULT_GUID.toString(), null); } - Set> vaults = getVaultsEntrySet(); + String[] vault_names = new String[vaults.size() + 1]; vault_names[0] = getContext().getString(R.string.automatically); int i = 1; @@ -215,7 +216,7 @@ public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { private Set> getVaultsEntrySet() { HashMap vaults = (HashMap) SingleTon.getTon().getExtra(SettingValues.VAULTS.toString()); - return vaults.entrySet(); + return vaults != null ? vaults.entrySet() : null; } @Override @@ -265,22 +266,24 @@ public void onClick(View view) { settings.edit().putString(SettingValues.AUTOFILL_VAULT_GUID.toString(), "").commit(); } else { Set> vaults = getVaultsEntrySet(); - for (Map.Entry vault_entry : vaults) { - if (vault_entry.getValue().name.equals(default_autofill_vault.getSelectedItem().toString())) { - ton.addExtra(SettingValues.AUTOFILL_VAULT_GUID.toString(), vault_entry.getValue().guid); - settings.edit().putString(SettingValues.AUTOFILL_VAULT_GUID.toString(), vault_entry.getValue().guid).commit(); - - Vault.getVault(getContext(), vault_entry.getValue().guid, new FutureCallback() { - @Override - public void onCompleted(Exception e, Vault result) { - if (e != null) { - return; + if (vaults != null) { + for (Map.Entry vault_entry : vaults) { + if (vault_entry.getValue().name.equals(default_autofill_vault.getSelectedItem().toString())) { + ton.addExtra(SettingValues.AUTOFILL_VAULT_GUID.toString(), vault_entry.getValue().guid); + settings.edit().putString(SettingValues.AUTOFILL_VAULT_GUID.toString(), vault_entry.getValue().guid).commit(); + + Vault.getVault(getContext(), vault_entry.getValue().guid, new FutureCallback() { + @Override + public void onCompleted(Exception e, Vault result) { + if (e != null) { + return; + } + Vault.updateAutofillVault(result, settings); } - Vault.updateAutofillVault(result, settings); - } - }); + }); - break; + break; + } } } } diff --git a/app/src/main/java/es/wolfi/app/passman/fragments/VaultFragment.java b/app/src/main/java/es/wolfi/app/passman/fragments/VaultFragment.java index ce4e54c7..922c076e 100644 --- a/app/src/main/java/es/wolfi/app/passman/fragments/VaultFragment.java +++ b/app/src/main/java/es/wolfi/app/passman/fragments/VaultFragment.java @@ -97,7 +97,10 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, } HashMap vaults = (HashMap) SingleTon.getTon().getExtra(SettingValues.VAULTS.toString()); - ArrayList l = new ArrayList(vaults.values()); + ArrayList l = new ArrayList(); + if (vaults != null) { + l = new ArrayList(vaults.values()); + } recyclerView.setAdapter(new VaultViewAdapter(l, mListener, getParentFragmentManager())); view.findViewById(R.id.add_vault_button).setOnClickListener(new View.OnClickListener() { diff --git a/app/src/main/java/es/wolfi/app/passman/fragments/VaultLockScreenFragment.java b/app/src/main/java/es/wolfi/app/passman/fragments/VaultLockScreenFragment.java index 8a4a6129..bb157e92 100644 --- a/app/src/main/java/es/wolfi/app/passman/fragments/VaultLockScreenFragment.java +++ b/app/src/main/java/es/wolfi/app/passman/fragments/VaultLockScreenFragment.java @@ -111,7 +111,6 @@ public void onAttach(Context context) { public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); ButterKnife.bind(this, view); - vault = (Vault) SingleTon.getTon().getExtra(SettingValues.ACTIVE_VAULT.toString()); Log.e("VaultLockScreenFragment", "Vault guid: ".concat(vault.guid)); vault_name.setText(vault.name); } diff --git a/app/src/main/java/es/wolfi/passman/API/Core.java b/app/src/main/java/es/wolfi/passman/API/Core.java index 30b9321f..5acf020b 100644 --- a/app/src/main/java/es/wolfi/passman/API/Core.java +++ b/app/src/main/java/es/wolfi/passman/API/Core.java @@ -111,7 +111,12 @@ public static void requestInternalAPIGET(Context c, String endpoint, final Futur client.setResponseTimeout(getResponseTimeout(c)); client.setMaxRetriesAndTimeout(getConnectRetries(c), getConnectTimeout(c)); client.addHeader("Content-Type", JSON_CONTENT_TYPE); - client.get(host_internal.concat(endpoint), responseHandler); + + try { + client.get(host_internal.concat(endpoint), responseHandler); + } catch (Exception e) { + responseHandler.onFailure(0, null, null, e); + } } public static void requestAPIGET(Context c, String endpoint, final FutureCallback callback) { @@ -122,7 +127,12 @@ public static void requestAPIGET(Context c, String endpoint, final FutureCallbac client.setResponseTimeout(getResponseTimeout(c)); client.setMaxRetriesAndTimeout(getConnectRetries(c), getConnectTimeout(c)); client.addHeader("Content-Type", JSON_CONTENT_TYPE); - client.get(host.concat(endpoint), responseHandler); + + try { + client.get(host.concat(endpoint), responseHandler); + } catch (Exception e) { + responseHandler.onFailure(0, null, null, e); + } } public static void requestAPI(Context c, String endpoint, JSONObject jsonPostData, String requestType, final AsyncHttpResponseHandler responseHandler) @@ -139,12 +149,16 @@ public static void requestAPI(Context c, String endpoint, JSONObject jsonPostDat StringEntity entity = new StringEntity(jsonPostData.toString()); - if (requestType.equals("POST")) { - client.post(c, url.toString(), entity, JSON_CONTENT_TYPE, responseHandler); - } else if (requestType.equals("PATCH")) { - client.patch(c, url.toString(), entity, JSON_CONTENT_TYPE, responseHandler); - } else if (requestType.equals("DELETE")) { - client.delete(c, url.toString(), entity, JSON_CONTENT_TYPE, responseHandler); + try { + if (requestType.equals("POST")) { + client.post(c, url.toString(), entity, JSON_CONTENT_TYPE, responseHandler); + } else if (requestType.equals("PATCH")) { + client.patch(c, url.toString(), entity, JSON_CONTENT_TYPE, responseHandler); + } else if (requestType.equals("DELETE")) { + client.delete(c, url.toString(), entity, JSON_CONTENT_TYPE, responseHandler); + } + } catch (Exception e) { + responseHandler.onFailure(0, null, null, e); } }