package com.ushareit.playit.widget;
import android.app.Dialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.ushareit.analytics.UIAnalyticsContent;
import com.ushareit.playit.R;
import com.ushareit.playit.data.VideoDetailItem;
import com.ushareit.playit.utils.ScreenUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ShareDialog extends DialogFragment {
private RecyclerView mRecyclerView;
private ShareAdapter mAdapter;
private Context mContext;
public ShareDialog(Context context) {
super();
mContext = context;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_TITLE, android.R.style.Theme_Translucent);
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
Window window = dialog.getWindow();
window.setWindowAnimations(R.style.ShareDialogAnimation);
return dialog;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_view_share, container, false);
mRecyclerView = (RecyclerView) view.findViewById(R.id.share_view_recycle);
View contentView = view.findViewById(R.id.share_view_content);
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) contentView.getLayoutParams();
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
if (ScreenUtils.isScreenLand(mContext)) {
lp.topMargin = mContext.getResources().getDimensionPixelSize(R.dimen.common_60);
mRecyclerView.setLayoutManager(new GridLayoutManager(mContext, 5));
} else {
lp.topMargin = mContext.getResources().getDimensionPixelSize(R.dimen.common_220);
mRecyclerView.setLayoutManager(new GridLayoutManager(mContext, 3));
}
contentView.setLayoutParams(lp);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
initData();
return view;
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
dismiss();
}
private void initData() {
try {
mAdapter = new ShareAdapter(mContext, getShareAppList());
mRecyclerView.setAdapter(mAdapter);
mAdapter.setOnItemClickListener(new ShareAdapter.onItemClickListener() {
@Override
public void onShareAppItemClickListener(int position, String appPackageName) {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
InviteAppInfo appInfo = mAdapter.getItem(position);
shareIntent.setComponent(new ComponentName(appInfo.getAppPkgName(), appInfo.getAppLauncherClassName()));
shareIntent.setType("video/*");
shareIntent.putExtra(Intent.EXTRA_TEXT, "this is test")
shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(file.getPath())));
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
mContext.startActivity(shareIntent);
dismiss();
}
});
} catch (Exception e) {
}
}
private List<InviteAppInfo> getShareAppList() {
List<InviteAppInfo> shareAppInfos = new ArrayList<>();
PackageManager packageManager = mContext.getPackageManager();
List<ResolveInfo> resolveInfos = getShareApps(packageManager);
if (resolveInfos == null) {
return null;
} else {
for (ResolveInfo resolveInfo : resolveInfos) {
InviteAppInfo appInfo = new InviteAppInfo();
appInfo.setAppPkgName(resolveInfo.activityInfo.packageName);
appInfo.setAppLauncherClassName(resolveInfo.activityInfo.name);
appInfo.setAppName(resolveInfo.loadLabel(packageManager).toString());
appInfo.setAppIcon(resolveInfo.loadIcon(packageManager));
shareAppInfos.add(appInfo);
}
}
return shareAppInfos;
}
private List<ResolveInfo> getShareApps(PackageManager packageManager) {
List<ResolveInfo> mApps;
Intent intent = new Intent(Intent.ACTION_SEND);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setType("video/*");
mApps = packageManager.queryIntentActivities(intent, PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);
return mApps;
}
public int getShareAppCount() {
if (getShareAppList() != null)
return getShareAppList().size();
else
return 0;
}
private class InviteAppInfo {
private String appPkgName;
private Drawable appIcon;
private String appName;
private String appLauncherClassName;
private void setAppPkgName(String name) {
appPkgName = name;
}
private void setAppIcon(Drawable drawable) {
appIcon = drawable;
}
private void setAppName(String name) {
appName = name;
}
private void setAppLauncherClassName(String name) {
appLauncherClassName = name;
}
private String getAppPkgName() {
return appPkgName;
}
private Drawable getAppIcon() {
return appIcon;
}
private String getAppName() {
return appName;
}
private String getAppLauncherClassName() {
return appLauncherClassName;
}
}
private static class ShareAdapter extends RecyclerView.Adapter<ShareAdapter.InviteViewHolder> {
private Context mContext;
private List<InviteAppInfo> mShareAppInfos;
private onItemClickListener mOnItemClickListener;
private interface onItemClickListener {
void onShareAppItemClickListener(int position, String appPackageName);
}
private ShareAdapter(Context context, List<InviteAppInfo> shareAppInfos) {
mContext = context;
this.mShareAppInfos = shareAppInfos;
}
private InviteAppInfo getItem(int position) {
return mShareAppInfos.get(position);
}
private void setOnItemClickListener(onItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
@Override
public InviteViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new InviteViewHolder(LayoutInflater.from(mContext).inflate(R.layout.dialog_view_share_item, parent, false));
}
@Override
public v