/* Swisscom Safe Connect Copyright (C) 2015 Swisscom This program 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. This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */ package com.swisscom.safeconnect.sharing; import android.content.Context; import android.content.Intent; import android.content.pm.LabeledIntent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.Parcelable; import com.swisscom.safeconnect.R; import com.swisscom.safeconnect.activity.BrowserChooserActivity; import java.util.ArrayList; import java.util.List; public abstract class Sharing { public static List<String> favoriteApps = new ArrayList<String>() {{ add("com.swisscom.io"); add("com.whatsapp"); }}; protected Context mContext; private String packageName = ""; protected abstract Intent shareWithBrowser(String text, String url); public abstract Intent getIntent(String text, String url); public Sharing(Context ctx, String packageName){ this.mContext = ctx; this.packageName = packageName; } protected Intent getBrowserIntent(String url, String name, int drawable){ Intent browserChooserIntent = new Intent(mContext, BrowserChooserActivity.class); browserChooserIntent.putExtra(BrowserChooserActivity.EXTRA_URI, url); LabeledIntent labeledIntent = new LabeledIntent(browserChooserIntent, this.packageName, name, drawable); return labeledIntent; } public static Intent getSharingApp(String packageName, String subject, String text, Context ctx){ Intent share = new Intent(android.content.Intent.ACTION_SEND); share.setType("text/plain"); PackageManager pm = ctx.getPackageManager(); List<ResolveInfo> resInfo = pm.queryIntentActivities(share, 0); if (!resInfo.isEmpty()){ for (ResolveInfo info : resInfo) { if (info.activityInfo.packageName.toLowerCase().equals(packageName)) { Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND); targetedShareIntent.setType("text/plain"); targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject); targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, text); targetedShareIntent.setPackage(packageName); return targetedShareIntent; } } } return null; } public static Intent getSharingIntent(String subject, String content){ Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("text/plain"); shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject); shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, content); return shareIntent; } public static Intent getSharingIntents(String subject, String content, Context ctx){ List<Intent> targetedShareIntents = new ArrayList<Intent>(); Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("text/plain"); List<ResolveInfo> resInfo = ctx.getPackageManager().queryIntentActivities(shareIntent, 0); if (!resInfo.isEmpty()){ for (ResolveInfo info : resInfo) { String packageName = info.activityInfo.packageName; if (favoriteApps.contains(packageName) || packageName.equals(FacebookSharing.PACKAGE_NAME) || packageName.equals(TwitterSharing.PACKAGE_NAME)) { continue; } Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND); targetedShareIntent.setType("text/plain"); targetedShareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject); targetedShareIntent.putExtra(android.content.Intent.EXTRA_TEXT, content); targetedShareIntent.setPackage(packageName); targetedShareIntents.add(targetedShareIntent); } Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(targetedShareIntents.size()-1), ctx.getString(R.string.share_with)); chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{})); LabeledIntent labeledIntent = new LabeledIntent(chooserIntent, chooserIntent.getPackage(), ctx.getString(R.string.share_more_apps), 0); return labeledIntent; } return null; } }