From d384ac3114f4c6c1ec10bf895214c80e0f2ac765 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20R=C3=B6sch?= Date: Fri, 18 Mar 2022 22:43:57 +0100 Subject: [PATCH 1/3] fix cancellation of workers --- .../bag/dp3t/checkin/networking/CrowdNotifierKeyLoadWorker.java | 2 +- app/src/main/java/ch/admin/bag/dp3t/networking/ConfigWorker.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/ch/admin/bag/dp3t/checkin/networking/CrowdNotifierKeyLoadWorker.java b/app/src/main/java/ch/admin/bag/dp3t/checkin/networking/CrowdNotifierKeyLoadWorker.java index 524f8a5a..b434f91e 100644 --- a/app/src/main/java/ch/admin/bag/dp3t/checkin/networking/CrowdNotifierKeyLoadWorker.java +++ b/app/src/main/java/ch/admin/bag/dp3t/checkin/networking/CrowdNotifierKeyLoadWorker.java @@ -47,7 +47,7 @@ public static void startKeyLoadWorker(Context context) { } public static void stop(Context context) { - WorkManager.getInstance(context).cancelAllWorkByTag(WORK_TAG); + WorkManager.getInstance(context).cancelUniqueWork(WORK_TAG); } diff --git a/app/src/main/java/ch/admin/bag/dp3t/networking/ConfigWorker.kt b/app/src/main/java/ch/admin/bag/dp3t/networking/ConfigWorker.kt index 15d6a26f..9cd1e1f7 100644 --- a/app/src/main/java/ch/admin/bag/dp3t/networking/ConfigWorker.kt +++ b/app/src/main/java/ch/admin/bag/dp3t/networking/ConfigWorker.kt @@ -67,7 +67,7 @@ class ConfigWorker(context: Context, workerParams: WorkerParameters) : Coroutine } fun stop(context: Context) { - WorkManager.getInstance(context).cancelAllWorkByTag(FakeWorker.WORK_TAG) + WorkManager.getInstance(context).cancelUniqueWork(WORK_NAME); } @Throws(IOException::class, ResponseError::class, SignatureException::class) From 628843208a49e5914ec7ea94f878a955098f84ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20R=C3=B6sch?= Date: Sat, 19 Mar 2022 19:01:14 +0100 Subject: [PATCH 2/3] enable debug fragment from hibernation screen and extend debug fragment with access to HistoryFragment --- .../admin/bag/dp3t/debug/DebugFragment.java | 10 ++++++ .../admin/bag/dp3t/debug/DebugFragment.java | 20 +++++++++--- .../admin/bag/dp3t/debug/DebugFragment.java | 10 ++++++ .../ch/admin/bag/dp3t/TabbarHostFragment.java | 2 +- .../dp3t/hibernate/HibernatingInfoFragment.kt | 4 ++- .../bag/dp3t/viewmodel/TracingViewModel.java | 27 +++++++++------- app/src/main/res/layout/fragment_debug.xml | 32 +++++++++++++++++++ 7 files changed, 86 insertions(+), 19 deletions(-) diff --git a/app/src/abnahme/java/ch/admin/bag/dp3t/debug/DebugFragment.java b/app/src/abnahme/java/ch/admin/bag/dp3t/debug/DebugFragment.java index 3eae6855..fe5d1773 100644 --- a/app/src/abnahme/java/ch/admin/bag/dp3t/debug/DebugFragment.java +++ b/app/src/abnahme/java/ch/admin/bag/dp3t/debug/DebugFragment.java @@ -22,6 +22,7 @@ import org.dpppt.android.sdk.internal.nearby.ExposureWindowMatchingWorker; import ch.admin.bag.dp3t.R; +import ch.admin.bag.dp3t.contacts.HistoryFragment; import ch.admin.bag.dp3t.networking.CertificatePinning; public class DebugFragment extends Fragment { @@ -62,6 +63,15 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat view.findViewById(R.id.debug_trigger_exposure_check) .setOnClickListener(v -> ExposureWindowMatchingWorker.startMatchingWorker(v.getContext())); + + View historyButton = view.findViewById(R.id.debug_history); + historyButton.setOnClickListener(v -> { + getParentFragmentManager().beginTransaction() + .setCustomAnimations(R.anim.slide_enter, R.anim.slide_exit, R.anim.slide_pop_enter, R.anim.slide_pop_exit) + .replace(R.id.main_fragment_container, HistoryFragment.newInstance()) + .addToBackStack(HistoryFragment.class.getCanonicalName()) + .commit(); + }); } } diff --git a/app/src/dev/java/ch/admin/bag/dp3t/debug/DebugFragment.java b/app/src/dev/java/ch/admin/bag/dp3t/debug/DebugFragment.java index 6afd3924..9f839c97 100644 --- a/app/src/dev/java/ch/admin/bag/dp3t/debug/DebugFragment.java +++ b/app/src/dev/java/ch/admin/bag/dp3t/debug/DebugFragment.java @@ -39,6 +39,7 @@ import ch.admin.bag.dp3t.R; import ch.admin.bag.dp3t.checkin.CrowdNotifierViewModel; import ch.admin.bag.dp3t.checkin.models.SwissCovidAssociatedData; +import ch.admin.bag.dp3t.contacts.HistoryFragment; import ch.admin.bag.dp3t.debug.model.DebugAppState; import ch.admin.bag.dp3t.networking.CertificatePinning; import ch.admin.bag.dp3t.storage.SecureStorage; @@ -87,11 +88,11 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat private void setupSdkViews(View view) { TextView statusText = view.findViewById(R.id.debug_sdk_state_text); tracingViewModel.getTracingStatusLiveData().observe(getViewLifecycleOwner(), status -> { - statusText.setText(DebugUtils.formatStatusString(status, view.getContext())); - boolean isTracing = (status.isTracingEnabled()) && status.getErrors().size() == 0; - statusText.setBackgroundTintList(ColorStateList.valueOf( - isTracing ? getResources().getColor(R.color.status_green_bg, null) - : getResources().getColor(R.color.status_purple_bg, null))); + statusText.setText(DebugUtils.formatStatusString(status, view.getContext())); + boolean isTracing = (status.isTracingEnabled()) && status.getErrors().size() == 0; + statusText.setBackgroundTintList(ColorStateList.valueOf( + isTracing ? getResources().getColor(R.color.status_green_bg, null) + : getResources().getColor(R.color.status_purple_bg, null))); }); view.findViewById(R.id.debug_button_reset).setOnClickListener(v -> { @@ -132,6 +133,15 @@ private void setupSdkViews(View view) { view.findViewById(R.id.debug_trigger_exposure_check) .setOnClickListener(v -> ExposureWindowMatchingWorker.startMatchingWorker(v.getContext())); + + View historyButton = view.findViewById(R.id.debug_history); + historyButton.setOnClickListener(v -> { + getParentFragmentManager().beginTransaction() + .setCustomAnimations(R.anim.slide_enter, R.anim.slide_exit, R.anim.slide_pop_enter, R.anim.slide_pop_exit) + .replace(R.id.main_fragment_container, HistoryFragment.newInstance()) + .addToBackStack(HistoryFragment.class.getCanonicalName()) + .commit(); + }); } private void setupStateOptions(View view) { diff --git a/app/src/log/java/ch/admin/bag/dp3t/debug/DebugFragment.java b/app/src/log/java/ch/admin/bag/dp3t/debug/DebugFragment.java index a535bc24..a79c176d 100644 --- a/app/src/log/java/ch/admin/bag/dp3t/debug/DebugFragment.java +++ b/app/src/log/java/ch/admin/bag/dp3t/debug/DebugFragment.java @@ -22,6 +22,7 @@ import org.dpppt.android.sdk.internal.nearby.ExposureWindowMatchingWorker; import ch.admin.bag.dp3t.R; +import ch.admin.bag.dp3t.contacts.HistoryFragment; import ch.admin.bag.dp3t.networking.CertificatePinning; public class DebugFragment extends Fragment { @@ -62,6 +63,15 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat view.findViewById(R.id.debug_trigger_exposure_check) .setOnClickListener(v -> ExposureWindowMatchingWorker.startMatchingWorker(v.getContext())); + + View historyButton = view.findViewById(R.id.debug_history); + historyButton.setOnClickListener(v -> { + getParentFragmentManager().beginTransaction() + .setCustomAnimations(R.anim.slide_enter, R.anim.slide_exit, R.anim.slide_pop_enter, R.anim.slide_pop_exit) + .replace(R.id.main_fragment_container, HistoryFragment.newInstance()) + .addToBackStack(HistoryFragment.class.getCanonicalName()) + .commit(); + }); } } \ No newline at end of file diff --git a/app/src/main/java/ch/admin/bag/dp3t/TabbarHostFragment.java b/app/src/main/java/ch/admin/bag/dp3t/TabbarHostFragment.java index b8cdc100..d3721417 100644 --- a/app/src/main/java/ch/admin/bag/dp3t/TabbarHostFragment.java +++ b/app/src/main/java/ch/admin/bag/dp3t/TabbarHostFragment.java @@ -83,7 +83,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat setupBottomNavigationView(); } - private static void setupDebugButton(View schwiizerchruez, FragmentManager fragmentManager) { + public static void setupDebugButton(View schwiizerchruez, FragmentManager fragmentManager) { if (!DebugFragment.EXISTS) { return; } diff --git a/app/src/main/java/ch/admin/bag/dp3t/hibernate/HibernatingInfoFragment.kt b/app/src/main/java/ch/admin/bag/dp3t/hibernate/HibernatingInfoFragment.kt index 45820dd2..46816226 100644 --- a/app/src/main/java/ch/admin/bag/dp3t/hibernate/HibernatingInfoFragment.kt +++ b/app/src/main/java/ch/admin/bag/dp3t/hibernate/HibernatingInfoFragment.kt @@ -11,7 +11,6 @@ import ch.admin.bag.dp3t.R import ch.admin.bag.dp3t.TabbarHostFragment import ch.admin.bag.dp3t.databinding.FragmentHibernatingInfoBinding import ch.admin.bag.dp3t.html.HtmlFragment -import ch.admin.bag.dp3t.networking.models.InfoBoxModel import ch.admin.bag.dp3t.util.AssetUtil import ch.admin.bag.dp3t.util.UrlUtil @@ -32,6 +31,9 @@ class HibernatingInfoFragment : Fragment() { true } + val schwiizerchruez = toolbar.findViewById(R.id.schwiizerchruez) + TabbarHostFragment.setupDebugButton(schwiizerchruez, requireActivity().supportFragmentManager) + viewModel.isHibernatingModeEnabled.observe(viewLifecycleOwner) { isHibernatingModeEnabled -> if (!isHibernatingModeEnabled) { showHomeFragment() diff --git a/app/src/main/java/ch/admin/bag/dp3t/viewmodel/TracingViewModel.java b/app/src/main/java/ch/admin/bag/dp3t/viewmodel/TracingViewModel.java index 712e7e46..d48c2d39 100644 --- a/app/src/main/java/ch/admin/bag/dp3t/viewmodel/TracingViewModel.java +++ b/app/src/main/java/ch/admin/bag/dp3t/viewmodel/TracingViewModel.java @@ -23,11 +23,13 @@ import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; +import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; import org.dpppt.android.sdk.DP3T; +import org.dpppt.android.sdk.InfectionStatus; import org.dpppt.android.sdk.TracingStatus; import org.dpppt.android.sdk.internal.BroadcastHelper; import org.dpppt.android.sdk.internal.history.HistoryEntry; @@ -41,22 +43,12 @@ public class TracingViewModel extends AndroidViewModel { private final MutableLiveData tracingStatusLiveData = new MutableLiveData<>(); - private BroadcastReceiver tracingStatusBroadcastReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - invalidateTracingStatus(); - loadHistoryEntries(); - } - }; - private final MutableLiveData tracingEnabledLiveData = new MutableLiveData<>(); private final MutableLiveData> exposedLiveData = new MutableLiveData<>(); private final MutableLiveData> errorsLiveData = new MutableLiveData<>(Collections.emptyList()); private final MutableLiveData appStatusLiveData = new MutableLiveData<>(); - private TracingStatusInterface tracingStatusInterface = new TracingStatusWrapper(); - private final MutableLiveData bluetoothEnabledLiveData = new MutableLiveData<>(); private BroadcastReceiver bluetoothReceiver = new BroadcastReceiver() { @Override @@ -67,8 +59,14 @@ public void onReceive(Context context, Intent intent) { } } }; - private final MutableLiveData> historyMutableLiveData = new MutableLiveData<>(); + private BroadcastReceiver tracingStatusBroadcastReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + invalidateTracingStatus(); + loadHistoryEntries(); + } + }; public TracingViewModel(@NonNull Application application) { super(application); @@ -101,7 +99,12 @@ public void resetSdk() { } public void invalidateTracingStatus() { - TracingStatus status = DP3T.getStatus(getApplication()); + TracingStatus status; + if (DP3T.isInitialized()) { + status = DP3T.getStatus(getApplication()); + } else { + status = new TracingStatus(false, 0, InfectionStatus.HEALTHY, new ArrayList<>(), new ArrayList<>()); + } tracingStatusLiveData.setValue(status); } diff --git a/app/src/main/res/layout/fragment_debug.xml b/app/src/main/res/layout/fragment_debug.xml index e8e03bdc..2a34aefb 100644 --- a/app/src/main/res/layout/fragment_debug.xml +++ b/app/src/main/res/layout/fragment_debug.xml @@ -285,6 +285,38 @@ + + + + + + +