package com.linroid.sky31radio.ui.fragment;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.widget.ArrayAdapter;
import com.linroid.sky31radio.BuildConfig;
import com.linroid.sky31radio.R;
import com.linroid.sky31radio.model.Program;
import com.linroid.sky31radio.ui.base.InjectableActivity;
import com.linroid.sky31radio.utils.BitmapUtils;
import com.squareup.picasso.Picasso;
import com.squareup.picasso.Target;
import com.tencent.mm.sdk.modelmsg.SendMessageToWX;
import com.tencent.mm.sdk.modelmsg.WXMediaMessage;
import com.tencent.mm.sdk.modelmsg.WXMusicObject;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import javax.inject.Inject;
/**
* Created by linroid on 1/30/15.
*/
public class ShareFragment extends DialogFragment implements DialogInterface.OnClickListener {
public static final String ARG_PROGRAM = "program";
private Program sharingProgram;
@Inject
Picasso picasso;
public static ShareFragment shareProgram(Program program){
Bundle args = new Bundle();
args.putParcelable(ARG_PROGRAM, program);
ShareFragment fragment = new ShareFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle args = getArguments();
sharingProgram = args.getParcelable(ARG_PROGRAM);
InjectableActivity activity = (InjectableActivity) getActivity();
activity.inject(this);
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
ArrayAdapter<String> adapter = new ArrayAdapter<>(getActivity(),
android.R.layout.simple_list_item_1,
android.R.id.text1,
new String[]{"微信好友", "朋友圈", "其他地方"}
);
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity())
.setTitle(R.string.title_share_program)
.setAdapter(adapter, this);
return builder.create();
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which){
case 0:
shareToWechatFriends();
break;
case 1:
shareToWechatMoments();
break;
default:
shareOtherWay();
break;
}
}
/**
* 分享给微信好友
*/
private void shareToWechatFriends() {
this.sendRequestToWX(SendMessageToWX.Req.WXSceneSession);
}
/**
* 分享到微信朋友圈
*/
private void shareToWechatMoments() {
this.sendRequestToWX(SendMessageToWX.Req.WXSceneTimeline);
}
/**
* 分享到其他地方
*/
private void shareOtherWay() {
String text = getResources().getString(R.string.tpl_share_program,
getString(R.string.app_name),
sharingProgram.getTitle(),
BuildConfig.APP_DOWNLOAD_URL);
Intent targetIntent = new Intent(Intent.ACTION_SEND);
targetIntent.setType("text/plain");
targetIntent.putExtra(Intent.EXTRA_TEXT, text);
Intent intent = Intent.createChooser(targetIntent, getString(R.string.title_share_program));
startActivity(intent);
}
private void sendRequestToWX(final int scene){
picasso.load(sharingProgram.getThumbnail())
.into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
byte[] data = BitmapUtils.encodeToByteArray(bitmap);
this.sendRequest(data);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
this.sendRequest(null);
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
private void sendRequest(byte[] thumbData){
IWXAPI iwxapi = WXAPIFactory.createWXAPI(getActivity(), BuildConfig.WECHAT_APP_ID, true);
iwxapi.registerApp(BuildConfig.WECHAT_APP_ID);
WXMusicObject object = new WXMusicObject();
object.musicUrl = BuildConfig.APP_DOWNLOAD_URL;
object.musicDataUrl = sharingProgram.getAudio().getSrc();
object.musicLowBandUrl = sharingProgram.getThumbnail();
object.musicLowBandDataUrl = sharingProgram.getThumbnail();
WXMediaMessage message = new WXMediaMessage();
message.mediaObject = object;
message.title = sharingProgram.getTitle();
message.description = getString(R.string.tpl_wx_share_description,
getString(R.string.app_name),
sharingProgram.getAuthor());
message.thumbData = thumbData;
SendMessageToWX.Req request = new SendMessageToWX.Req();
request.message = message;
request.transaction = String.valueOf(System.currentTimeMillis());
request.scene = scene;
iwxapi.sendReq(request);
iwxapi.unregisterApp();
}
});
}
}