Search in sources :

Example 1 with RecyclerListView

use of im.actor.sdk.view.adapters.RecyclerListView in project actor-platform by actorapp.

the class CallFragment method onCreateView.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    this.callId = getArguments().getLong("call_id");
    this.call = messenger().getCall(callId);
    if (call == null) {
        this.peer = Peer.user(myUid());
    } else {
        this.peer = call.getPeer();
    }
    manager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
    FrameLayout cont = (FrameLayout) inflater.inflate(R.layout.fragment_call, container, false);
    v = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE);
    CallBackgroundAvatarView backgroundAvatarView = (CallBackgroundAvatarView) cont.findViewById(R.id.background);
    //        animator = new CallAvatarLayerAnimator(cont.findViewById(R.id.layer),
    //                cont.findViewById(R.id.layer1),
    //                cont.findViewById(R.id.layer2),
    //                cont.findViewById(R.id.layer3),
    //                cont.findViewById(R.id.layer4)
    //                );
    layer1 = cont.findViewById(R.id.layer1);
    layer2 = cont.findViewById(R.id.layer2);
    layer3 = cont.findViewById(R.id.layer3);
    avatarLayers = new View[] { //                cont.findViewById(R.id.layer),
    layer1, layer2, layer3 };
    for (int i = 0; i < avatarLayers.length; i++) {
        View layer = avatarLayers[i];
        ((GradientDrawable) layer.getBackground()).setColor(Color.WHITE);
        ((GradientDrawable) layer.getBackground()).setAlpha(50);
    }
    endCallContainer = cont.findViewById(R.id.end_call_container);
    answerContainer = cont.findViewById(R.id.answer_container);
    ImageButton answer = (ImageButton) cont.findViewById(R.id.answer);
    answer.setOnClickListener(v1 -> onAnswer());
    ImageButton notAnswer = (ImageButton) cont.findViewById(R.id.notAnswer);
    endCall = (ImageButton) cont.findViewById(R.id.end_call);
    notAnswer.setOnClickListener(v1 -> doEndCall());
    endCall.setOnClickListener(v1 -> doEndCall());
    //
    //Avatar/Name bind
    //
    avatarView = (AvatarView) cont.findViewById(R.id.avatar);
    avatarView.init(Screen.dp(130), 50);
    nameTV = (TextView) cont.findViewById(R.id.name);
    nameTV.setTextColor(ActorSDK.sharedActor().style.getProfileTitleColor());
    if (peer.getPeerType() == PeerType.PRIVATE) {
        UserVM user = users().get(peer.getPeerId());
        avatarView.bind(user);
        backgroundAvatarView.bind(user);
        bind(nameTV, user.getName());
    } else if (peer.getPeerType() == PeerType.GROUP) {
        GroupVM g = groups().get(peer.getPeerId());
        avatarView.bind(g);
        backgroundAvatarView.bind(g);
        bind(nameTV, g.getName());
    }
    nameTV.setSelected(true);
    //
    // Members list
    //
    membersList = (RecyclerListView) cont.findViewById(R.id.members_list);
    if (call != null) {
        CallMembersAdapter membersAdapter = new CallMembersAdapter(getActivity(), call.getMembers());
        membersList.setAdapter(membersAdapter);
    }
    //
    // Members list/ avatar switch
    //
    View.OnClickListener listener = v1 -> switchAvatarMembers();
    avatarView.setOnClickListener(listener);
    //        cont.findViewById(R.id.background).setOnClickListener(listener);
    membersList.setOnItemClickListener((parent, view, position, id) -> switchAvatarMembers());
    statusTV = (TextView) cont.findViewById(R.id.status);
    //
    if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.VIBRATE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.MODIFY_AUDIO_SETTINGS) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WAKE_LOCK) != PackageManager.PERMISSION_GRANTED) {
        Log.d("Permissions", "call - no permission :c");
        CallFragment.this.requestPermissions(new String[] { Manifest.permission.RECORD_AUDIO, Manifest.permission.CAMERA, Manifest.permission.VIBRATE, Manifest.permission.MODIFY_AUDIO_SETTINGS, Manifest.permission.WAKE_LOCK }, PERMISSIONS_REQUEST_FOR_CALL);
    }
    audioManager = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);
    audioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL);
    speaker = (TintImageView) cont.findViewById(R.id.speaker);
    speaker.setResource(R.drawable.ic_volume_up_white_24dp);
    speakerTV = (TextView) cont.findViewById(R.id.speaker_tv);
    cont.findViewById(R.id.speaker_btn).setOnClickListener(v1 -> toggleSpeaker(speaker, speakerTV));
    checkSpeaker(speaker, speakerTV);
    muteCall = (TintImageView) cont.findViewById(R.id.mute);
    muteCallTv = (TextView) cont.findViewById(R.id.mute_tv);
    muteCall.setResource(R.drawable.ic_mic_off_white_24dp);
    cont.findViewById(R.id.mute_btn).setOnClickListener(v1 -> messenger().toggleCallMute(callId));
    videoIcon = (TintImageView) cont.findViewById(R.id.video);
    videoIcon.setResource(R.drawable.ic_videocam_white_24dp);
    videoTv = (TextView) cont.findViewById(R.id.video_tv);
    videoTv.setTextColor(getResources().getColor(R.color.picker_grey));
    videoIcon.setTint(getResources().getColor(R.color.picker_grey));
    cont.findViewById(R.id.video_btn).setOnClickListener(v1 -> messenger().toggleVideoEnabled(callId));
    final TintImageView back = (TintImageView) cont.findViewById(R.id.back);
    back.setResource(R.drawable.ic_message_white_24dp);
    cont.findViewById(R.id.back_btn).setOnClickListener(v1 -> getActivity().startActivity(Intents.openDialog(peer, false, getActivity())));
    final TintImageView add = (TintImageView) cont.findViewById(R.id.add);
    add.setResource(R.drawable.ic_person_add_white_24dp);
    TextView addTv = (TextView) cont.findViewById(R.id.add_user_tv);
    addTv.setTextColor(getResources().getColor(R.color.picker_grey));
    add.setTint(getResources().getColor(R.color.picker_grey));
    if (peer.getPeerType() == PeerType.PRIVATE) {
        eglContext = EglBase.create();
        remoteVideoView = (SurfaceViewRenderer) cont.findViewById(R.id.remote_renderer);
        localVideoView = new SurfaceViewRenderer(getActivity()) {

            private boolean aspectFixed = false;

            @Override
            public void renderFrame(VideoRenderer.I420Frame frame) {
                if (!aspectFixed) {
                    aspectFixed = true;
                    int maxWH = Screen.getWidth() / 3 - Screen.dp(20);
                    float scale = Math.min(maxWH / (float) frame.width, maxWH / (float) frame.height);
                    int destW = (int) (scale * frame.width);
                    int destH = (int) (scale * frame.height);
                    boolean turned = frame.rotationDegree % 90 % 2 == 0;
                    localVideoView.post(new Runnable() {

                        @Override
                        public void run() {
                            localVideoView.getLayoutParams().height = turned ? destW : destH;
                            localVideoView.getLayoutParams().width = turned ? destH : destW;
                        }
                    });
                }
                super.renderFrame(frame);
            }
        };
        localVideoView.setVisibility(View.INVISIBLE);
        localVideoView.setZOrderMediaOverlay(true);
        localVideoView.setOnTouchListener((v1, event) -> {
            switch(event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    dX = localVideoView.getX() - event.getRawX();
                    dY = localVideoView.getY() - event.getRawY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    localVideoView.animate().x(event.getRawX() + dX).y(event.getRawY() + dY).setDuration(0).start();
                default:
                    return false;
            }
            return true;
        });
        int margin = Screen.dp(20);
        int localVideoWidth = Screen.getWidth() / 3 - margin;
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(localVideoWidth, Math.round(localVideoWidth / 1.5f), Gravity.TOP | Gravity.LEFT);
        int statusBarHeight = 0;
        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            statusBarHeight = getResources().getDimensionPixelSize(resourceId);
        }
        params.setMargins(margin, margin + statusBarHeight, 0, 0);
        cont.addView(localVideoView, params);
    } else {
        if (call != null) {
            if (call.getIsVideoEnabled().get()) {
                messenger().toggleVideoEnabled(callId);
            }
        }
    }
    return cont;
}
Also used : BaseFragment(im.actor.sdk.controllers.BaseFragment) ImageButton(android.widget.ImageButton) Ringtone(android.media.Ringtone) PoisonPill(im.actor.runtime.actors.messages.PoisonPill) Bundle(android.os.Bundle) SurfaceViewRenderer(org.webrtc.SurfaceViewRenderer) PackageManager(android.content.pm.PackageManager) ActorSDKMessenger.groups(im.actor.sdk.util.ActorSDKMessenger.groups) Date(java.util.Date) ActorSDKMessenger.messenger(im.actor.sdk.util.ActorSDKMessenger.messenger) Uri(android.net.Uri) WindowManager(android.view.WindowManager) FrameLayout(android.widget.FrameLayout) PendingIntent(android.app.PendingIntent) Screen(im.actor.sdk.util.Screen) CallMember(im.actor.core.viewmodel.CallMember) Manifest(android.Manifest) PowerManager(android.os.PowerManager) RecyclerListView(im.actor.sdk.view.adapters.RecyclerListView) View(android.view.View) DateFormat(java.text.DateFormat) Intents(im.actor.sdk.controllers.Intents) NotificationManager(android.app.NotificationManager) TimeZone(java.util.TimeZone) ValueModel(im.actor.runtime.mvvm.ValueModel) ContextCompat(android.support.v4.content.ContextCompat) ViewGroup(android.view.ViewGroup) ActorBinder(im.actor.sdk.controllers.ActorBinder) TextView(android.widget.TextView) Peer(im.actor.core.entity.Peer) Props(im.actor.runtime.actors.Props) Notification(android.app.Notification) CallState(im.actor.core.viewmodel.CallState) ViewHolder(im.actor.sdk.view.adapters.ViewHolder) Context(android.content.Context) ActorSDKMessenger.myUid(im.actor.sdk.util.ActorSDKMessenger.myUid) AndroidVideoTrack(im.actor.runtime.android.webrtc.AndroidVideoTrack) TintImageView(im.actor.sdk.view.TintImageView) SimpleDateFormat(java.text.SimpleDateFormat) Intent(android.content.Intent) GroupVM(im.actor.core.viewmodel.GroupVM) AudioManager(android.media.AudioManager) MenuItem(android.view.MenuItem) ArrayList(java.util.ArrayList) CallVM(im.actor.core.viewmodel.CallVM) MotionEvent(android.view.MotionEvent) GradientDrawable(android.graphics.drawable.GradientDrawable) ActorSystem(im.actor.runtime.actors.ActorSystem) AvatarView(im.actor.sdk.view.avatar.AvatarView) ActorRef(im.actor.runtime.actors.ActorRef) HolderAdapter(im.actor.sdk.view.adapters.HolderAdapter) PeerType(im.actor.core.entity.PeerType) ActorSDK(im.actor.sdk.ActorSDK) TimerActor(im.actor.sdk.controllers.calls.view.TimerActor) VideoRenderer(org.webrtc.VideoRenderer) LayoutInflater(android.view.LayoutInflater) ActorSDKMessenger.users(im.actor.sdk.util.ActorSDKMessenger.users) Color(android.graphics.Color) Gravity(android.view.Gravity) UserVM(im.actor.core.viewmodel.UserVM) R(im.actor.sdk.R) CallBackgroundAvatarView(im.actor.sdk.view.avatar.CallBackgroundAvatarView) RingtoneManager(android.media.RingtoneManager) NotificationCompat(android.support.v4.app.NotificationCompat) EglBase(org.webrtc.EglBase) VideoTrack(org.webrtc.VideoTrack) Log(im.actor.runtime.Log) Vibrator(android.os.Vibrator) Activity(android.app.Activity) GroupVM(im.actor.core.viewmodel.GroupVM) VideoRenderer(org.webrtc.VideoRenderer) TintImageView(im.actor.sdk.view.TintImageView) CallBackgroundAvatarView(im.actor.sdk.view.avatar.CallBackgroundAvatarView) RecyclerListView(im.actor.sdk.view.adapters.RecyclerListView) View(android.view.View) TextView(android.widget.TextView) TintImageView(im.actor.sdk.view.TintImageView) AvatarView(im.actor.sdk.view.avatar.AvatarView) CallBackgroundAvatarView(im.actor.sdk.view.avatar.CallBackgroundAvatarView) GradientDrawable(android.graphics.drawable.GradientDrawable) ImageButton(android.widget.ImageButton) UserVM(im.actor.core.viewmodel.UserVM) SurfaceViewRenderer(org.webrtc.SurfaceViewRenderer) FrameLayout(android.widget.FrameLayout) TextView(android.widget.TextView)

