Search in sources :

Example 1 with ActionBarLayout

use of org.telegram.ui.ActionBar.ActionBarLayout in project Telegram-FOSS by Telegram-FOSS-Team.

the class BackButtonMenu method getStackedHistoryDialogs.

public static ArrayList<PulledDialog> getStackedHistoryDialogs(BaseFragment thisFragment, long ignoreDialogId) {
    ArrayList<PulledDialog> dialogs = new ArrayList<>();
    if (thisFragment == null)
        return dialogs;
    final ActionBarLayout parentLayout = thisFragment.getParentLayout();
    if (parentLayout == null)
        return dialogs;
    ArrayList<BaseFragment> fragmentsStack = parentLayout.fragmentsStack;
    ArrayList<PulledDialog> pulledDialogs = parentLayout.pulledDialogs;
    if (fragmentsStack != null) {
        final int count = fragmentsStack.size();
        for (int i = 0; i < count; ++i) {
            BaseFragment fragment = fragmentsStack.get(i);
            Class activity;
            TLRPC.Chat chat;
            TLRPC.User user = null;
            long dialogId;
            int folderId, filterId;
            if (fragment instanceof ChatActivity) {
                activity = ChatActivity.class;
                ChatActivity chatActivity = (ChatActivity) fragment;
                if (chatActivity.getChatMode() != 0 || chatActivity.isReport()) {
                    continue;
                }
                chat = chatActivity.getCurrentChat();
                user = chatActivity.getCurrentUser();
                dialogId = chatActivity.getDialogId();
                folderId = chatActivity.getDialogFolderId();
                filterId = chatActivity.getDialogFilterId();
            } else if (fragment instanceof ProfileActivity) {
                activity = ProfileActivity.class;
                ProfileActivity profileActivity = (ProfileActivity) fragment;
                chat = profileActivity.getCurrentChat();
                try {
                    user = profileActivity.getUserInfo().user;
                } catch (Exception ignore) {
                }
                dialogId = profileActivity.getDialogId();
                folderId = 0;
                filterId = 0;
            } else {
                continue;
            }
            if (dialogId != ignoreDialogId && !(ignoreDialogId == 0 && UserObject.isUserSelf(user))) {
                boolean alreadyAddedDialog = false;
                for (int d = 0; d < dialogs.size(); ++d) {
                    if (dialogs.get(d).dialogId == dialogId) {
                        alreadyAddedDialog = true;
                        break;
                    }
                }
                if (!alreadyAddedDialog) {
                    PulledDialog pDialog = new PulledDialog();
                    pDialog.activity = activity;
                    pDialog.stackIndex = i;
                    pDialog.chat = chat;
                    pDialog.user = user;
                    pDialog.dialogId = dialogId;
                    pDialog.folderId = folderId;
                    pDialog.filterId = filterId;
                    if (pDialog.chat != null || pDialog.user != null) {
                        dialogs.add(pDialog);
                    }
                }
            }
        }
    }
    if (pulledDialogs != null) {
        for (PulledDialog pulledDialog : pulledDialogs) {
            if (pulledDialog.dialogId == ignoreDialogId) {
                continue;
            }
            boolean alreadyAddedDialog = false;
            for (int d = 0; d < dialogs.size(); ++d) {
                if (dialogs.get(d).dialogId == pulledDialog.dialogId) {
                    alreadyAddedDialog = true;
                    break;
                }
            }
            if (!alreadyAddedDialog) {
                dialogs.add(pulledDialog);
            }
        }
    }
    Collections.sort(dialogs, (d1, d2) -> d2.stackIndex - d1.stackIndex);
    return dialogs;
}
Also used : ProfileActivity(org.telegram.ui.ProfileActivity) ChatActivity(org.telegram.ui.ChatActivity) ArrayList(java.util.ArrayList) ActionBarLayout(org.telegram.ui.ActionBar.ActionBarLayout) BaseFragment(org.telegram.ui.ActionBar.BaseFragment) TLRPC(org.telegram.tgnet.TLRPC)

Example 2 with ActionBarLayout

use of org.telegram.ui.ActionBar.ActionBarLayout in project Telegram-FOSS by Telegram-FOSS-Team.

the class BackButtonMenu method addToPulledDialogs.

