package im.actor.sdk.controllers.group;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import im.actor.core.viewmodel.Command;
import im.actor.core.viewmodel.CommandCallback;
import im.actor.sdk.ActorSDK;
import im.actor.sdk.R;
import im.actor.sdk.controllers.BaseFragment;
import im.actor.sdk.view.adapters.HolderAdapter;
import im.actor.sdk.view.adapters.ViewHolder;
import static im.actor.sdk.util.ActorSDKMessenger.messenger;
public class InviteLinkFragment extends BaseFragment {
private static final String EXTRA_GROUP_ID = "GROUP_ID";
private int chatId;
private ListView listView;
private InviteLincActionsAdapter adapter;
private String link;
private TextView emptyView;
public static InviteLinkFragment create(int gid) {
InviteLinkFragment res = new InviteLinkFragment();
Bundle arguments = new Bundle();
arguments.putInt(EXTRA_GROUP_ID, gid);
res.setArguments(arguments);
return res;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
chatId = getArguments().getInt(EXTRA_GROUP_ID);
Command<String> cmd = messenger().requestInviteLink(chatId);
if (cmd != null) cmd.start(new CommandCallback<String>() {
@Override
public void onResult(String res) {
link = res;
adapter.notifyDataSetChanged();
hideView(emptyView);
showView(listView);
}
@Override
public void onError(Exception e) {
Toast.makeText(getActivity(), getString(R.string.invite_link_error_get_link), Toast.LENGTH_SHORT).show();
adapter.notifyDataSetChanged();
}
});
final ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
View res = inflater.inflate(R.layout.fragment_list, container, false);
res.setBackgroundColor(ActorSDK.sharedActor().style.getBackyardBackgroundColor());
listView = (ListView) res.findViewById(R.id.listView);
listView.setBackgroundColor(ActorSDK.sharedActor().style.getMainBackgroundColor());
emptyView = (TextView) res.findViewById(R.id.emptyView);
emptyView.setText(getString(R.string.invite_link_empty_view));
emptyView.setTextColor(ActorSDK.sharedActor().style.getTextSecondaryColor());
adapter = new InviteLincActionsAdapter(getActivity());
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (link != null && !link.isEmpty()) {
switch (position) {
case 0:
//Link itself
clipboard.setPrimaryClip(ClipData.newPlainText(null, link));
Toast.makeText(getActivity(), getString(R.string.invite_link_copied), Toast.LENGTH_SHORT).show();
break;
case 1:
//Hint
break;
case 2:
//Copy
clipboard.setPrimaryClip(ClipData.newPlainText(null, link));
Toast.makeText(getActivity(), getString(R.string.invite_link_copied), Toast.LENGTH_SHORT).show();
break;
case 3:
//Revoke
new AlertDialog.Builder(getActivity())
.setMessage(R.string.alert_revoke_link_message)
.setNegativeButton(R.string.dialog_cancel, null)
.setPositiveButton(R.string.alert_revoke_link_yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface d, int which) {
execute(messenger().revokeInviteLink(chatId), R.string.invite_link_action_revoke, new CommandCallback<String>() {
@Override
public void onResult(String res) {
link = res;
adapter.notifyDataSetChanged();
}
@Override
public void onError(Exception e) {
Toast.makeText(getActivity(), getString(R.string.invite_link_error_revoke_link), Toast.LENGTH_SHORT).show();
}
});
}
})
.show();
break;
case 4:
//Share
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_TEXT, link);
Intent chooser = Intent.createChooser(i, getString(R.string.invite_link_chooser_title));
if (i.resolveActivity(getActivity().getPackageManager()) != null) {
startActivity(chooser);
}
break;
}
}
}
});
View footer = inflater.inflate(R.layout.fragment_link_item_footer, listView, false);
footer.setBackgroundColor(ActorSDK.sharedActor().style.getBackyardBackgroundColor());
listView.addFooterView(footer, null, false);
return res;
}
class InviteLincActionsAdapter extends HolderAdapter<Void> {
protected InviteLincActionsAdapter(Context context) {
super(context);
}
@Override
public Void getItem(int position) {
return null;
}
@Override
public int getCount() {
return 5;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
protected ViewHolder<Void> createHolder(Void obj) {
return new ActionHolder();
}
}
private class ActionHolder extends ViewHolder<Void> {
TextView action;
FrameLayout container;
View topShadow;
View botShadow;
View divider;
@Override
public View init(Void data, ViewGroup viewGroup, Context context) {
View res = ((Activity) context).getLayoutInflater().inflate(R.layout.fragment_invite_link_item, viewGroup, false);
action = (TextView) res.findViewById(R.id.action);
action.setTextColor(ActorSDK.sharedActor().style.getTextPrimaryColor());
container = (FrameLayout) res.findViewById(R.id.linksActionContainer);
topShadow = res.findViewById(R.id.top_shadow);
botShadow = res.findViewById(R.id.bot_shadow);
divider = res.findViewById(R.id.divider);
divider.setBackgroundColor(ActorSDK.sharedActor().style.getDividerColor());
return res;
}
@Override
public void bind(Void data, int position, Context context) {
switch (position) {
case 0:
action.setText(link);
break;
case 1:
action.setText(getString(R.string.invite_link_hint).replace("{appName}", ActorSDK.sharedActor().getAppName()));
break;
case 2:
action.setText(getString(R.string.invite_link_action_copy));
break;
case 3:
action.setText(getString(R.string.invite_link_action_revoke));
break;
case 4:
action.setText(getString(R.string.invite_link_action_share));
break;
}
//Hint styling
if (position == 1) {
container.setBackgroundColor(ActorSDK.sharedActor().style.getBackyardBackgroundColor());
topShadow.setVisibility(View.VISIBLE);
botShadow.setVisibility(View.VISIBLE);
divider.setVisibility(View.INVISIBLE);
action.setTextColor(ActorSDK.sharedActor().style.getTextHintColor());
action.setTextSize(14);
} else {
container.setBackgroundColor(Color.TRANSPARENT);
topShadow.setVisibility(View.INVISIBLE);
botShadow.setVisibility(View.INVISIBLE);
divider.setVisibility(View.VISIBLE);
action.setTextColor(ActorSDK.sharedActor().style.getTextPrimaryColor());
action.setTextSize(16);
}
}
}
}