package com.jdroid.android.debug; import android.app.Activity; import android.content.Intent; import android.os.Environment; import android.preference.Preference; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceGroup; import android.support.v4.app.ShareCompat; import com.jdroid.android.R; import com.jdroid.android.application.AbstractApplication; import com.jdroid.android.permission.PermissionHelper; import com.jdroid.android.utils.AppUtils; import com.jdroid.android.utils.ExternalAppsUtils; import com.jdroid.java.collections.Lists; import com.jdroid.java.exception.UnexpectedException; import com.jdroid.java.utils.FileUtils; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.List; public class UriMapperPrefsAppender extends PreferencesAppender { private Integer htmlRawId; public UriMapperPrefsAppender(Integer htmlRawId) { this.htmlRawId = htmlRawId; } public UriMapperPrefsAppender() { this(null); } @Override public int getNameResId() { return R.string.jdroid_uriMapper; } @Override public void initPreferences(final Activity activity, PreferenceGroup preferenceGroup) { if (htmlRawId == null) { htmlRawId = activity.getResources().getIdentifier("url_samples", "raw", activity.getPackageName()); } Preference preference = new Preference(activity); preference.setTitle(R.string.jdroid_downloadUrlSample); preference.setSummary(R.string.jdroid_downloadUrlSample); preference.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { // TODO To make it work on Android N, read this https://medium.com/google-developers/sharing-content-between-android-apps-2e6db9d1368b#.aauyfutg4 try { File dir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); dir.mkdirs(); InputStream openInputStream = activity.getResources().openRawResource(htmlRawId); File file = new File(dir, AppUtils.getApplicationId() + "_url_samples.html"); FileUtils.copyStream(openInputStream, file); openInputStream.close(); ExternalAppsUtils.openOnBrowser(activity, file); } catch (IOException e) { throw new UnexpectedException(e); } return true; } }); preferenceGroup.addPreference(preference); preference = new Preference(activity); preference.setTitle(R.string.jdroid_emailUrlSample); preference.setSummary(R.string.jdroid_emailUrlSample); preference.setOnPreferenceClickListener(new OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { StringBuilder builder = new StringBuilder(); for (String each : AbstractApplication.get().getDebugContext().getUrlsToTest()) { builder.append("<h4><a href=\""); builder.append(each); builder.append("\" target=\"_blank\">"); builder.append(each); builder.append("</a></h4>"); } Intent shareIntent = ShareCompat.IntentBuilder.from(activity) .setType("text/html") .setSubject(AppUtils.getApplicationName() + " urls samples") .setHtmlText(builder.toString()) .getIntent(); if (shareIntent.resolveActivity(activity.getPackageManager()) != null) { activity.startActivity(shareIntent); } return true; } }); preferenceGroup.addPreference(preference); } @Override public List<String> getRequiredPermissions() { return Lists.newArrayList(PermissionHelper.WRITE_EXTERNAL_STORAGE_PERMISSION); } }