diff --git a/app/src/main/java/lu/circl/mispbump/activities/HomeActivity.java b/app/src/main/java/lu/circl/mispbump/activities/HomeActivity.java index e7d63d0..cee3802 100644 --- a/app/src/main/java/lu/circl/mispbump/activities/HomeActivity.java +++ b/app/src/main/java/lu/circl/mispbump/activities/HomeActivity.java @@ -38,16 +38,16 @@ import lu.circl.mispbump.models.restModels.User; public class HomeActivity extends AppCompatActivity { - private List syncInformationList; private PreferenceManager preferenceManager; private MispRestClient restClient; + private SwipeRefreshLayout swipeRefreshLayout; + + private List syncInformationList; private RecyclerView recyclerView; private SyncInfoAdapter syncInfoAdapter; private TextView emptyRecyclerView; - private SwipeRefreshLayout swipeRefreshLayout; - @Override protected void onCreate(Bundle savedInstanceState) { @@ -102,7 +102,7 @@ public class HomeActivity extends AppCompatActivity { swipeRefreshLayout = findViewById(R.id.swipeRefresh); swipeRefreshLayout.setOnRefreshListener(() -> { - checkUnimportedSyncs(); + onSwipeRefresh(); syncInfoAdapter.setItems(syncInformationList); }); @@ -174,7 +174,12 @@ public class HomeActivity extends AppCompatActivity { } } - private void checkUnimportedSyncs() { + private void onSwipeRefresh() { + if (preferenceManager.getShowLocalSyncsOnly()) { + swipeRefreshLayout.setRefreshing(false); + return; + } + restClient.getAllServers(new MispRestClient.AllRawServersCallback() { @Override public void success(List mispServers) { diff --git a/app/src/main/java/lu/circl/mispbump/activities/PreferenceActivity.java b/app/src/main/java/lu/circl/mispbump/activities/PreferenceActivity.java index c55439b..86aa0ae 100644 --- a/app/src/main/java/lu/circl/mispbump/activities/PreferenceActivity.java +++ b/app/src/main/java/lu/circl/mispbump/activities/PreferenceActivity.java @@ -1,15 +1,19 @@ package lu.circl.mispbump.activities; +import android.content.Context; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; import androidx.preference.Preference; +import androidx.preference.PreferenceCategory; import androidx.preference.PreferenceFragmentCompat; +import androidx.preference.PreferenceScreen; +import androidx.preference.SwitchPreference; import lu.circl.mispbump.R; import lu.circl.mispbump.auxiliary.PreferenceManager; @@ -17,19 +21,11 @@ import lu.circl.mispbump.auxiliary.PreferenceManager; public class PreferenceActivity extends AppCompatActivity { - private PreferenceManager preferenceManager; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_preference); - preferenceManager = PreferenceManager.getInstance(PreferenceActivity.this); - - initializeViews(); - } - - private void initializeViews() { Toolbar myToolbar = findViewById(R.id.toolbar); setSupportActionBar(myToolbar); @@ -37,29 +33,66 @@ public class PreferenceActivity extends AppCompatActivity { assert ab != null; ab.setDisplayHomeAsUpEnabled(true); - FragmentManager fragmentManager = getSupportFragmentManager(); - FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); - PreferencesFragment preferencesFragment = new PreferencesFragment(); -// preferencesFragment.onDeleteAllSyncsListener = preference -> { -// preferenceManager.clearUploadInformation(); -// return true; -// }; - - fragmentTransaction.add(R.id.fragmentContainer, preferencesFragment, PreferencesFragment.class.getSimpleName()); - fragmentTransaction.commit(); + getSupportFragmentManager() + .beginTransaction() + .add(R.id.fragmentContainer, new PreferencesFragment(PreferenceActivity.this)) + .commit(); } public static class PreferencesFragment extends PreferenceFragmentCompat { - private Preference.OnPreferenceClickListener onDeleteAllSyncsListener; + private Context context; + private PreferenceManager preferenceManager; + + PreferencesFragment(Context context) { + this.context = context; + preferenceManager = PreferenceManager.getInstance(context); + } @Override public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { - setPreferencesFromResource(R.xml.preference_screen_main, rootKey); + PreferenceScreen preferenceScreen = getPreferenceManager().createPreferenceScreen(context); + setPreferenceScreen(preferenceScreen); -// Preference deleteAllSyncInfo = findPreference("PREF_DELETE_ALL_SYNCS"); -// assert deleteAllSyncInfo != null; -// deleteAllSyncInfo.setOnPreferenceClickListener(onDeleteAllSyncsListener); + // General + + PreferenceCategory generalCategory = new PreferenceCategory(context); + generalCategory.setTitle("General"); + getPreferenceScreen().addPreference(generalCategory); + + SwitchPreference fetchOnlyLocalSyncs = new SwitchPreference(context); + fetchOnlyLocalSyncs.setTitle("Display local syncs only"); + fetchOnlyLocalSyncs.setSummaryOn("Only those syncs that were made with MISPbump are displayed."); + fetchOnlyLocalSyncs.setSummaryOff("Existing syncs from your MISP instance are fetched, too."); + fetchOnlyLocalSyncs.setChecked(preferenceManager.getShowLocalSyncsOnly()); + fetchOnlyLocalSyncs.setOnPreferenceChangeListener((preference, newValue) -> { + preferenceManager.setShowLocalSyncsOnly((boolean) newValue); + return true; + }); + + generalCategory.addPreference(fetchOnlyLocalSyncs); + + // App Information + + PreferenceCategory appInfoCategory = new PreferenceCategory(context); + appInfoCategory.setTitle("App Information"); + getPreferenceScreen().addPreference(appInfoCategory); + + Preference githubPreference = new Preference(context); + githubPreference.setIcon(context.getDrawable(R.drawable.ic_github)); + githubPreference.setTitle("Github"); + githubPreference.setSummary("Visit the Github project"); + Intent viewOnGithub = new Intent(Intent.ACTION_VIEW); + viewOnGithub.setData(Uri.parse("https://github.com/MISP/misp-bump")); + githubPreference.setIntent(viewOnGithub); + + Preference versionPreference = new Preference(context); + versionPreference.setIcon(context.getDrawable(R.drawable.ic_info_outline_dark)); + versionPreference.setTitle("Version"); + versionPreference.setSummary("1.0"); + + appInfoCategory.addPreference(githubPreference); + appInfoCategory.addPreference(versionPreference); } } } diff --git a/app/src/main/java/lu/circl/mispbump/auxiliary/PreferenceManager.java b/app/src/main/java/lu/circl/mispbump/auxiliary/PreferenceManager.java index e4622a2..314d45c 100644 --- a/app/src/main/java/lu/circl/mispbump/auxiliary/PreferenceManager.java +++ b/app/src/main/java/lu/circl/mispbump/auxiliary/PreferenceManager.java @@ -37,12 +37,16 @@ public class PreferenceManager { private static final String USER_ORG_INFOS = "user_org_infos"; private static final String SYNC_INFO = "sync_info"; - private static final String MISP_ROLES = "misp_roles"; + private static final String SHOW_MISPBUMP_SYNCS_ONLY = "show_mispbump_syncs_only"; + private SharedPreferences preferences; private static PreferenceManager instance; + private List cachedSyncInformationList; + + private PreferenceManager(Context context) { preferences = context.getSharedPreferences(PREFERENCES_FILE, Context.MODE_PRIVATE); } @@ -146,15 +150,7 @@ public class PreferenceManager { SharedPreferences.Editor editor = preferences.edit(); editor.putString(USER_ORG_INFOS, encrypted); editor.apply(); - } catch (NoSuchPaddingException e) { - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (InvalidKeyException e) { - e.printStackTrace(); - } catch (BadPaddingException e) { - e.printStackTrace(); - } catch (IllegalBlockSizeException e) { + } catch (NoSuchPaddingException | NoSuchAlgorithmException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) { e.printStackTrace(); } @@ -175,17 +171,7 @@ public class PreferenceManager { KeyStoreWrapper keyStoreWrapper = new KeyStoreWrapper(KeyStoreWrapper.USER_ORGANISATION_INFO_ALIAS); String decrypted = keyStoreWrapper.decrypt(preferences.getString(USER_ORG_INFOS, "")); return new Gson().fromJson(decrypted, Organisation.class); - } catch (NoSuchPaddingException e) { - e.printStackTrace(); - } catch (NoSuchAlgorithmException e) { - e.printStackTrace(); - } catch (InvalidAlgorithmParameterException e) { - e.printStackTrace(); - } catch (InvalidKeyException e) { - e.printStackTrace(); - } catch (BadPaddingException e) { - e.printStackTrace(); - } catch (IllegalBlockSizeException e) { + } catch (NoSuchPaddingException | NoSuchAlgorithmException | InvalidAlgorithmParameterException | InvalidKeyException | BadPaddingException | IllegalBlockSizeException e) { e.printStackTrace(); } @@ -223,8 +209,6 @@ public class PreferenceManager { } - private List cachedSyncInformationList; - private void loadSyncInformationList() { KeyStoreWrapper ksw = new KeyStoreWrapper(KeyStoreWrapper.SYNC_INFORMATION_ALIAS); String storedSyncInfoString = preferences.getString(SYNC_INFO, null); @@ -282,6 +266,11 @@ public class PreferenceManager { return null; } + /** + * Add or update a {@link SyncInformation} to local storage + * + * @param syncInformation to be added + */ public void addSyncInformation(SyncInformation syncInformation) { if (cachedSyncInformationList == null) { loadSyncInformationList(); @@ -330,11 +319,20 @@ public class PreferenceManager { } + public boolean getShowLocalSyncsOnly() { + return preferences.getBoolean(SHOW_MISPBUMP_SYNCS_ONLY, true); + } + + public void setShowLocalSyncsOnly(boolean showLocalSyncsOnly) { + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean(SHOW_MISPBUMP_SYNCS_ONLY, showLocalSyncsOnly); + editor.apply(); + } + + public void clearAllData() { SharedPreferences.Editor editor = preferences.edit(); -// clearServerUrl(); -// clearAutomationKey(); clearUploadInformation(); editor.clear(); diff --git a/app/src/main/res/anim/fade_in.xml b/app/src/main/res/anim/fade_in.xml deleted file mode 100644 index c5be8dd..0000000 --- a/app/src/main/res/anim/fade_in.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - diff --git a/app/src/main/res/anim/fade_out.xml b/app/src/main/res/anim/fade_out.xml deleted file mode 100644 index 5b4342c..0000000 --- a/app/src/main/res/anim/fade_out.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - diff --git a/app/src/main/res/anim/push_up_in.xml b/app/src/main/res/anim/push_up_in.xml deleted file mode 100644 index d368e9e..0000000 --- a/app/src/main/res/anim/push_up_in.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/app/src/main/res/anim/push_up_out.xml b/app/src/main/res/anim/push_up_out.xml deleted file mode 100644 index a2e5466..0000000 --- a/app/src/main/res/anim/push_up_out.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/app/src/main/res/anim/scale_vertical.xml b/app/src/main/res/anim/scale_vertical.xml deleted file mode 100644 index 4b4dd5e..0000000 --- a/app/src/main/res/anim/scale_vertical.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/app/src/main/res/anim/slide_in_right.xml b/app/src/main/res/anim/slide_in_right.xml deleted file mode 100644 index 9d616b1..0000000 --- a/app/src/main/res/anim/slide_in_right.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/app/src/main/res/anim/slide_out_left.xml b/app/src/main/res/anim/slide_out_left.xml deleted file mode 100644 index 3199077..0000000 --- a/app/src/main/res/anim/slide_out_left.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - diff --git a/app/src/main/res/animator/slide_in_left.xml b/app/src/main/res/animator/slide_in_left.xml deleted file mode 100644 index 6faf6b9..0000000 --- a/app/src/main/res/animator/slide_in_left.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/app/src/main/res/animator/slide_in_right.xml b/app/src/main/res/animator/slide_in_right.xml deleted file mode 100644 index 1c7568b..0000000 --- a/app/src/main/res/animator/slide_in_right.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/app/src/main/res/animator/slide_out_left.xml b/app/src/main/res/animator/slide_out_left.xml deleted file mode 100644 index 3f8ac73..0000000 --- a/app/src/main/res/animator/slide_out_left.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/app/src/main/res/animator/slide_out_right.xml b/app/src/main/res/animator/slide_out_right.xml deleted file mode 100644 index 7eacf62..0000000 --- a/app/src/main/res/animator/slide_out_right.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/app/src/main/res/layout/material_preference_switch.xml b/app/src/main/res/layout/material_preference_switch.xml index f72b5d7..e23b542 100644 --- a/app/src/main/res/layout/material_preference_switch.xml +++ b/app/src/main/res/layout/material_preference_switch.xml @@ -42,9 +42,7 @@ app:layout_constraintEnd_toStartOf="@id/material_preference_switch" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/material_preference_title" - tools:text="Subtitle" - android:inAnimation="@anim/push_up_in" - android:outAnimation="@anim/push_up_out"/> + tools:text="Subtitle" /> - - - - - - - - - - - - - - - - - -