public static void addToPulledDialogs(BaseFragment thisFragment, int stackIndex, TLRPC.Chat chat, TLRPC.User user, long dialogId, int folderId, int filterId) {
    if (chat == null && user == null) {
        return;
    }
    if (thisFragment == null) {
        return;
    }
    final ActionBarLayout parentLayout = thisFragment.getParentLayout();
    if (parentLayout == null) {
        return;
    }
    if (parentLayout.pulledDialogs == null) {
        parentLayout.pulledDialogs = new ArrayList<>();
    }
    boolean alreadyAdded = false;
    for (PulledDialog d : parentLayout.pulledDialogs) {
        if (d.dialogId == dialogId) {
            alreadyAdded = true;
            break;
        }
    }
    if (!alreadyAdded) {
        PulledDialog d = new PulledDialog();
        d.activity = ChatActivity.class;
        d.stackIndex = stackIndex;
        d.dialogId = dialogId;
        d.filterId = filterId;
        d.folderId = folderId;
        d.chat = chat;
        d.user = user;
        parentLayout.pulledDialogs.add(d);
    }
}
Also used : ActionBarLayout(org.telegram.ui.ActionBar.ActionBarLayout)

Example 3 with ActionBarLayout

use of org.telegram.ui.ActionBar.ActionBarLayout in project Telegram-FOSS by Telegram-FOSS-Team.

the class BackButtonMenu method clearPulledDialogs.

public static void clearPulledDialogs(BaseFragment thisFragment, int fromIndex) {
    if (thisFragment == null) {
        return;
    }
    final ActionBarLayout parentLayout = thisFragment.getParentLayout();
    if (parentLayout == null) {
        return;
    }
    if (parentLayout.pulledDialogs != null) {
        for (int i = 0; i < parentLayout.pulledDialogs.size(); ++i) {
            if (parentLayout.pulledDialogs.get(i).stackIndex > fromIndex) {
                parentLayout.pulledDialogs.remove(i);
                i--;
            }
        }
    }
}
Also used : ActionBarLayout(org.telegram.ui.ActionBar.ActionBarLayout)

Example 4 with ActionBarLayout

use of org.telegram.ui.ActionBar.ActionBarLayout in project Telegram-FOSS by Telegram-FOSS-Team.

the class BackButtonMenu method show.

