/*
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;
}
}