From a5d306152ea3927423685ee74987745b59b915d6 Mon Sep 17 00:00:00 2001 From: Dave Viggiano Date: Fri, 17 May 2024 13:09:09 -0400 Subject: [PATCH] Fixed some navigation issues when backing up. Backing up/logging out from app home page always goes back to login screen, i.e. locks ConnectID. --- app/res/navigation/nav_graph_connect.xml | 9 ++--- .../commcare/activities/DispatchActivity.java | 2 +- .../activities/HomeScreenBaseActivity.java | 4 --- .../activities/connect/ConnectActivity.java | 36 +++++++++++-------- .../activities/connect/ConnectManager.java | 10 +++++- 5 files changed, 34 insertions(+), 27 deletions(-) diff --git a/app/res/navigation/nav_graph_connect.xml b/app/res/navigation/nav_graph_connect.xml index 358e4b32c7..98e9492101 100644 --- a/app/res/navigation/nav_graph_connect.xml +++ b/app/res/navigation/nav_graph_connect.xml @@ -24,8 +24,8 @@ app:destination="@id/connect_job_delivery_progress_fragment" /> - + app:destination="@id/connect_downloading_fragment" + app:popUpTo="@id/connect_jobs_list_fragment" /> - - diff --git a/app/src/org/commcare/activities/DispatchActivity.java b/app/src/org/commcare/activities/DispatchActivity.java index 00cdbfde77..38e223e44a 100644 --- a/app/src/org/commcare/activities/DispatchActivity.java +++ b/app/src/org/commcare/activities/DispatchActivity.java @@ -204,7 +204,7 @@ private void dispatch() { launchHomeScreen(); } } catch (SessionUnavailableException sue) { - if(!userTriggeredLogout || !ConnectManager.wasAppLaunchedFromConnect(currentApp.getUniqueId())) { + if(!userTriggeredLogout || ConnectManager.getShouldLock() || !ConnectManager.wasAppLaunchedFromConnect(currentApp.getUniqueId())) { launchLoginScreen(); } else { diff --git a/app/src/org/commcare/activities/HomeScreenBaseActivity.java b/app/src/org/commcare/activities/HomeScreenBaseActivity.java index c2810e4685..a0b49f8b8e 100644 --- a/app/src/org/commcare/activities/HomeScreenBaseActivity.java +++ b/app/src/org/commcare/activities/HomeScreenBaseActivity.java @@ -1465,10 +1465,6 @@ private void handleDeveloperModeClicks() { @Override public boolean isBackEnabled() { - String appId = CommCareApplication.instance().getCurrentApp().getUniqueId(); - if (ConnectManager.wasAppLaunchedFromConnect(appId)) { - return true; - } return false; } diff --git a/app/src/org/commcare/activities/connect/ConnectActivity.java b/app/src/org/commcare/activities/connect/ConnectActivity.java index 027092d34b..3e6641b26c 100644 --- a/app/src/org/commcare/activities/connect/ConnectActivity.java +++ b/app/src/org/commcare/activities/connect/ConnectActivity.java @@ -10,7 +10,6 @@ import androidx.fragment.app.Fragment; import androidx.navigation.NavController; import androidx.navigation.NavGraph; -import androidx.navigation.Navigation; import androidx.navigation.fragment.NavHostFragment; import org.commcare.activities.CommCareActivity; @@ -46,7 +45,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.screen_connect); setTitle(getString(R.string.connect_title)); - showBackButton(); + updateBackButton(); boolean showJobInfo = getIntent().getBooleanExtra("info", false); @@ -82,32 +81,43 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { @Override public void onBackPressed() { if(backButtonEnabled) { - //Disable this handler and call again for default back behavior - super.onBackPressed(); + NavHostFragment navHostFragment = (NavHostFragment)getSupportFragmentManager() + .findFragmentById(R.id.nav_host_fragment_connect); + if(navHostFragment != null) { + int count = navHostFragment.getChildFragmentManager().getBackStackEntryCount(); + if(count > 0) { + NavController navController = navHostFragment.getNavController(); + navController.getNavInflater(); + navController.popBackStack(); + } else { + finish(); + } + } } } @Override protected void onResume() { super.onResume(); - if(!ConnectManager.isUnlocked()) { + if(ConnectManager.getShouldLock()) { + ConnectManager.setShouldLock(false); finish(); } } @Override protected void onDestroy() { - super.onDestroy(); - if(destinationListener != null) { NavHostFragment navHostFragment = (NavHostFragment)getSupportFragmentManager() .findFragmentById(R.id.nav_host_fragment_connect); if(navHostFragment != null) { - navHostFragment.getNavController() - .removeOnDestinationChangedListener(destinationListener); + NavController navController = navHostFragment.getNavController(); + navController.removeOnDestinationChangedListener(destinationListener); } destinationListener = null; } + + super.onDestroy(); } @Override @@ -128,13 +138,11 @@ public CustomProgressDialog generateProgressDialog(int taskId) { public void setBackButtonEnabled(boolean enabled) { backButtonEnabled = enabled; } public void setWaitDialogEnabled(boolean enabled) { waitDialogEnabled = enabled; } - private void showBackButton() { + private void updateBackButton() { ActionBar actionBar = getSupportActionBar(); if (actionBar != null) { - if(isBackEnabled()){ - actionBar.setDisplayShowHomeEnabled(true); - actionBar.setDisplayHomeAsUpEnabled(true); - } + actionBar.setDisplayShowHomeEnabled(isBackEnabled()); + actionBar.setDisplayHomeAsUpEnabled(isBackEnabled()); } } diff --git a/app/src/org/commcare/activities/connect/ConnectManager.java b/app/src/org/commcare/activities/connect/ConnectManager.java index 4f93b3ccee..42b3b7f7e5 100644 --- a/app/src/org/commcare/activities/connect/ConnectManager.java +++ b/app/src/org/commcare/activities/connect/ConnectManager.java @@ -64,7 +64,6 @@ import java.util.Locale; import java.util.Random; import java.util.concurrent.TimeUnit; -import java.util.Vector; import javax.crypto.SecretKey; @@ -105,6 +104,9 @@ public interface ConnectActivityCompleteListener { private String primedAppIdForAutoLogin = null; + //Remembers that we should lock ConnectId once we've entered an app + private boolean shouldLock = false; + //Singleton, private constructor private ConnectManager() { } @@ -588,6 +590,11 @@ public void hideTaskCancelButton() { } } + public static boolean getShouldLock() { return getInstance().shouldLock; } + public static void setShouldLock(boolean shouldLock) { + getInstance().shouldLock = shouldLock; + } + public static void launchApp(Context context, boolean isLearning, String appId) { CommCareApplication.instance().closeUserSession(); @@ -595,6 +602,7 @@ public static void launchApp(Context context, boolean isLearning, String appId) FirebaseAnalyticsUtil.reportCccAppLaunch(appType, appId); getInstance().primedAppIdForAutoLogin = appId; + getInstance().shouldLock = true; CommCareLauncher.launchCommCareForAppId(context, appId); }