diff --git a/app/AndroidManifest.xml b/app/AndroidManifest.xml
index 36cca38d93..ec6ae13e4b 100644
--- a/app/AndroidManifest.xml
+++ b/app/AndroidManifest.xml
@@ -171,6 +171,7 @@
+
\ No newline at end of file
diff --git a/app/res/layout/screen_connect_job_info.xml b/app/res/layout/screen_connect_job_info.xml
new file mode 100644
index 0000000000..ef0a0bd132
--- /dev/null
+++ b/app/res/layout/screen_connect_job_info.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/res/navigation/nav_graph_connect.xml b/app/res/navigation/nav_graph_connect.xml
index 98e9492101..fa30cd2b1e 100644
--- a/app/res/navigation/nav_graph_connect.xml
+++ b/app/res/navigation/nav_graph_connect.xml
@@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph_connect"
+ app:startDestination="@id/connect_jobs_list_fragment"
>
private FormAndDataSyncer formAndDataSyncer;
private String presetAppId;
private boolean appLaunchedFromConnect;
- private boolean appAutoLaunchPerformed;
+ private boolean connectLaunchPerformed;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -130,8 +130,8 @@ protected void onCreate(Bundle savedInstanceState) {
uiController.updateConnectLoginState();
presetAppId = getIntent().getStringExtra(EXTRA_APP_ID);
- appAutoLaunchPerformed = false;
appLaunchedFromConnect = ConnectManager.wasAppLaunchedFromConnect(presetAppId);
+ connectLaunchPerformed = false;
if (savedInstanceState == null) {
// Only restore last user on the initial creation
@@ -469,6 +469,8 @@ public void handleConnectButtonPress() {
ConnectManager.unlockConnect(this, success -> {
if(success) {
ConnectManager.goToConnectJobsList();
+ setResult(RESULT_OK);
+ finish();
}
});
}
@@ -512,13 +514,13 @@ public void registerConnectIdUser() {
private void checkForSavedCredentials() {
boolean loginWithConnectIDVisible = false;
if (ConnectManager.isConnectIdIntroduced()) {
- if (appLaunchedFromConnect) {
+ if (appLaunchedFromConnect && !connectLaunchPerformed) {
loginWithConnectIDVisible = true;
uiController.setConnectButtonVisible(false);
uiController.setUsername(getString(R.string.login_input_auto));
uiController.setPasswordOrPin(getString(R.string.login_input_auto));
- if(!seatAppIfNeeded(presetAppId) && !appAutoLaunchPerformed) {
- appAutoLaunchPerformed = true;
+ if(!seatAppIfNeeded(presetAppId)) {
+ connectLaunchPerformed = true;
initiateLoginAttempt(uiController.isRestoreSessionChecked());
}
} else {
diff --git a/app/src/org/commcare/activities/connect/ConnectActivity.java b/app/src/org/commcare/activities/connect/ConnectActivity.java
index 3e6641b26c..250f6bb758 100644
--- a/app/src/org/commcare/activities/connect/ConnectActivity.java
+++ b/app/src/org/commcare/activities/connect/ConnectActivity.java
@@ -47,62 +47,35 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
setTitle(getString(R.string.connect_title));
updateBackButton();
- boolean showJobInfo = getIntent().getBooleanExtra("info", false);
-
destinationListener = FirebaseAnalyticsUtil.getDestinationChangeListener();
NavHostFragment host = (NavHostFragment)getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment_connect);
NavController navController = host.getNavController();
navController.addOnDestinationChangedListener(destinationListener);
-
- NavGraph graph = navController.getNavInflater().inflate(R.navigation.nav_graph_connect);
-
- int startId = showJobInfo ? R.id.connect_job_intro_fragment : R.id.connect_jobs_list_fragment;
- ConnectJobRecord job = ConnectManager.getActiveJob();
- if(showJobInfo && job != null) {
- switch(job.getStatus()) {
- case ConnectJobRecord.STATUS_AVAILABLE,
- ConnectJobRecord.STATUS_AVAILABLE_NEW -> {
- startId = R.id.connect_job_intro_fragment;
- }
- case ConnectJobRecord.STATUS_LEARNING -> {
- startId = R.id.connect_job_learning_progress_fragment;
- }
- case ConnectJobRecord.STATUS_DELIVERING -> {
- startId = R.id.connect_job_delivery_progress_fragment;
- }
- }
- }
-
- graph.setStartDestination(startId);
- navController.setGraph(graph);
}
@Override
public void onBackPressed() {
if(backButtonEnabled) {
- 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();
- }
- }
+ 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.getShouldLock()) {
- ConnectManager.setShouldLock(false);
- finish();
- }
}
@Override
diff --git a/app/src/org/commcare/activities/connect/ConnectJobInfoActivity.java b/app/src/org/commcare/activities/connect/ConnectJobInfoActivity.java
new file mode 100644
index 0000000000..48f45a5215
--- /dev/null
+++ b/app/src/org/commcare/activities/connect/ConnectJobInfoActivity.java
@@ -0,0 +1,140 @@
+package org.commcare.activities.connect;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+
+import androidx.activity.result.ActivityResultLauncher;
+import androidx.activity.result.contract.ActivityResultContracts;
+import androidx.appcompat.app.ActionBar;
+import androidx.fragment.app.Fragment;
+import androidx.navigation.NavController;
+import androidx.navigation.fragment.NavHostFragment;
+
+import org.commcare.activities.CommCareActivity;
+import org.commcare.activities.CommCareVerificationActivity;
+import org.commcare.android.database.connect.models.ConnectJobRecord;
+import org.commcare.dalvik.R;
+import org.commcare.fragments.connect.ConnectDeliveryProgressFragment;
+import org.commcare.fragments.connect.ConnectDownloadingFragment;
+import org.commcare.fragments.connect.ConnectJobIntroFragment;
+import org.commcare.fragments.connect.ConnectLearningProgressFragment;
+import org.commcare.tasks.ResourceEngineListener;
+import org.commcare.views.dialogs.CustomProgressDialog;
+
+import javax.annotation.Nullable;
+
+public class ConnectJobInfoActivity extends CommCareActivity {
+ private boolean backButtonEnabled = true;
+ private boolean waitDialogEnabled = true;
+
+ ActivityResultLauncher verificationLauncher = registerForActivityResult(
+ new ActivityResultContracts.StartActivityForResult(),
+ result -> {
+ if (result.getResultCode() == Activity.RESULT_OK) {
+ ConnectDownloadingFragment connectDownloadFragment = getConnectDownloadFragment();
+ if (connectDownloadFragment != null) {
+ connectDownloadFragment.onSuccessfulVerification();
+ }
+ }
+ });
+
+ @Override
+ protected void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.screen_connect_job_info);
+ setTitle(getString(R.string.connect_title));
+ updateBackButton();
+
+ Fragment fragment = null;
+ ConnectJobRecord job = ConnectManager.getActiveJob();
+ if(job != null) {
+ switch(job.getStatus()) {
+ case ConnectJobRecord.STATUS_LEARNING -> {
+ fragment = ConnectLearningProgressFragment.newInstance(false);
+ }
+ case ConnectJobRecord.STATUS_DELIVERING -> {
+ fragment = ConnectDeliveryProgressFragment.newInstance(false, false);
+ }
+ }
+ }
+
+ if(fragment == null) {
+ fragment = ConnectJobIntroFragment.newInstance(false);
+ }
+
+ getSupportFragmentManager().beginTransaction()
+ .add(R.id.connect_job_info_container, fragment).commit();
+ }
+
+ @Override
+ public void onBackPressed() {
+ if(backButtonEnabled) {
+ super.onBackPressed();
+ }
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
+ ConnectManager.handleFinishedActivity(requestCode, resultCode, intent);
+ super.onActivityResult(requestCode, resultCode, intent);
+ }
+
+ @Override
+ public CustomProgressDialog generateProgressDialog(int taskId) {
+ if(waitDialogEnabled) {
+ return CustomProgressDialog.newInstance(null, getString(R.string.please_wait), taskId);
+ }
+
+ return null;
+ }
+
+ public void setBackButtonEnabled(boolean enabled) { backButtonEnabled = enabled; }
+ public void setWaitDialogEnabled(boolean enabled) { waitDialogEnabled = enabled; }
+
+ private void updateBackButton() {
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ actionBar.setDisplayShowHomeEnabled(isBackEnabled());
+ actionBar.setDisplayHomeAsUpEnabled(isBackEnabled());
+ }
+ }
+
+ @Override
+ protected boolean shouldShowBreadcrumbBar() {
+ return false;
+ }
+
+ @Override
+ public ResourceEngineListener getReceiver() {
+ return getConnectDownloadFragment();
+ }
+
+ @Nullable
+ private ConnectDownloadingFragment getConnectDownloadFragment() {
+ NavHostFragment navHostFragment =
+ (NavHostFragment)getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment_connect);
+ Fragment currentFragment =
+ navHostFragment.getChildFragmentManager().getPrimaryNavigationFragment();
+ if (currentFragment instanceof ConnectDownloadingFragment) {
+ return (ConnectDownloadingFragment)currentFragment;
+ }
+ return null;
+ }
+
+ public void startAppValidation() {
+ Intent i = new Intent(this, CommCareVerificationActivity.class);
+ i.putExtra(CommCareVerificationActivity.KEY_LAUNCH_FROM_SETTINGS, true);
+ verificationLauncher.launch(i);
+ }
+}
diff --git a/app/src/org/commcare/activities/connect/ConnectManager.java b/app/src/org/commcare/activities/connect/ConnectManager.java
index 42b3b7f7e5..3ff121f5ab 100644
--- a/app/src/org/commcare/activities/connect/ConnectManager.java
+++ b/app/src/org/commcare/activities/connect/ConnectManager.java
@@ -104,9 +104,6 @@ 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() {
}
@@ -343,14 +340,13 @@ public static void verifySecondaryPhone(CommCareActivity> parent, ConnectActiv
public static void goToConnectJobsList() {
ConnectTask task = ConnectTask.CONNECT_MAIN;
Intent i = new Intent(manager.parentActivity, task.getNextActivity());
- manager.parentActivity.startActivityForResult(i, task.getRequestCode());
+ manager.parentActivity.startActivity(i);
}
public static void goToActiveInfoForJob(Activity activity) {
ConnectTask task = ConnectTask.CONNECT_JOB_INFO;
Intent i = new Intent(activity, task.getNextActivity());
- i.putExtra("info", true);
- activity.startActivityForResult(i, task.getRequestCode());
+ activity.startActivity(i);
}
public static void forgetAppCredentials(String appId, String userId) {
@@ -447,7 +443,7 @@ public static void checkConnectIdLink(CommCareActivity> activity, boolean auto
//Link the HQ user by aqcuiring the SSO token for the first time
ConnectSsoHelper.retrieveHqSsoTokenAsync(activity, username, true, auth -> {
if(auth == null) {
- Toast.makeText(activity, "Failed to acquire SSO token", Toast.LENGTH_SHORT).show();
+ //Toast.makeText(activity, "Failed to acquire SSO token", Toast.LENGTH_SHORT).show();
//TODO: Re-enable when token working again
//ConnectManager.forgetAppCredentials(appId, username);
}
@@ -590,11 +586,6 @@ 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();
@@ -602,13 +593,13 @@ public static void launchApp(Context context, boolean isLearning, String appId)
FirebaseAnalyticsUtil.reportCccAppLaunch(appType, appId);
getInstance().primedAppIdForAutoLogin = appId;
- getInstance().shouldLock = true;
CommCareLauncher.launchCommCareForAppId(context, appId);
}
public static boolean wasAppLaunchedFromConnect(String appId) {
String primed = getInstance().primedAppIdForAutoLogin;
+ getInstance().primedAppIdForAutoLogin = null;
return primed != null && primed.equals(appId);
}
diff --git a/app/src/org/commcare/activities/connect/ConnectTask.java b/app/src/org/commcare/activities/connect/ConnectTask.java
index 720d9d4ea6..a5e5609afe 100644
--- a/app/src/org/commcare/activities/connect/ConnectTask.java
+++ b/app/src/org/commcare/activities/connect/ConnectTask.java
@@ -71,7 +71,7 @@ public enum ConnectTask {
CONNECT_UNLOCK_VERIFY_ALT_PHONE(ConnectConstants.ConnectIdTaskIdOffset + 33,
ConnectIdPhoneVerificationActivity.class),
CONNECT_JOB_INFO(ConnectConstants.ConnectIdTaskIdOffset + 34,
- ConnectActivity.class),
+ ConnectJobInfoActivity.class),
CONNECT_REGISTRATION_CHANGE_PIN(ConnectConstants.ConnectIdTaskIdOffset + 35,
ConnectIdPinActivity.class),
;
diff --git a/app/src/org/commcare/activities/connect/IConnectAppLauncher.java b/app/src/org/commcare/activities/connect/IConnectAppLauncher.java
new file mode 100644
index 0000000000..6ffa534458
--- /dev/null
+++ b/app/src/org/commcare/activities/connect/IConnectAppLauncher.java
@@ -0,0 +1,5 @@
+package org.commcare.activities.connect;
+
+public interface IConnectAppLauncher {
+ void launchApp(String appId, boolean isLearning);
+}
diff --git a/app/src/org/commcare/adapters/ConnectJobAdapter.java b/app/src/org/commcare/adapters/ConnectJobAdapter.java
index 209c1711db..1147f48e9a 100644
--- a/app/src/org/commcare/adapters/ConnectJobAdapter.java
+++ b/app/src/org/commcare/adapters/ConnectJobAdapter.java
@@ -10,6 +10,7 @@
import org.commcare.activities.connect.ConnectDatabaseHelper;
import org.commcare.activities.connect.ConnectManager;
+import org.commcare.activities.connect.IConnectAppLauncher;
import org.commcare.android.database.connect.models.ConnectJobRecord;
import org.commcare.dalvik.R;
import org.commcare.fragments.connect.ConnectDeliveryProgressFragmentDirections;
@@ -33,9 +34,11 @@ public class ConnectJobAdapter extends RecyclerView.Adapter {
// String title = null;
// String message = null;
@@ -75,6 +81,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
});
Button reviewButton = view.findViewById(R.id.connect_progress_review_button);
+ reviewButton.setVisibility(showLearningLaunch ? View.VISIBLE : View.GONE);
reviewButton.setOnClickListener(v -> {
launchLearningApp(reviewButton);
});
@@ -86,6 +93,7 @@ private void launchLearningApp(Button button) {
ConnectJobRecord job = ConnectManager.getActiveJob();
if(ConnectManager.isAppInstalled(job.getLearnAppInfo().getAppId())) {
ConnectManager.launchApp(getContext(), true, job.getLearnAppInfo().getAppId());
+ getActivity().finish();
}
else {
String title = getString(R.string.connect_downloading_learn);
@@ -97,6 +105,7 @@ private void launchDeliveryApp(Button button) {
ConnectJobRecord job = ConnectManager.getActiveJob();
if(ConnectManager.isAppInstalled(job.getDeliveryAppInfo().getAppId())) {
ConnectManager.launchApp(getContext(), false, job.getDeliveryAppInfo().getAppId());
+ getActivity().finish();
}
else {
String title = getString(R.string.connect_downloading_delivery);
diff --git a/app/src/org/commcare/fragments/connect/ConnectDeliveryProgressFragment.java b/app/src/org/commcare/fragments/connect/ConnectDeliveryProgressFragment.java
index a0d36a4bd6..b4fd144a76 100644
--- a/app/src/org/commcare/fragments/connect/ConnectDeliveryProgressFragment.java
+++ b/app/src/org/commcare/fragments/connect/ConnectDeliveryProgressFragment.java
@@ -54,13 +54,18 @@ public class ConnectDeliveryProgressFragment extends Fragment {
private ConstraintLayout paymentAlertTile;
private TextView paymentAlertText;
private ConnectJobPaymentRecord paymentToConfirm = null;
+ private boolean showLearningLaunch = true;
+ private boolean showDeliveryLaunch = true;
public ConnectDeliveryProgressFragment() {
// Required empty public constructor
}
- public static ConnectDeliveryProgressFragment newInstance() {
- return new ConnectDeliveryProgressFragment();
+ public static ConnectDeliveryProgressFragment newInstance(boolean showLearningLaunch, boolean showDeliveryLaunch) {
+ ConnectDeliveryProgressFragment fragment = new ConnectDeliveryProgressFragment();
+ fragment.showLearningLaunch = showLearningLaunch;
+ fragment.showDeliveryLaunch = showDeliveryLaunch;
+ return fragment;
}
@Override
@@ -106,7 +111,8 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
});
final ViewPager2 pager = view.findViewById(R.id.connect_delivery_progress_view_pager);
- viewStateAdapter = new ConnectDeliveryProgressFragment.ViewStateAdapter(getChildFragmentManager(), getLifecycle());
+ viewStateAdapter = new ConnectDeliveryProgressFragment.ViewStateAdapter(getChildFragmentManager(),
+ getLifecycle(), showLearningLaunch, showDeliveryLaunch);
pager.setAdapter(viewStateAdapter);
final TabLayout tabLayout = view.findViewById(R.id.connect_delivery_progress_tabs);
@@ -206,15 +212,19 @@ private void updateUpdatedDate(Date lastUpdate) {
private static class ViewStateAdapter extends FragmentStateAdapter {
private static ConnectDeliveryProgressDeliveryFragment deliveryFragment = null;
private static ConnectResultsSummaryListFragment verificationFragment = null;
- public ViewStateAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
+ private boolean showLearningLaunch;
+ private boolean showDeliveryLaunch;
+ public ViewStateAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle, boolean showLearningLaunch, boolean showDeliveryLaunch) {
super(fragmentManager, lifecycle);
+ this.showLearningLaunch = showLearningLaunch;
+ this.showDeliveryLaunch = showDeliveryLaunch;
}
@NonNull
@Override
public Fragment createFragment(int position) {
if (position == 0) {
- deliveryFragment = ConnectDeliveryProgressDeliveryFragment.newInstance();
+ deliveryFragment = ConnectDeliveryProgressDeliveryFragment.newInstance(showLearningLaunch, showDeliveryLaunch);
return deliveryFragment;
}
diff --git a/app/src/org/commcare/fragments/connect/ConnectDownloadingFragment.java b/app/src/org/commcare/fragments/connect/ConnectDownloadingFragment.java
index 90c33f911a..211dc5e75a 100644
--- a/app/src/org/commcare/fragments/connect/ConnectDownloadingFragment.java
+++ b/app/src/org/commcare/fragments/connect/ConnectDownloadingFragment.java
@@ -122,6 +122,7 @@ public void onSuccessfulVerification() {
ConnectJobRecord job = ConnectManager.getActiveJob();
ConnectAppRecord appToLaunch = getLearnApp ? job.getLearnAppInfo() : job.getDeliveryAppInfo();
ConnectManager.launchApp(getContext(), getLearnApp, appToLaunch.getAppId());
+ getActivity().finish();
}
else {
//Go to learn/deliver progress
diff --git a/app/src/org/commcare/fragments/connect/ConnectJobIntroFragment.java b/app/src/org/commcare/fragments/connect/ConnectJobIntroFragment.java
index 03c5a74204..133665affd 100644
--- a/app/src/org/commcare/fragments/connect/ConnectJobIntroFragment.java
+++ b/app/src/org/commcare/fragments/connect/ConnectJobIntroFragment.java
@@ -34,12 +34,15 @@
* @author dviggiano
*/
public class ConnectJobIntroFragment extends Fragment {
+ private boolean showLaunchButton;
public ConnectJobIntroFragment() {
// Required empty public constructor
}
- public static ConnectJobIntroFragment newInstance() {
- return new ConnectJobIntroFragment();
+ public static ConnectJobIntroFragment newInstance(boolean showLaunchButton) {
+ ConnectJobIntroFragment fragment = new ConnectJobIntroFragment();
+ fragment.showLaunchButton = showLaunchButton;
+ return fragment;
}
@Override
@@ -83,45 +86,48 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
final boolean appInstalled = ConnectManager.isAppInstalled(job.getLearnAppInfo().getAppId());
Button button = view.findViewById(R.id.connect_job_intro_start_button);
- button.setText(getString(appInstalled ? R.string.connect_job_go_to_learn_app : R.string.connect_job_download_learn_app));
- button.setOnClickListener(v -> {
- //First, need to tell Connect we're starting learning so it can create a user on HQ
- ApiConnect.startLearnApp(getContext(), job.getJobId(), new IApiCallback() {
- @Override
- public void processSuccess(int responseCode, InputStream responseData) {
- reportApiCall(true);
- //TODO: Expecting to eventually get HQ username from server here
- NavDirections directions;
- if (appInstalled) {
- directions = ConnectJobIntroFragmentDirections.actionConnectJobIntroFragmentToConnectJobLearningProgressFragment();
- } else {
- String title = getString(R.string.connect_downloading_learn);
- directions = ConnectJobIntroFragmentDirections.actionConnectJobIntroFragmentToConnectDownloadingFragment(title, true, false);
+ button.setVisibility(showLaunchButton ? View.VISIBLE : View.GONE);
+ if(showLaunchButton) {
+ button.setText(getString(appInstalled ? R.string.connect_job_go_to_learn_app : R.string.connect_job_download_learn_app));
+ button.setOnClickListener(v -> {
+ //First, need to tell Connect we're starting learning so it can create a user on HQ
+ ApiConnect.startLearnApp(getContext(), job.getJobId(), new IApiCallback() {
+ @Override
+ public void processSuccess(int responseCode, InputStream responseData) {
+ reportApiCall(true);
+ //TODO: Expecting to eventually get HQ username from server here
+ NavDirections directions;
+ if (appInstalled) {
+ directions = ConnectJobIntroFragmentDirections.actionConnectJobIntroFragmentToConnectJobLearningProgressFragment();
+ } else {
+ String title = getString(R.string.connect_downloading_learn);
+ directions = ConnectJobIntroFragmentDirections.actionConnectJobIntroFragmentToConnectDownloadingFragment(title, true, false);
+ }
+
+ Navigation.findNavController(button).navigate(directions);
}
- Navigation.findNavController(button).navigate(directions);
- }
-
- @Override
- public void processFailure(int responseCode, IOException e) {
- Toast.makeText(getContext(), "Connect: error starting learning", Toast.LENGTH_SHORT).show();
- reportApiCall(false);
- //TODO: Log the message from the server
- }
-
- @Override
- public void processNetworkFailure() {
- ConnectNetworkHelper.showNetworkError(getContext());
- reportApiCall(false);
- }
-
- @Override
- public void processOldApiError() {
- ConnectNetworkHelper.showOutdatedApiError(getContext());
- reportApiCall(false);
- }
+ @Override
+ public void processFailure(int responseCode, IOException e) {
+ Toast.makeText(getContext(), "Connect: error starting learning", Toast.LENGTH_SHORT).show();
+ reportApiCall(false);
+ //TODO: Log the message from the server
+ }
+
+ @Override
+ public void processNetworkFailure() {
+ ConnectNetworkHelper.showNetworkError(getContext());
+ reportApiCall(false);
+ }
+
+ @Override
+ public void processOldApiError() {
+ ConnectNetworkHelper.showOutdatedApiError(getContext());
+ reportApiCall(false);
+ }
+ });
});
- });
+ }
return view;
}
diff --git a/app/src/org/commcare/fragments/connect/ConnectJobsAvailableListFragment.java b/app/src/org/commcare/fragments/connect/ConnectJobsAvailableListFragment.java
index 30272dfa6c..faed6f7ef2 100644
--- a/app/src/org/commcare/fragments/connect/ConnectJobsAvailableListFragment.java
+++ b/app/src/org/commcare/fragments/connect/ConnectJobsAvailableListFragment.java
@@ -5,6 +5,7 @@
import android.view.View;
import android.view.ViewGroup;
+import org.commcare.activities.connect.IConnectAppLauncher;
import org.commcare.adapters.ConnectJobAdapter;
import org.commcare.dalvik.R;
@@ -20,12 +21,15 @@
*/
public class ConnectJobsAvailableListFragment extends Fragment {
private ConnectJobAdapter adapter;
+ private IConnectAppLauncher launcher;
public ConnectJobsAvailableListFragment() {
// Required empty public constructor
}
- public static ConnectJobsAvailableListFragment newInstance() {
- return new ConnectJobsAvailableListFragment();
+ public static ConnectJobsAvailableListFragment newInstance(IConnectAppLauncher appLauncher) {
+ ConnectJobsAvailableListFragment fragment = new ConnectJobsAvailableListFragment();
+ fragment.launcher = appLauncher;
+ return fragment;
}
@Override
@@ -45,7 +49,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), linearLayoutManager.getOrientation()));
- adapter = new ConnectJobAdapter(true);
+ adapter = new ConnectJobAdapter(true, launcher);
recyclerView.setAdapter(adapter);
return view;
diff --git a/app/src/org/commcare/fragments/connect/ConnectJobsListsFragment.java b/app/src/org/commcare/fragments/connect/ConnectJobsListsFragment.java
index 2ff42d7719..66def3afd7 100644
--- a/app/src/org/commcare/fragments/connect/ConnectJobsListsFragment.java
+++ b/app/src/org/commcare/fragments/connect/ConnectJobsListsFragment.java
@@ -21,6 +21,7 @@
import org.commcare.activities.CommCareActivity;
import org.commcare.activities.connect.ConnectDatabaseHelper;
import org.commcare.activities.connect.ConnectManager;
+import org.commcare.activities.connect.IConnectAppLauncher;
import org.commcare.connect.network.ConnectNetworkHelper;
import org.commcare.android.database.connect.models.ConnectJobRecord;
import org.commcare.CommCareApplication;
@@ -53,13 +54,16 @@ public class ConnectJobsListsFragment extends Fragment {
private ViewPager2 viewPager;
private ViewStateAdapter viewStateAdapter;
private TextView updateText;
+ private IConnectAppLauncher launcher;
public ConnectJobsListsFragment() {
// Required empty public constructor
}
- public static ConnectJobsListsFragment newInstance() {
- return new ConnectJobsListsFragment();
+ public static ConnectJobsListsFragment newInstance(IConnectAppLauncher appLauncher) {
+ ConnectJobsListsFragment fragment = new ConnectJobsListsFragment();
+ fragment.launcher = appLauncher;
+ return fragment;
}
@Override
@@ -85,7 +89,11 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
refreshButton.setOnClickListener(v -> refreshData());
viewPager = view.findViewById(R.id.jobs_view_pager);
- viewStateAdapter = new ViewStateAdapter(getChildFragmentManager(), getLifecycle());
+ viewStateAdapter = new ViewStateAdapter(getChildFragmentManager(), getLifecycle(), (appId, isLearning) -> {
+ //Launch app and finish this activity
+ ConnectManager.launchApp(getActivity(), isLearning, appId);
+ getActivity().finish();
+ });
viewPager.setAdapter(viewStateAdapter);
tabLayout = view.findViewById(R.id.connect_jobs_tabs);
@@ -217,20 +225,22 @@ private void chooseTab() {
private static class ViewStateAdapter extends FragmentStateAdapter {
static ConnectJobsAvailableListFragment availableFragment;
static ConnectJobsMyListFragment myFragment;
+ IConnectAppLauncher launcher;
- public ViewStateAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
+ public ViewStateAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle, IConnectAppLauncher appLauncher) {
super(fragmentManager, lifecycle);
+ launcher = appLauncher;
}
@NonNull
@Override
public Fragment createFragment(int position) {
if (position == 0) {
- availableFragment = ConnectJobsAvailableListFragment.newInstance();
+ availableFragment = ConnectJobsAvailableListFragment.newInstance(launcher);
return availableFragment;
}
- myFragment = ConnectJobsMyListFragment.newInstance();
+ myFragment = ConnectJobsMyListFragment.newInstance(launcher);
return myFragment;
}
diff --git a/app/src/org/commcare/fragments/connect/ConnectJobsMyListFragment.java b/app/src/org/commcare/fragments/connect/ConnectJobsMyListFragment.java
index 9ba8068830..3e30fe2386 100644
--- a/app/src/org/commcare/fragments/connect/ConnectJobsMyListFragment.java
+++ b/app/src/org/commcare/fragments/connect/ConnectJobsMyListFragment.java
@@ -5,8 +5,10 @@
import android.view.View;
import android.view.ViewGroup;
+import org.commcare.activities.connect.IConnectAppLauncher;
import org.commcare.adapters.ConnectJobAdapter;
import org.commcare.dalvik.R;
+import org.commcare.dalvik.databinding.FragmentConnectMyJobsListsBinding;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
@@ -20,13 +22,17 @@
*/
public class ConnectJobsMyListFragment extends Fragment {
private ConnectJobAdapter adapter;
+ private IConnectAppLauncher launcher;
public ConnectJobsMyListFragment() {
// Required empty public constructor
}
- public static ConnectJobsMyListFragment newInstance() {
- return new ConnectJobsMyListFragment();
+ public static ConnectJobsMyListFragment newInstance(IConnectAppLauncher appLauncher) {
+ ConnectJobsMyListFragment fragment = new ConnectJobsMyListFragment();
+ fragment.launcher = appLauncher;
+ return fragment;
+
}
@Override
@@ -47,7 +53,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
recyclerView.addItemDecoration(new DividerItemDecoration(getContext(), linearLayoutManager.getOrientation()));
- adapter = new ConnectJobAdapter(false);
+ adapter = new ConnectJobAdapter(false, launcher);
recyclerView.setAdapter(adapter);
return view;
diff --git a/app/src/org/commcare/fragments/connect/ConnectLearningProgressFragment.java b/app/src/org/commcare/fragments/connect/ConnectLearningProgressFragment.java
index ec7e755f1e..41212be73f 100644
--- a/app/src/org/commcare/fragments/connect/ConnectLearningProgressFragment.java
+++ b/app/src/org/commcare/fragments/connect/ConnectLearningProgressFragment.java
@@ -47,12 +47,15 @@
* @author dviggiano
*/
public class ConnectLearningProgressFragment extends Fragment {
+ boolean showAppLaunch;
public ConnectLearningProgressFragment() {
// Required empty public constructor
}
- public static ConnectLearningProgressFragment newInstance() {
- return new ConnectLearningProgressFragment();
+ public static ConnectLearningProgressFragment newInstance(boolean showAppLaunch) {
+ ConnectLearningProgressFragment fragment = new ConnectLearningProgressFragment();
+ fragment.showAppLaunch = showAppLaunch;
+ return fragment;
}
@Override
@@ -312,12 +315,13 @@ private void updateUi(View view) {
}
final Button reviewButton = view.findViewById(R.id.connect_learning_review_button);
- reviewButton.setVisibility(showReviewLearningButton ? View.VISIBLE : View.GONE);
+ reviewButton.setVisibility(showAppLaunch && showReviewLearningButton ? View.VISIBLE : View.GONE);
reviewButton.setText(R.string.connect_learn_review);
reviewButton.setOnClickListener(v -> {
NavDirections directions = null;
if(ConnectManager.isAppInstalled(job.getLearnAppInfo().getAppId())) {
ConnectManager.launchApp(getContext(), true, job.getLearnAppInfo().getAppId());
+ getActivity().finish();
} else {
String title = getString(R.string.connect_downloading_learn);
directions = ConnectLearningProgressFragmentDirections.actionConnectJobLearningProgressFragmentToConnectDownloadingFragment(title, true, true);
@@ -329,6 +333,7 @@ private void updateUi(View view) {
});
final Button button = view.findViewById(R.id.connect_learning_button);
+ button.setVisibility(showAppLaunch ? View.VISIBLE : View.GONE);
button.setText(buttonText);
button.setOnClickListener(v -> {
NavDirections directions = null;
@@ -336,6 +341,7 @@ private void updateUi(View view) {
directions = ConnectLearningProgressFragmentDirections.actionConnectJobLearningProgressFragmentToConnectJobDeliveryDetailsFragment();
} else if(ConnectManager.isAppInstalled(job.getLearnAppInfo().getAppId())) {
ConnectManager.launchApp(getContext(), true, job.getLearnAppInfo().getAppId());
+ getActivity().finish();
} else {
String title = getString(R.string.connect_downloading_learn);
directions = ConnectLearningProgressFragmentDirections.actionConnectJobLearningProgressFragmentToConnectDownloadingFragment(title, true, true);