package im.actor.sdk.controllers.share; import android.app.Activity; import android.app.AlertDialog; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.io.IOException; import java.util.ArrayList; import im.actor.core.entity.Peer; import im.actor.core.entity.PeerType; import im.actor.core.entity.content.AbsContent; import im.actor.sdk.ActorSDK; import im.actor.sdk.R; import im.actor.sdk.controllers.Intents; import im.actor.sdk.controllers.dialogs.DialogsFragment; import im.actor.sdk.controllers.dialogs.DialogsFragmentDelegate; import im.actor.sdk.controllers.BaseFragment; import im.actor.sdk.controllers.placeholder.GlobalPlaceholderFragment; import im.actor.sdk.controllers.search.GlobalSearchDelegate; import im.actor.sdk.controllers.search.GlobalSearchFragment; import im.actor.sdk.intents.ShareAction; import static im.actor.sdk.util.ActorSDKMessenger.messenger; import static im.actor.sdk.util.ActorSDKMessenger.users; public class ShareFragment extends BaseFragment implements DialogsFragmentDelegate, GlobalSearchDelegate { public static final String ARG_INTENT_ACTION = "intent_action"; public static final String ARG_INTENT_TYPE = "intent_type"; private ShareAction shareAction; public ShareFragment() { setRootFragment(true); setUnbindOnPause(true); setTitle(R.string.menu_share); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View res = inflater.inflate(R.layout.activity_root_content, container, false); Bundle args = getArguments(); String action = args.getString(ARG_INTENT_ACTION); if (action != null) { String type = args.getString(ARG_INTENT_TYPE); if (action.equals(Intent.ACTION_SEND)) { if ("text/plain".equals(type)) { shareAction = new ShareAction(args.getString(Intent.EXTRA_TEXT)); } else if (args.getParcelable(Intent.EXTRA_STREAM) != null) { ArrayList<String> s = new ArrayList<>(); s.add(args.getParcelable(Intent.EXTRA_STREAM).toString()); shareAction = new ShareAction(s); } else { // Unable to load getActivity().finish(); } } else if (action.equals(Intent.ACTION_SEND_MULTIPLE)) { ArrayList<Uri> imageUris = args.getParcelableArrayList(Intent.EXTRA_STREAM); ArrayList<String> s = new ArrayList<>(); if (imageUris != null) { for (Uri u : imageUris) { s.add(u.toString()); } } if (s.size() > 0) { shareAction = new ShareAction(s); } else { // Unable to load getActivity().finish(); } } else { // Unable to load getActivity().finish(); } } else { if (args.containsKey(Intents.EXTRA_SHARE_USER)) { shareAction = new ShareAction(args.getInt(Intents.EXTRA_SHARE_USER)); } else if (args.containsKey(Intents.EXTRA_FORWARD_TEXT)) { shareAction = new ShareAction( args.getString(Intents.EXTRA_FORWARD_TEXT), args.getString(Intents.EXTRA_FORWARD_TEXT_RAW)); } else if (args.containsKey(Intents.EXTRA_FORWARD_CONTENT)) { shareAction = new ShareAction(args.getByteArray(Intents.EXTRA_FORWARD_CONTENT)); } else { // Unable to load getActivity().finish(); } } if (savedInstanceState == null) { getChildFragmentManager().beginTransaction() .add(R.id.content, new DialogsFragment()) .add(R.id.search, new GlobalSearchFragment()) .add(R.id.placeholder, new GlobalPlaceholderFragment()) .commit(); } return res; } @Override public void onPeerClicked(Peer peer) { Activity activity = getActivity(); String name; if (peer.getPeerType() == PeerType.PRIVATE) { name = messenger().getUser(peer.getPeerId()).getName().get(); } else if (peer.getPeerType() == PeerType.GROUP) { name = messenger().getGroup(peer.getPeerId()).getName().get(); } else { activity.finish(); return; } new AlertDialog.Builder(getActivity()) .setMessage(getActivity().getString(R.string.confirm_share) + " " + name + "?") .setPositiveButton(R.string.dialog_ok, (dialog, which) -> { Intent intent = Intents.openDialog(peer, false, activity); if (shareAction.getForwardText() != null) { intent.putExtra(Intents.EXTRA_FORWARD_TEXT, shareAction.getForwardText()); } if (shareAction.getForwardTextRaw() != null) { intent.putExtra(Intents.EXTRA_FORWARD_TEXT_RAW, shareAction.getForwardTextRaw()); } if (shareAction.getForwardTextRaw() != null) { intent.putExtra(Intents.EXTRA_FORWARD_CONTENT, shareAction.getForwardTextRaw()); } if (shareAction.getText() != null) { messenger().sendMessage(peer, shareAction.getText()); } else if (shareAction.getUris().size() > 0) { for (String sendUri : shareAction.getUris()) { executeSilent(messenger().sendUri(peer, Uri.parse(sendUri), ActorSDK.sharedActor().getAppName())); } } else if (shareAction.getUserId() != null) { String userName = users().get(shareAction.getUserId()).getName().get(); String mentionTitle = "@".concat(userName); ArrayList<Integer> mention = new ArrayList<>(); mention.add(shareAction.getUserId()); messenger().sendMessage(peer, mentionTitle, "[".concat(mentionTitle).concat("](people://".concat(Integer.toString(shareAction.getUserId())).concat(")")), mention); } else if (shareAction.getDocContent() != null) { try { messenger().forwardContent(peer, AbsContent.parse(shareAction.getDocContent())); } catch (IOException e) { e.printStackTrace(); } } startActivity(intent); activity.finish(); shareAction = null; }) .setNegativeButton(R.string.dialog_cancel, (dialog, which) -> { dialog.dismiss(); }) .show(); } @Override public boolean onPeerLongClicked(Peer peer) { return false; } }