Example 2 with RecyclerListView

use of im.actor.sdk.view.adapters.RecyclerListView in project actor-platform by actorapp.

the class MembersFragment method onCreateView.

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View res = inflater.inflate(R.layout.fragment_members, container, false);
    int groupId = getArguments().getInt("groupId");
    adapter = new MembersAdapter(getContext(), groupId);
    GroupVM groupVM = groups().get(groupId);
    RecyclerListView list = (RecyclerListView) res.findViewById(R.id.items);
    Boolean canInvite = groupVM.getIsCanInviteMembers().get();
    Boolean canInviteViaLink = groupVM.getIsCanInviteViaLink().get();
    if (canInvite || canInviteViaLink) {
        LinearLayout header = new LinearLayout(getActivity());
        list.addHeaderView(header);
        if (canInvite) {
            TextView addMmemberTV = new TextView(getContext());
            addMmemberTV.setBackgroundResource(R.drawable.selector);
            addMmemberTV.setTextSize(16);
            addMmemberTV.setPadding(Screen.dp(72), 0, 0, 0);
            addMmemberTV.setGravity(Gravity.CENTER_VERTICAL);
            addMmemberTV.setText(groupVM.getGroupType() == GroupType.CHANNEL ? R.string.channel_add_member : R.string.group_add_member);
            addMmemberTV.setTextColor(ActorSDK.sharedActor().style.getTextPrimaryColor());
            addMmemberTV.setOnClickListener(view -> {
                startActivity(new Intent(getActivity(), AddMemberActivity.class).putExtra(Intents.EXTRA_GROUP_ID, groupId));
            });
            header.addView(addMmemberTV, ViewGroup.LayoutParams.MATCH_PARENT, Screen.dp(58));
        }
        if (canInvite && canInviteViaLink) {
            header.addView(new DividerView(getActivity()), ViewGroup.LayoutParams.MATCH_PARENT, 1);
        }
        if (canInviteViaLink) {
            TextView shareLinkTV = new TextView(getContext());
            shareLinkTV.setBackgroundResource(R.drawable.selector);
            shareLinkTV.setTextSize(16);
            shareLinkTV.setPadding(Screen.dp(72), 0, 0, 0);
            shareLinkTV.setGravity(Gravity.CENTER_VERTICAL);
            shareLinkTV.setTextColor(ActorSDK.sharedActor().style.getTextPrimaryColor());
            shareLinkTV.setText(R.string.invite_link_action_share);
            shareLinkTV.setOnClickListener(view -> Intents.inviteLink(groupId, getActivity()));
            header.addView(shareLinkTV, ViewGroup.LayoutParams.MATCH_PARENT, Screen.dp(58));
        }
    }
    footer = new LinearLayout(getActivity());
    footer.setVisibility(View.INVISIBLE);
    list.addFooterView(footer);
    CircularProgressBar botProgressView = new CircularProgressBar(getActivity());
    int padding = Screen.dp(16);
    botProgressView.setPadding(padding, padding, padding, padding);
    botProgressView.setIndeterminate(true);
    FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(Screen.dp(72), Screen.dp(72));
    params.gravity = Gravity.CENTER;
    FrameLayout cont = new FrameLayout(getActivity());
    cont.addView(botProgressView, params);
    footer.addView(cont, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    list.setAdapter(adapter);
    list.setOnItemClickListener((parent, view, position, id) -> {
        Object item = parent.getItemAtPosition(position);
        if (item != null && item instanceof GroupMember) {
            GroupMember groupMember = (GroupMember) item;
            if (groupMember.getUid() != myUid()) {
                UserVM userVM = users().get(groupMember.getUid());
                if (userVM != null) {
                    startActivity(Intents.openPrivateDialog(userVM.getId(), true, getActivity()));
                }
            }
        }
    });
    list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
            Object item = adapterView.getItemAtPosition(i);
            if (item != null && item instanceof GroupMember) {
                GroupMember groupMember = (GroupMember) item;
                if (groupMember.getUid() != myUid()) {
                    UserVM userVM = users().get(groupMember.getUid());
                    if (userVM != null) {
                        adapter.onMemberClick(groupVM, userVM, groupMember.isAdministrator(), groupMember.getInviterUid() == myUid(), (BaseActivity) getActivity());
                        return true;
                    }
                }
            }
            return false;
        }
    });
    progressView = (CircularProgressBar) res.findViewById(R.id.loadingProgress);
    progressView.setIndeterminate(true);
    return res;
}
Also used : MembersAdapter(im.actor.sdk.controllers.group.view.MembersAdapter) GroupMember(im.actor.core.entity.GroupMember) GroupVM(im.actor.core.viewmodel.GroupVM) DividerView(im.actor.sdk.view.DividerView) CircularProgressBar(fr.castorflex.android.circularprogressbar.CircularProgressBar) Intent(android.content.Intent) RecyclerListView(im.actor.sdk.view.adapters.RecyclerListView) RecyclerListView(im.actor.sdk.view.adapters.RecyclerListView) View(android.view.View) AdapterView(android.widget.AdapterView) DividerView(im.actor.sdk.view.DividerView) TextView(android.widget.TextView) UserVM(im.actor.core.viewmodel.UserVM) FrameLayout(android.widget.FrameLayout) BaseActivity(im.actor.sdk.controllers.activity.BaseActivity) TextView(android.widget.TextView) AdapterView(android.widget.AdapterView) LinearLayout(android.widget.LinearLayout) Nullable(android.support.annotation.Nullable)

