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);
}