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 3eae68554..fe5d1773f 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 6afd39244..9f839c975 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 a535bc24e..a79c176df 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 b8cdc100e..d37214171 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/checkin/networking/CrowdNotifierKeyLoadWorker.java b/app/src/main/java/ch/admin/bag/dp3t/checkin/networking/CrowdNotifierKeyLoadWorker.java index 524f8a5ac..1a4db0230 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); } @@ -59,6 +59,7 @@ public CrowdNotifierKeyLoadWorker(@NonNull Context context, @NonNull WorkerParam @Override public Result doWork() { Log.d(LOG_TAG, "Started KeyLoadWorker"); + DP3T.addWorkerStartedToHistory(getApplicationContext(), "key load worker"); if (DP3T.getStatus(getApplicationContext()).getInfectionStatus() == INFECTED) { Log.d(LOG_TAG, "KeyLoadWorker: Network Request not executed"); return Result.success(); 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 45820dd2d..468162265 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/networking/ConfigWorker.kt b/app/src/main/java/ch/admin/bag/dp3t/networking/ConfigWorker.kt index 15d6a26f4..9cd1e1f72 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) 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 712e7e464..d48c2d391 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 e8e03bdc4..2a34aefb4 100644 --- a/app/src/main/res/layout/fragment_debug.xml +++ b/app/src/main/res/layout/fragment_debug.xml @@ -285,6 +285,38 @@ + + + + + + +