Example 3 with RecyclerListView

use of im.actor.sdk.view.adapters.RecyclerListView in project actor-platform by actorapp.

the class InviteFragment method onCreateView.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View res = inflater.inflate(R.layout.fragment_list, container, false);
    res.findViewById(R.id.listView).setBackgroundColor(ActorSDK.sharedActor().style.getMainBackgroundColor());
    emptyText = (TextView) res.findViewById(R.id.emptyView);
    emptyText.setTextColor(ActorSDK.sharedActor().style.getTextSecondaryColor());
    emptyText.setText(R.string.progress_common);
    collection = (RecyclerListView) res.findViewById(R.id.listView);
    AndroidPhoneBook phoneBookLoader = new AndroidPhoneBook();
    phoneBookLoader.useDelay(false);
    res.setBackgroundColor(ActorSDK.sharedActor().style.getMainBackgroundColor());
    phoneBookLoader.loadPhoneBook(contacts -> {
        if (contacts.size() > 0) {
            getActivity().runOnUiThread(() -> {
                InviteFragment.this.contacts = contacts;
                adapter = new InviteAdapter(getActivity(), contacts, new OnItemClickedListener<PhoneBookContact>() {

                    @Override
                    public void onClicked(PhoneBookContact item) {
                        onItemClicked(item);
                    }

                    @Override
                    public boolean onLongClicked(PhoneBookContact item) {
                        return false;
                    }
                });
                collection.setAdapter(adapter);
                hideView(emptyText);
                showView(collection);
                showMenu();
            });
        }
    });
    return res;
}
Also used : PhoneBookContact(im.actor.core.entity.PhoneBookContact) OnItemClickedListener(im.actor.sdk.view.adapters.OnItemClickedListener) TextView(android.widget.TextView) RecyclerListView(im.actor.sdk.view.adapters.RecyclerListView) View(android.view.View) AndroidPhoneBook(im.actor.sdk.core.AndroidPhoneBook)