public static ActionBarPopupWindow show(BaseFragment thisFragment, View backButton, long currentDialogId) {
    if (thisFragment == null) {
        return null;
    }
    final ActionBarLayout parentLayout = thisFragment.getParentLayout();
    final Context context = thisFragment.getParentActivity();
    final View fragmentView = thisFragment.getFragmentView();
    if (parentLayout == null || context == null || fragmentView == null) {
        return null;
    }
    ArrayList<PulledDialog> dialogs = getStackedHistoryDialogs(thisFragment, currentDialogId);
    if (dialogs.size() <= 0) {
        return null;
    }
    ActionBarPopupWindow.ActionBarPopupWindowLayout layout = new ActionBarPopupWindow.ActionBarPopupWindowLayout(context);
    android.graphics.Rect backgroundPaddings = new Rect();
    Drawable shadowDrawable = thisFragment.getParentActivity().getResources().getDrawable(R.drawable.popup_fixed_alert).mutate();
    shadowDrawable.getPadding(backgroundPaddings);
    layout.setBackgroundColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuBackground));
    AtomicReference<ActionBarPopupWindow> scrimPopupWindowRef = new AtomicReference<>();
    for (int i = 0; i < dialogs.size(); ++i) {
        final PulledDialog pDialog = dialogs.get(i);
        final TLRPC.Chat chat = pDialog.chat;
        final TLRPC.User user = pDialog.user;
        FrameLayout cell = new FrameLayout(context);
        cell.setMinimumWidth(AndroidUtilities.dp(200));
        BackupImageView imageView = new BackupImageView(context);
        imageView.setRoundRadius(AndroidUtilities.dp(32));
        cell.addView(imageView, LayoutHelper.createFrameRelatively(32, 32, Gravity.START | Gravity.CENTER_VERTICAL, 13, 0, 0, 0));
        TextView titleView = new TextView(context);
        titleView.setLines(1);
        titleView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16);
        titleView.setTextColor(Theme.getColor(Theme.key_actionBarDefaultSubmenuItem));
        titleView.setEllipsize(TextUtils.TruncateAt.END);
        cell.addView(titleView, LayoutHelper.createFrameRelatively(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT, Gravity.START | Gravity.CENTER_VERTICAL, 59, 0, 12, 0));
        AvatarDrawable avatarDrawable = new AvatarDrawable();
        avatarDrawable.setSmallSize(true);
        if (chat != null) {
            avatarDrawable.setInfo(chat);
            imageView.setImage(ImageLocation.getForChat(chat, ImageLocation.TYPE_SMALL), "50_50", avatarDrawable, chat);
            titleView.setText(chat.title);
        } else if (user != null) {
            String name;
            if (pDialog.activity == ChatActivity.class && UserObject.isUserSelf(user)) {
                name = LocaleController.getString("SavedMessages", R.string.SavedMessages);
                avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_SAVED);
                imageView.setImageDrawable(avatarDrawable);
            } else if (UserObject.isReplyUser(user)) {
                name = LocaleController.getString("RepliesTitle", R.string.RepliesTitle);
                avatarDrawable.setAvatarType(AvatarDrawable.AVATAR_TYPE_REPLIES);
                imageView.setImageDrawable(avatarDrawable);
            } else if (UserObject.isDeleted(user)) {
                name = LocaleController.getString("HiddenName", R.string.HiddenName);
                avatarDrawable.setInfo(user);
                imageView.setImage(ImageLocation.getForUser(user, ImageLocation.TYPE_SMALL), "50_50", avatarDrawable, user);
            } else {
                name = UserObject.getUserName(user);
                avatarDrawable.setInfo(user);
                imageView.setImage(ImageLocation.getForUser(user, ImageLocation.TYPE_SMALL), "50_50", avatarDrawable, user);
            }
            titleView.setText(name);
        }
        cell.setBackground(Theme.getSelectorDrawable(Theme.getColor(Theme.key_listSelector), false));
        cell.setOnClickListener(e2 -> {
            if (scrimPopupWindowRef.get() != null) {
                scrimPopupWindowRef.getAndSet(null).dismiss();
            }
            if (pDialog.stackIndex >= 0) {
                Long nextFragmentDialogId = null;
                if (parentLayout == null || parentLayout.fragmentsStack == null || pDialog.stackIndex >= parentLayout.fragmentsStack.size()) {
                    nextFragmentDialogId = null;
                } else {
                    BaseFragment nextFragment = parentLayout.fragmentsStack.get(pDialog.stackIndex);
                    if (nextFragment instanceof ChatActivity) {
                        nextFragmentDialogId = ((ChatActivity) nextFragment).getDialogId();
                    } else if (nextFragment instanceof ProfileActivity) {
                        nextFragmentDialogId = ((ProfileActivity) nextFragment).getDialogId();
                    }
                }
                if (nextFragmentDialogId != null && nextFragmentDialogId != pDialog.dialogId) {
                    for (int j = parentLayout.fragmentsStack.size() - 2; j > pDialog.stackIndex; --j) {
                        parentLayout.removeFragmentFromStack(j);
                    }
                } else {
                    if (parentLayout != null && parentLayout.fragmentsStack != null) {
                        for (int j = parentLayout.fragmentsStack.size() - 2; j > pDialog.stackIndex; --j) {
                            if (j >= 0 && j < parentLayout.fragmentsStack.size()) {
                                parentLayout.removeFragmentFromStack(j);
                            }
                        }
                        if (pDialog.stackIndex < parentLayout.fragmentsStack.size()) {
                            parentLayout.showFragment(pDialog.stackIndex);
                            parentLayout.closeLastFragment(true);
                            return;
                        }
                    }
                }
            }
            goToPulledDialog(thisFragment, pDialog);
        });
        layout.addView(cell, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, 48));
    }
    ActionBarPopupWindow scrimPopupWindow = new ActionBarPopupWindow(layout, LayoutHelper.WRAP_CONTENT, LayoutHelper.WRAP_CONTENT);
    scrimPopupWindowRef.set(scrimPopupWindow);
    scrimPopupWindow.setPauseNotifications(true);
    scrimPopupWindow.setDismissAnimationDuration(220);
    scrimPopupWindow.setOutsideTouchable(true);
    scrimPopupWindow.setClippingEnabled(true);
    scrimPopupWindow.setAnimationStyle(R.style.PopupContextAnimation);
    scrimPopupWindow.setFocusable(true);
    layout.measure(View.MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(1000), View.MeasureSpec.AT_MOST), View.MeasureSpec.makeMeasureSpec(AndroidUtilities.dp(1000), View.MeasureSpec.AT_MOST));
    scrimPopupWindow.setInputMethodMode(ActionBarPopupWindow.INPUT_METHOD_NOT_NEEDED);
    scrimPopupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED);
    scrimPopupWindow.getContentView().setFocusableInTouchMode(true);
    layout.setFitItems(true);
    int popupX = AndroidUtilities.dp(8) - backgroundPaddings.left;
    if (AndroidUtilities.isTablet()) {
        int[] location = new int[2];
        fragmentView.getLocationInWindow(location);
        popupX += location[0];
    }
    int popupY = (int) (backButton.getBottom() - backgroundPaddings.top - AndroidUtilities.dp(8));
    scrimPopupWindow.showAtLocation(fragmentView, Gravity.LEFT | Gravity.TOP, popupX, popupY);
    try {
        fragmentView.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP, HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING);
    } catch (Exception ignore) {
    }
    return scrimPopupWindow;
}
Also used : Rect(android.graphics.Rect) ChatActivity(org.telegram.ui.ChatActivity) ActionBarLayout(org.telegram.ui.ActionBar.ActionBarLayout) TLRPC(org.telegram.tgnet.TLRPC) BaseFragment(org.telegram.ui.ActionBar.BaseFragment) ActionBarPopupWindow(org.telegram.ui.ActionBar.ActionBarPopupWindow) TextView(android.widget.TextView) Context(android.content.Context) Rect(android.graphics.Rect) ProfileActivity(org.telegram.ui.ProfileActivity) Drawable(android.graphics.drawable.Drawable) AtomicReference(java.util.concurrent.atomic.AtomicReference) View(android.view.View) TextView(android.widget.TextView) FrameLayout(android.widget.FrameLayout)

