mirror of https://github.com/MISP/misp-bump
				
				
				
			
							parent
							
								
									e9176e2a5b
								
							
						
					
					
						commit
						1454b6d19c
					
				|  | @ -38,16 +38,16 @@ import lu.circl.mispbump.models.restModels.User; | |||
| 
 | ||||
| public class HomeActivity extends AppCompatActivity { | ||||
| 
 | ||||
|     private List<SyncInformation> syncInformationList; | ||||
|     private PreferenceManager preferenceManager; | ||||
|     private MispRestClient restClient; | ||||
| 
 | ||||
|     private SwipeRefreshLayout swipeRefreshLayout; | ||||
| 
 | ||||
|     private List<SyncInformation> 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<MispServer> mispServers) { | ||||
|  |  | |||
|  | @ -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); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -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<SyncInformation> 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<SyncInformation> 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(); | ||||
|  |  | |||
|  | @ -1,10 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|     <alpha | ||||
|         android:interpolator="@android:anim/accelerate_interpolator" | ||||
|         android:fromAlpha="0.0" | ||||
|         android:toAlpha="1.0" | ||||
|         android:duration="@android:integer/config_shortAnimTime" | ||||
|         /> | ||||
| </set> | ||||
|  | @ -1,10 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|     <alpha | ||||
|         android:interpolator="@android:anim/accelerate_interpolator" | ||||
|         android:fromAlpha="1.0" | ||||
|         android:toAlpha="0.0" | ||||
|         android:duration="@android:integer/config_shortAnimTime" | ||||
|         /> | ||||
| </set> | ||||
|  | @ -1,14 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|     <translate | ||||
|         android:fromYDelta="100%p" | ||||
|         android:toYDelta="0" | ||||
|         android:duration="300" | ||||
|         /> | ||||
|     <alpha | ||||
|         android:fromAlpha="0.0" | ||||
|         android:toAlpha="1.0" | ||||
|         android:duration="300" | ||||
|         /> | ||||
| </set> | ||||
|  | @ -1,14 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|     <translate | ||||
|         android:fromYDelta="0" | ||||
|         android:toYDelta="-100%p" | ||||
|         android:duration="300" | ||||
|         /> | ||||
|     <alpha | ||||
|         android:fromAlpha="1.0" | ||||
|         android:toAlpha="0.0" | ||||
|         android:duration="300" | ||||
|         /> | ||||
| </set> | ||||
|  | @ -1,15 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
| 
 | ||||
|     <scale | ||||
|         android:duration="500" | ||||
|         android:fromXScale="1.0" | ||||
|         android:fromYScale="0.0" | ||||
|         android:pivotX="50%" | ||||
|         android:pivotY="10%" | ||||
|         android:toXScale="1.0" | ||||
|         android:toYScale="1.0" | ||||
|         /> | ||||
| 
 | ||||
| </set> | ||||
|  | @ -1,14 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|     <translate | ||||
|         android:fromXDelta="50%p" | ||||
|         android:toXDelta="0" | ||||
|         android:duration="@android:integer/config_mediumAnimTime" | ||||
|         /> | ||||
|     <alpha | ||||
|         android:fromAlpha="0.0" | ||||
|         android:toAlpha="1.0" | ||||
|         android:duration="@android:integer/config_mediumAnimTime" | ||||
|         /> | ||||
| </set> | ||||
|  | @ -1,14 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
|     <translate | ||||
|         android:fromXDelta="0" | ||||
|         android:toXDelta="-50%p" | ||||
|         android:duration="@android:integer/config_mediumAnimTime" | ||||
|         /> | ||||
|     <alpha | ||||
|         android:fromAlpha="1.0" | ||||
|         android:toAlpha="0.0" | ||||
|         android:duration="@android:integer/config_mediumAnimTime" | ||||
|         /> | ||||
| </set> | ||||
|  | @ -1,14 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
| 
 | ||||
|     <objectAnimator | ||||
|         android:interpolator="@android:interpolator/accelerate_cubic" | ||||
|         android:duration="300" | ||||
|         android:propertyName="x" | ||||
|         android:valueFrom="1000" | ||||
|         android:valueTo="0" | ||||
|         android:valueType="floatType" | ||||
|         /> | ||||
| 
 | ||||
| </set> | ||||
|  | @ -1,14 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
| 
 | ||||
|     <objectAnimator | ||||
|         android:interpolator="@android:interpolator/accelerate_cubic" | ||||
|         android:duration="300" | ||||
|         android:propertyName="x" | ||||
|         android:valueFrom="-1000" | ||||
|         android:valueTo="0" | ||||
|         android:valueType="floatType" | ||||
|         /> | ||||
| 
 | ||||
| </set> | ||||
|  | @ -1,13 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
| 
 | ||||
|     <objectAnimator | ||||
|         android:duration="300" | ||||
|         android:propertyName="x" | ||||
|         android:valueFrom="0" | ||||
|         android:valueTo="1000" | ||||
|         android:valueType="floatType" | ||||
|         /> | ||||
| 
 | ||||
| </set> | ||||
|  | @ -1,13 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <set | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
| 
 | ||||
|     <objectAnimator | ||||
|         android:duration="300" | ||||
|         android:propertyName="x" | ||||
|         android:valueFrom="0" | ||||
|         android:valueTo="-1000" | ||||
|         android:valueType="floatType" | ||||
|         /> | ||||
| 
 | ||||
| </set> | ||||
|  | @ -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" /> | ||||
| 
 | ||||
|     <Switch | ||||
|         android:id="@+id/material_preference_switch" | ||||
|  |  | |||
|  | @ -1,28 +0,0 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | ||||
| <PreferenceScreen | ||||
|     xmlns:android="http://schemas.android.com/apk/res/android"> | ||||
| 
 | ||||
|     <!--    <PreferenceCategory android:title="@string/preference_category_general">--> | ||||
|     <!--        <Preference--> | ||||
|     <!--            android:key="PREF_DELETE_ALL_SYNCS"--> | ||||
|     <!--            android:icon="@drawable/ic_delete_forever"--> | ||||
|     <!--            android:title="@string/preference_delete_all_syncs"--> | ||||
|     <!--            android:summary="@string/preference_delete_all_syncs_summary"/>--> | ||||
|     <!--    </PreferenceCategory>--> | ||||
| 
 | ||||
|     <PreferenceCategory android:title="@string/preference_category_information"> | ||||
|         <Preference | ||||
|             android:icon="@drawable/ic_github" | ||||
|             android:title="Github" | ||||
|             android:summary="@string/preference_github_summary"> | ||||
|             <intent | ||||
|                 android:action="android.intent.action.VIEW" | ||||
|                 android:data="https://github.com/MISP/misp-bump"/> | ||||
|         </Preference> | ||||
| 
 | ||||
|         <Preference | ||||
|             android:icon="@drawable/ic_info_outline_dark" | ||||
|             android:title="Version" | ||||
|             android:summary="1.1.2"/> | ||||
|     </PreferenceCategory> | ||||
| </PreferenceScreen> | ||||
		Loading…
	
		Reference in New Issue
	
	 Felix Prahl-Kamps
						Felix Prahl-Kamps