/* * Copyright (C) 2016-2017 Stichting Akvo (Akvo Foundation) * * This file is part of Akvo Flow. * * Akvo Flow is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Akvo Flow is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Akvo Flow. If not, see <http://www.gnu.org/licenses/>. */ package org.akvo.flow.ui; import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.support.v7.app.AlertDialog; import org.akvo.flow.R; import org.akvo.flow.activity.AddUserActivity; import org.akvo.flow.activity.AppUpdateActivity; import org.akvo.flow.activity.FormActivity; import org.akvo.flow.activity.GeoshapeActivity; import org.akvo.flow.activity.MapActivity; import org.akvo.flow.activity.RecordActivity; import org.akvo.flow.activity.SignatureActivity; import org.akvo.flow.activity.TransmissionHistoryActivity; import org.akvo.flow.domain.SurveyGroup; import org.akvo.flow.domain.User; import org.akvo.flow.domain.apkupdate.ViewApkData; import org.akvo.flow.util.ConstantUtil; import org.akvo.flow.util.StringUtil; import static org.akvo.flow.util.ConstantUtil.REQUEST_ADD_USER; public class Navigator { //TODO: inject activity public Navigator() { } public void navigateToAppUpdate(@NonNull Context context, @NonNull ViewApkData data) { Intent i = new Intent(context, AppUpdateActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.putExtra(AppUpdateActivity.EXTRA_URL, data.getFileUrl()); i.putExtra(AppUpdateActivity.EXTRA_VERSION, data.getVersion()); String md5Checksum = data.getMd5Checksum(); if (StringUtil.isValid(md5Checksum)) { i.putExtra(AppUpdateActivity.EXTRA_CHECKSUM, md5Checksum); } context.startActivity(i); } public void navigateToAddUser(Activity activity) { activity.startActivityForResult(new Intent(activity, AddUserActivity.class), REQUEST_ADD_USER); } public void navigateToRecordActivity(Context context, String surveyedLocaleId, SurveyGroup mSurveyGroup) { // Display form list and history Intent intent = new Intent(context, RecordActivity.class); Bundle extras = new Bundle(); extras.putSerializable(RecordActivity.EXTRA_SURVEY_GROUP, mSurveyGroup); extras.putString(RecordActivity.EXTRA_RECORD_ID, surveyedLocaleId); intent.putExtras(extras); context.startActivity(intent); } public void navigateToFormActivity(Context context, String surveyedLocaleId, User user, String formId, long formInstanceId, boolean readOnly, SurveyGroup mSurveyGroup) { Intent i = new Intent(context, FormActivity.class); i.putExtra(ConstantUtil.USER_ID_KEY, user.getId()); i.putExtra(ConstantUtil.SURVEY_ID_KEY, formId); i.putExtra(ConstantUtil.SURVEY_GROUP, mSurveyGroup); i.putExtra(ConstantUtil.SURVEYED_LOCALE_ID, surveyedLocaleId); i.putExtra(ConstantUtil.RESPONDENT_ID_KEY, formInstanceId); i.putExtra(ConstantUtil.READONLY_KEY, readOnly); context.startActivity(i); } public void navigateToTakePhoto(@NonNull Activity activity, Uri uri) { Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, uri); activity.startActivityForResult(i, ConstantUtil.PHOTO_ACTIVITY_REQUEST); } public void navigateToTakeVideo(@NonNull Activity activity, Uri uri) { Intent i = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE); i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, uri); activity.startActivityForResult(i, ConstantUtil.VIDEO_ACTIVITY_REQUEST); } public void navigateToBarcodeScanner(@NonNull Activity activity) { Intent intent = new Intent(ConstantUtil.BARCODE_SCAN_INTENT); try { activity.startActivityForResult(intent, ConstantUtil.SCAN_ACTIVITY_REQUEST); } catch (ActivityNotFoundException ex) { displayAppNotFoundDialog(activity, R.string.barcodeerror); } } private void displayAppNotFoundDialog(@NonNull Activity activity, @StringRes int messageId) { AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setMessage(messageId); builder.setPositiveButton(R.string.okbutton, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); builder.show(); } public void navigateToExternalSource(@NonNull Activity activity, Bundle data, CharSequence title) { Intent intent = new Intent(ConstantUtil.EXTERNAL_SOURCE_ACTION); intent.putExtras(data); intent.setType(ConstantUtil.CADDISFLY_MIME); activity.startActivityForResult(Intent.createChooser(intent, title), ConstantUtil.EXTERNAL_SOURCE_REQUEST); } public void navigateToCaddisfly(@NonNull Activity activity, Bundle data, CharSequence title) { Intent intent = new Intent(ConstantUtil.CADDISFLY_ACTION); intent.putExtras(data); intent.setType(ConstantUtil.CADDISFLY_MIME); activity.startActivityForResult(Intent.createChooser(intent, title), ConstantUtil.CADDISFLY_REQUEST); } public void navigateToGeoShapeActivity(@NonNull Activity activity, @Nullable Bundle data) { Intent i = new Intent(activity, GeoshapeActivity.class); if (data != null) { i.putExtras(data); } activity.startActivityForResult(i, ConstantUtil.PLOTTING_REQUEST); } public void navigateToSignatureActivity(@NonNull Activity activity) { Intent i = new Intent(activity, SignatureActivity.class); activity.startActivityForResult(i, ConstantUtil.SIGNATURE_REQUEST); } public void navigateToMapActivity(@NonNull Context context, String recordId) { context.startActivity(new Intent(context, MapActivity.class) .putExtra(ConstantUtil.SURVEYED_LOCALE_ID, recordId)); } public void navigateToTransmissionActivity(Context context, long surveyInstanceId) { context.startActivity(new Intent(context, TransmissionHistoryActivity.class) .putExtra(ConstantUtil.RESPONDENT_ID_KEY, surveyInstanceId)); } public void navigateToLocationSettings(@NonNull Context context) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); PackageManager packageManager = context.getPackageManager(); if (intent.resolveActivity(packageManager) != null) { context.startActivity(intent); } else { navigateToSettings(context); } } /** * Fallback as Settings.ACTION_LOCATION_SOURCE_SETTINGS may not be available on some devices */ private void navigateToSettings(@NonNull Context context) { context.startActivity(new Intent(Settings.ACTION_SETTINGS)); } }