Example 4 with RecyclerListView

use of im.actor.sdk.view.adapters.RecyclerListView in project actor-platform by actorapp.

the class GroupInfoFragment method onCreateView.

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    chatId = getArguments().getInt(EXTRA_CHAT_ID);
    groupVM = groups().get(chatId);
    View res = inflater.inflate(R.layout.fragment_group, container, false);
    listView = (RecyclerListView) res.findViewById(R.id.groupList);
    notMemberView = res.findViewById(R.id.notMember);
    res.setBackgroundColor(style.getMainBackgroundColor());
    // listView.setBackgroundColor(style.getMainBackgroundColor());
    notMemberView.setBackgroundColor(style.getMainBackgroundColor());
    ((TextView) notMemberView.findViewById(R.id.not_member_text)).setTextColor(style.getTextPrimaryColor());
    //
    // Header
    //
    // Views
    View header = inflater.inflate(R.layout.fragment_group_header, listView, false);
    TextView title = (TextView) header.findViewById(R.id.title);
    TextView subtitle = (TextView) header.findViewById(R.id.subtitle);
    avatarView = (AvatarView) header.findViewById(R.id.avatar);
    avatarView.init(Screen.dp(48), 22);
    TextView aboutTV = (TextView) header.findViewById(R.id.about);
    View shortNameCont = header.findViewById(R.id.shortNameContainer);
    TextView shortNameView = (TextView) header.findViewById(R.id.shortName);
    TextView shortLinkView = (TextView) header.findViewById(R.id.shortNameLink);
    TextView addMember = (TextView) header.findViewById(R.id.addMemberAction);
    addMember.setText(groupVM.getGroupType() == GroupType.CHANNEL ? R.string.channel_add_member : R.string.group_add_member);
    TextView members = (TextView) header.findViewById(R.id.viewMembersAction);
    TextView leaveAction = (TextView) header.findViewById(R.id.leaveAction);
    TextView administrationAction = (TextView) header.findViewById(R.id.administrationAction);
    View descriptionContainer = header.findViewById(R.id.descriptionContainer);
    SwitchCompat isNotificationsEnabled = (SwitchCompat) header.findViewById(R.id.enableNotifications);
    // Styling
    // ((TextView) header.findViewById(R.id.about_hint)).setTextColor(style.getTextSecondaryColor());
    header.setBackgroundColor(style.getMainBackgroundColor());
    header.findViewById(R.id.avatarContainer).setBackgroundColor(style.getToolBarColor());
    title.setTextColor(style.getProfileTitleColor());
    subtitle.setTextColor(style.getProfileSubtitleColor());
    aboutTV.setTextColor(style.getTextPrimaryColor());
    shortNameView.setTextColor(style.getTextPrimaryColor());
    shortLinkView.setTextColor(style.getTextSecondaryColor());
    // settingsHeaderText.setTextColor(style.getSettingsCategoryTextColor());
    ((TintImageView) header.findViewById(R.id.settings_notification_icon)).setTint(style.getSettingsIconColor());
    ((TintImageView) header.findViewById(R.id.settings_about_icon)).setTint(style.getSettingsIconColor());
    ((TextView) header.findViewById(R.id.settings_notifications_title)).setTextColor(style.getTextPrimaryColor());
    ((TextView) header.findViewById(R.id.addMemberAction)).setTextColor(style.getTextPrimaryColor());
    members.setTextColor(style.getTextPrimaryColor());
    administrationAction.setTextColor(style.getTextPrimaryColor());
    leaveAction.setTextColor(style.getTextDangerColor());
    if (groupVM.getGroupType() == GroupType.CHANNEL) {
        leaveAction.setText(R.string.group_leave_channel);
    } else {
        leaveAction.setText(R.string.group_leave);
    }
    header.findViewById(R.id.after_settings_divider).setBackgroundColor(style.getBackyardBackgroundColor());
    //
    // Header
    //
    avatarView.bind(groupVM.getAvatar().get(), groupVM.getName().get(), groupVM.getId());
    avatarView.setOnClickListener(view -> {
        if (groupVM.getAvatar().get() != null) {
            startActivity(ViewAvatarActivity.viewGroupAvatar(chatId, getActivity()));
        }
    });
    bind(groupVM.getName(), name -> {
        title.setText(name);
    });
    bind(groupVM.getMembersCount(), val -> {
        subtitle.setText(messenger().getFormatter().formatGroupMembers(val));
    });
    // About
    bind(groupVM.getAbout(), (about) -> {
        aboutTV.setText(about);
        aboutTV.setVisibility(about != null ? View.VISIBLE : View.GONE);
    });
    bind(groupVM.getShortName(), shortName -> {
        if (shortName != null) {
            shortNameView.setText("@" + shortName);
            String prefix = ActorSDK.sharedActor().getGroupInvitePrefix();
            if (prefix != null) {
                shortLinkView.setText(prefix + shortName);
                shortLinkView.setVisibility(View.VISIBLE);
            } else {
                shortLinkView.setVisibility(View.GONE);
            }
        }
        shortNameCont.setVisibility(shortName != null ? View.VISIBLE : View.GONE);
    });
    final ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
    shortNameCont.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            String link = shortLinkView.getText().toString();
            clipboard.setPrimaryClip(ClipData.newPlainText(null, (link.contains("://") ? "" : "https://") + link));
            Toast.makeText(getActivity(), getString(R.string.invite_link_copied), Toast.LENGTH_SHORT).show();
        }
    });
    bind(groupVM.getAbout(), groupVM.getShortName(), (about, shortName) -> {
        descriptionContainer.setVisibility(about != null || shortName != null ? View.VISIBLE : View.GONE);
    });
    // Notifications
    isNotificationsEnabled.setChecked(messenger().isNotificationsEnabled(Peer.group(chatId)));
    isNotificationsEnabled.setOnCheckedChangeListener((buttonView, isChecked) -> {
        messenger().changeNotificationsEnabled(Peer.group(chatId), isChecked);
    });
    header.findViewById(R.id.notificationsCont).setOnClickListener(v -> {
        isNotificationsEnabled.setChecked(!isNotificationsEnabled.isChecked());
    });
    // Add Member
    bind(groupVM.getIsCanInviteMembers(), (canInvite) -> {
        if (canInvite) {
            addMember.setVisibility(View.VISIBLE);
        } else {
            addMember.setVisibility(View.GONE);
        }
    });
    addMember.setOnClickListener(view -> {
        startActivity(new Intent(getActivity(), AddMemberActivity.class).putExtra(Intents.EXTRA_GROUP_ID, chatId));
    });
    // Administration
    if (groupVM.getIsCanEditAdministration().get() || groupVM.getIsCanDelete().get()) {
        administrationAction.setOnClickListener(view -> {
            startActivity(new Intent(getActivity(), GroupAdminActivity.class).putExtra(Intents.EXTRA_GROUP_ID, chatId));
        });
    } else {
        administrationAction.setVisibility(View.GONE);
    }
    // Async Members
    // Showing member only when members available and async members is enabled
    bind(groupVM.getIsCanViewMembers(), groupVM.getIsAsyncMembers(), (canViewMembers, vm1, isAsync, vm2) -> {
        if (canViewMembers) {
            if (isAsync) {
                members.setVisibility(View.VISIBLE);
                header.findViewById(R.id.after_settings_divider).setVisibility(View.GONE);
            } else {
                members.setVisibility(View.GONE);
                header.findViewById(R.id.after_settings_divider).setVisibility(View.VISIBLE);
            }
        } else {
            members.setVisibility(View.GONE);
            header.findViewById(R.id.after_settings_divider).setVisibility(View.GONE);
        }
    });
    members.setOnClickListener(view -> {
        startActivity(new Intent(getContext(), MembersActivity.class).putExtra(Intents.EXTRA_GROUP_ID, groupVM.getId()));
    });
    // Leave
    bind(groupVM.getIsCanLeave(), canLeave -> {
        if (canLeave) {
            leaveAction.setVisibility(View.VISIBLE);
            leaveAction.setOnClickListener(view1 -> {
                new AlertDialog.Builder(getActivity()).setMessage(getString(groupVM.getGroupType() == GroupType.CHANNEL ? R.string.alert_leave_channel_message : R.string.alert_leave_group_message).replace("%1$s", groupVM.getName().get())).setPositiveButton(R.string.alert_leave_group_yes, (dialog2, which) -> {
                    execute(messenger().leaveAndDeleteGroup(chatId).then(aVoid -> ActorSDK.returnToRoot(getActivity())));
                }).setNegativeButton(R.string.dialog_cancel, null).show().setCanceledOnTouchOutside(true);
            });
        } else {
            leaveAction.setVisibility(View.GONE);
        }
    });
    listView.addHeaderView(header, null, false);
    //
    // Members
    //
    groupUserAdapter = new MembersAdapter(getActivity(), getArguments().getInt("groupId"));
    listView.setAdapter(groupUserAdapter);
    listView.setOnItemClickListener((parent, view, position, id) -> {
        Object item = parent.getItemAtPosition(position);
        if (item != null && item instanceof GroupMember) {
            GroupMember groupMember = (GroupMember) item;
            if (groupMember.getUid() != myUid()) {
                UserVM userVM = users().get(groupMember.getUid());
                if (userVM != null) {
                    startActivity(Intents.openPrivateDialog(userVM.getId(), true, getActivity()));
                }
            }
        }
    });
    listView.setOnItemLongClickListener((adapterView, view, i, l) -> {
        Object item = adapterView.getItemAtPosition(i);
        if (item != null && item instanceof GroupMember) {
            GroupMember groupMember = (GroupMember) item;
            if (groupMember.getUid() != myUid()) {
                UserVM userVM = users().get(groupMember.getUid());
                if (userVM != null) {
                    groupUserAdapter.onMemberClick(groupVM, userVM, groupMember.isAdministrator(), groupMember.getInviterUid() == myUid(), (BaseActivity) getActivity());
                    return true;
                }
            }
        }
        return false;
    });
    //
    // Scroll handling
    //
    listView.setOnScrollListener(new AbsListView.OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
        }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            if (firstVisibleItem >= 1) {
                updateBar(Integer.MAX_VALUE);
            } else {
                View top = listView.getChildAt(0);
                if (top != null) {
                    updateBar(-top.getTop());
                } else {
                    updateBar(Integer.MAX_VALUE);
                }
            }
        }
    });
    //
    // Placeholder
    //
    bind(groupVM.isMember(), (isMember) -> {
        notMemberView.setVisibility(isMember ? View.GONE : View.VISIBLE);
        getActivity().invalidateOptionsMenu();
    });
    // Menu
    bind(groupVM.getIsCanEditInfo(), canEditInfo -> {
        getActivity().invalidateOptionsMenu();
    });
    return res;
}
Also used : ClipboardManager(android.content.ClipboardManager) AlertDialog(android.app.AlertDialog) BaseFragment(im.actor.sdk.controllers.BaseFragment) Bundle(android.os.Bundle) ViewAvatarActivity(im.actor.sdk.controllers.fragment.preview.ViewAvatarActivity) ActorSDKMessenger.groups(im.actor.sdk.util.ActorSDKMessenger.groups) ActorSDKMessenger.messenger(im.actor.sdk.util.ActorSDKMessenger.messenger) AlertListBuilder(im.actor.sdk.util.AlertListBuilder) ColorDrawable(android.graphics.drawable.ColorDrawable) Screen(im.actor.sdk.util.Screen) PhoneNumberUtil(com.google.i18n.phonenumbers.PhoneNumberUtil) RecyclerListView(im.actor.sdk.view.adapters.RecyclerListView) ClipboardManager(android.content.ClipboardManager) View(android.view.View) CommandCallback(im.actor.core.viewmodel.CommandCallback) Intents(im.actor.sdk.controllers.Intents) ActorSDKLauncher(im.actor.sdk.ActorSDKLauncher) Void(im.actor.runtime.actors.messages.Void) GroupMember(im.actor.core.entity.GroupMember) UserPhone(im.actor.core.viewmodel.UserPhone) SwitchCompat(android.support.v7.widget.SwitchCompat) ViewGroup(android.view.ViewGroup) ActorBinder(im.actor.sdk.controllers.ActorBinder) AlertDialog(android.app.AlertDialog) TextView(android.widget.TextView) Peer(im.actor.core.entity.Peer) ActorStyle(im.actor.sdk.ActorStyle) Context(android.content.Context) ActorSDKMessenger.myUid(im.actor.sdk.util.ActorSDKMessenger.myUid) TintImageView(im.actor.sdk.view.TintImageView) Intent(android.content.Intent) GroupVM(im.actor.core.viewmodel.GroupVM) MenuItem(android.view.MenuItem) ArrayList(java.util.ArrayList) ClipData(android.content.ClipData) MembersAdapter(im.actor.sdk.controllers.group.view.MembersAdapter) MenuInflater(android.view.MenuInflater) Toast(android.widget.Toast) Menu(android.view.Menu) AvatarView(im.actor.sdk.view.avatar.AvatarView) ActionBar(android.support.v7.app.ActionBar) GroupType(im.actor.core.entity.GroupType) ActorSDK(im.actor.sdk.ActorSDK) LayoutInflater(android.view.LayoutInflater) ActorSDKMessenger.users(im.actor.sdk.util.ActorSDKMessenger.users) AbsListView(android.widget.AbsListView) BaseActivity(im.actor.sdk.controllers.activity.BaseActivity) Color(android.graphics.Color) UserVM(im.actor.core.viewmodel.UserVM) R(im.actor.sdk.R) NumberParseException(com.google.i18n.phonenumbers.NumberParseException) Phonenumber(com.google.i18n.phonenumbers.Phonenumber) MembersAdapter(im.actor.sdk.controllers.group.view.MembersAdapter) GroupMember(im.actor.core.entity.GroupMember) TintImageView(im.actor.sdk.view.TintImageView) AbsListView(android.widget.AbsListView) Intent(android.content.Intent) RecyclerListView(im.actor.sdk.view.adapters.RecyclerListView) View(android.view.View) TextView(android.widget.TextView) TintImageView(im.actor.sdk.view.TintImageView) AvatarView(im.actor.sdk.view.avatar.AvatarView) AbsListView(android.widget.AbsListView) UserVM(im.actor.core.viewmodel.UserVM) TextView(android.widget.TextView) SwitchCompat(android.support.v7.widget.SwitchCompat)

Aggregations

View (android.view.View)4 TextView (android.widget.TextView)4 RecyclerListView (im.actor.sdk.view.adapters.RecyclerListView)4 Intent (android.content.Intent)3 GroupVM (im.actor.core.viewmodel.GroupVM)3 UserVM (im.actor.core.viewmodel.UserVM)3 Context (android.content.Context)2 Color (android.graphics.Color)2 Bundle (android.os.Bundle)2 LayoutInflater (android.view.LayoutInflater)2 MenuItem (android.view.MenuItem)2 ViewGroup (android.view.ViewGroup)2 FrameLayout (android.widget.FrameLayout)2 GroupMember (im.actor.core.entity.GroupMember)2 Peer (im.actor.core.entity.Peer)2 Manifest (android.Manifest)1 Activity (android.app.Activity)1 AlertDialog (android.app.AlertDialog)1 Notification (android.app.Notification)1 NotificationManager (android.app.NotificationManager)1