Skip to content

Commit

Permalink
Fixed some navigation issues when backing up.
Browse files Browse the repository at this point in the history
Backing up/logging out from app home page always goes back to login screen, i.e. locks ConnectID.
  • Loading branch information
OrangeAndGreen committed May 17, 2024
1 parent 8ede3b7 commit a5d3061
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 27 deletions.
9 changes: 2 additions & 7 deletions app/res/navigation/nav_graph_connect.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
app:destination="@id/connect_job_delivery_progress_fragment" />
<action
android:id="@+id/action_connect_jobs_list_fragment_to_connect_downloading_fragment"
app:destination="@id/connect_downloading_fragment" />

app:destination="@id/connect_downloading_fragment"
app:popUpTo="@id/connect_jobs_list_fragment" />
</fragment>

<fragment
Expand Down Expand Up @@ -56,10 +56,6 @@
android:id="@+id/action_connect_job_learning_progress_fragment_to_connect_downloading_fragment"
app:destination="@id/connect_downloading_fragment"
app:popUpTo="@id/connect_jobs_list_fragment"/>
<action
android:id="@+id/action_connect_job_learning_progress_fragment_to_connect_jobs_list_fragment"
app:popUpTo="@id/connect_jobs_list_fragment"
app:popUpToInclusive="true"/>
</fragment>

<fragment
Expand Down Expand Up @@ -123,7 +119,6 @@
<argument
android:name="showPayments"
app:argType="boolean" />

</fragment>

</navigation>
2 changes: 1 addition & 1 deletion app/src/org/commcare/activities/DispatchActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
4 changes: 0 additions & 4 deletions app/src/org/commcare/activities/HomeScreenBaseActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
36 changes: 22 additions & 14 deletions app/src/org/commcare/activities/connect/ConnectActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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
Expand All @@ -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());
}
}

Expand Down
10 changes: 9 additions & 1 deletion app/src/org/commcare/activities/connect/ConnectManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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() {
}
Expand Down Expand Up @@ -588,13 +590,19 @@ 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();

String appType = isLearning ? "Learn" : "Deliver";
FirebaseAnalyticsUtil.reportCccAppLaunch(appType, appId);

getInstance().primedAppIdForAutoLogin = appId;
getInstance().shouldLock = true;

CommCareLauncher.launchCommCareForAppId(context, appId);
}
Expand Down

0 comments on commit a5d3061

Please sign in to comment.