Example 5 with ActionBarLayout

use of org.telegram.ui.ActionBar.ActionBarLayout in project Telegram-FOSS by Telegram-FOSS-Team.

the class BubbleActivity method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    ApplicationLoader.postInitApplication();
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setTheme(R.style.Theme_TMessages);
    getWindow().setBackgroundDrawableResource(R.drawable.transparent);
    if (SharedConfig.passcodeHash.length() > 0 && !SharedConfig.allowScreenCapture) {
        try {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
        } catch (Exception e) {
            FileLog.e(e);
        }
    }
    super.onCreate(savedInstanceState);
    if (SharedConfig.passcodeHash.length() != 0 && SharedConfig.appLocked) {
        SharedConfig.lastPauseTime = (int) (SystemClock.elapsedRealtime() / 1000);
    }
    AndroidUtilities.fillStatusBarHeight(this);
    Theme.createDialogsResources(this);
    Theme.createChatResources(this, false);
    actionBarLayout = new ActionBarLayout(this);
    actionBarLayout.setInBubbleMode(true);
    actionBarLayout.setRemoveActionBarExtraHeight(true);
    drawerLayoutContainer = new DrawerLayoutContainer(this);
    drawerLayoutContainer.setAllowOpenDrawer(false, false);
    setContentView(drawerLayoutContainer, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    RelativeLayout launchLayout = new RelativeLayout(this);
    drawerLayoutContainer.addView(launchLayout, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
    launchLayout.addView(actionBarLayout, LayoutHelper.createRelative(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
    drawerLayoutContainer.setParentActionBarLayout(actionBarLayout);
    actionBarLayout.setDrawerLayoutContainer(drawerLayoutContainer);
    actionBarLayout.init(mainFragmentsStack);
    actionBarLayout.setDelegate(this);
    passcodeView = new PasscodeView(this);
    drawerLayoutContainer.addView(passcodeView, LayoutHelper.createFrame(LayoutHelper.MATCH_PARENT, LayoutHelper.MATCH_PARENT));
    NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.closeOtherAppActivities, this);
    actionBarLayout.removeAllFragments();
    handleIntent(getIntent(), false, savedInstanceState != null, false, UserConfig.selectedAccount, 0);
}
Also used : ViewGroup(android.view.ViewGroup) RelativeLayout(android.widget.RelativeLayout) PasscodeView(org.telegram.ui.Components.PasscodeView) DrawerLayoutContainer(org.telegram.ui.ActionBar.DrawerLayoutContainer) ActionBarLayout(org.telegram.ui.ActionBar.ActionBarLayout)

Aggregations

ActionBarLayout (org.telegram.ui.ActionBar.ActionBarLayout)15 BaseFragment (org.telegram.ui.ActionBar.BaseFragment)9 ViewGroup (android.view.ViewGroup)8 FrameLayout (android.widget.FrameLayout)8 Paint (android.graphics.Paint)7 View (android.view.View)7 TextView (android.widget.TextView)7 Animator (android.animation.Animator)6 AnimatorListenerAdapter (android.animation.AnimatorListenerAdapter)6 ObjectAnimator (android.animation.ObjectAnimator)6 Intent (android.content.Intent)6 SharedPreferences (android.content.SharedPreferences)6 Canvas (android.graphics.Canvas)6 Bundle (android.os.Bundle)6 ActivityManager (android.app.ActivityManager)4 Point (android.graphics.Point)4 LocationManager (android.location.LocationManager)4 Uri (android.net.Uri)4 ImageView (android.widget.ImageView)4 RelativeLayout (android.widget.RelativeLayout)4