package net.osmand.core.samples.android.sample1; import android.app.Dialog; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.FragmentManager; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatDialogFragment; import android.view.View; public class InstallOsmandAppDialog extends AppCompatDialogFragment { private static final String TAG = "InstallOsmandAppDialog"; private static final String OSMAND_PLUS_PACKAGE_NAME = "net.osmand.plus"; private static final String OSMAND_PACKAGE_NAME = "net.osmand"; private static boolean processed = false; private static boolean shown = false; @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.install_osmand_title); builder.setNegativeButton(R.string.shared_string_cancel, null); builder.setPositiveButton(getString(R.string.restart_app), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); SampleUtils.doRestart(getActivity()); } }); View view = getActivity().getLayoutInflater().inflate(R.layout.install_osmand_dialog, null); view.findViewById(R.id.install_osmand_btn).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { boolean success = execOsmAndInstall("market://search?q=pname:"); if (!success) { success = execOsmAndInstall("https://play.google.com/store/apps/details?id="); } if (!success) { execOsmAndInstall("http://osmand.net/apps?id="); } } }); builder.setView(view); return builder.create(); } private boolean execOsmAndInstall(String prefix) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(prefix + OSMAND_PACKAGE_NAME)); try { getActivity().startActivity(intent); return true; } catch (ActivityNotFoundException e) { e.printStackTrace(); } return false; } public static boolean wasShown() { return shown; } public static boolean show(FragmentManager manager, Context ctx) { if (processed) { return false; } processed = true; if (!SampleUtils.isPackageInstalled(OSMAND_PACKAGE_NAME, ctx) && !SampleUtils.isPackageInstalled(OSMAND_PLUS_PACKAGE_NAME, ctx)) { new InstallOsmandAppDialog().show(manager, TAG); shown = true; } return shown; } }