fbstandbyticker.java

来自「Sony Ericsson手机上的Facebook客户端全套代码」· Java 代码 · 共 637 行 · 第 1/2 页

JAVA
637
字号
    private void setArrowPosition(int arrowPos)
    {
        switch(arrowPos)
        {
        case 0: // '\0'
            mStatusBubble.setArrowPosition(-23040);
            break;

        case 1: // '\001'
            mStatusBubble.setArrowPosition(-11520);
            break;

        case 2: // '\002'
            mStatusBubble.setArrowPosition(0);
            break;

        case 3: // '\003'
            mStatusBubble.setArrowPosition(11520);
            break;

        case 4: // '\004'
            mStatusBubble.setArrowPosition(23040);
            break;
        }
    }

    public void input(KeyHandler keyHandler)
    {
        if(!isMoving && !isScaling)
            if(keyHandler.wasPressed(1))
                previous();
            else
            if(keyHandler.wasPressed(2))
                next();
    }

    public void requestCancelled(IFbAPIRequest request)
    {
        isRefreshing = false;
    }

    public void requestCompleted(IFbAPIRequest request)
    {
        dataReady = true;
        mRequest = request;
    }

    public void process()
    {
        if(isRefreshing && dataReady)
        {
            if(mRequest != null && (mRequest instanceof FbGetFriendsStatusRequest))
            {
                mStatusData.removeAllElements();
                FbGetFriendsStatusRequest friendRequest = (FbGetFriendsStatusRequest)mRequest;
                Hashtable statusTable = friendRequest.getStatusTable();
                for(Enumeration keys = statusTable.keys(); keys.hasMoreElements(); mStatusData.addElement(statusTable.get(keys.nextElement())));
                sortByDate(mStatusData);
                populateStandbyTicker(mStatusData);
            }
            isRefreshing = false;
            dataReady = false;
            mRequest = null;
        } else
        if(shouldUpdate())
        {
            mLastUpdateTimeMillis = ScreenEngine.getInstance().getTime();
            PageController.getInstance().showPage(4);
        } else
        if(shouldAutoStepToNextElement())
        {
            mLastStepTimeMillis = ScreenEngine.getInstance().getTime();
            next();
        }
        if(shouldStartStatusBubbleAnimation())
        {
            mBubbleAnimationInitialized = false;
            mBubbleAnimationInitTime = 0x7fffffffffffffffL;
            mStatusBubble.animateIn(getAffectorHandler());
        }
        super.process();
    }

    private boolean shouldAutoStepToNextElement()
    {
        if(mIsFocused)
        {
            return false;
        } else
        {
            long currentTimeMillis = ScreenEngine.getInstance().getTime();
            long secondsSinceLastUpdate = (currentTimeMillis - mLastStepTimeMillis) / 1000L;
            return secondsSinceLastUpdate > 4L;
        }
    }

    public void tickerFocus(boolean focus)
    {
        if(focus != mIsFocused)
        {
            PageController.getInstance().showHomescreenInfo(!mIsFocused);
            mIsFocused = focus;
            if(focus)
            {
                ScreenCanvas canvas = ScreenEngine.getInstance().getCanvas();
                if(mBackCommand == null && mHomeCommand == null && mUpdateCommand == null)
                {
                    mBackCommand = new Command("Back", 7, 1);
                    mHomeCommand = new Command("Home", 4, 1);
                    mUpdateCommand = new Command("Update", 4, 1);
                    canvas.addCommand(mBackCommand);
                    canvas.addCommand(mHomeCommand);
                    canvas.addCommand(mUpdateCommand);
                }
                canvas.setCommandListener(this);
                if(mLeftArrow != null)
                    mLeftArrow.setVisible(true);
                if(mRightArrow != null)
                    mRightArrow.setVisible(true);
                if(mStatusBubble != null)
                    mStatusBubble.setFaded(false);
            } else
            {
                mLastStepTimeMillis = ScreenEngine.getInstance().getTime();
                ScreenCanvas canvas = ScreenEngine.getInstance().getCanvas();
                if(mBackCommand != null)
                    canvas.removeCommand(mBackCommand);
                if(mHomeCommand != null)
                    canvas.removeCommand(mHomeCommand);
                if(mUpdateCommand != null)
                    canvas.removeCommand(mUpdateCommand);
                mBackCommand = null;
                mHomeCommand = null;
                mUpdateCommand = null;
                if(mLeftArrow != null)
                    mLeftArrow.setVisible(false);
                if(mRightArrow != null)
                    mRightArrow.setVisible(false);
                if(mStatusBubble != null)
                    mStatusBubble.setFaded(true);
            }
            if(mImages != null)
            {
                for(int i = 0; i < mImages.getChildCount(); i++)
                    if(i != mCurrentActiveIndex)
                    {
                        FbStandbyThumbnail thumb = (FbStandbyThumbnail)mImages.getChild(i);
                        thumb.setSize(31, 31, getShadowHeight(31, 0), false, focus ? 255 : 128);
                    }

            }
        }
    }

    private void Update()
    {
        PageController.getInstance().showPage(4);
    }

    private void sortByDate(Vector statusData)
    {
        for(int i = 0; i < mStatusData.size() - 1; i++)
        {
            for(int j = 0; j < mStatusData.size() - 1; j++)
            {
                FbStatusItemData data1 = (FbStatusItemData)mStatusData.elementAt(j);
                FbStatusItemData data2 = (FbStatusItemData)mStatusData.elementAt(j + 1);
                if(data1.getStatusUpdateTime() < data2.getStatusUpdateTime())
                {
                    mStatusData.removeElementAt(j);
                    mStatusData.insertElementAt(data2, j);
                    mStatusData.removeElementAt(j + 1);
                    mStatusData.insertElementAt(data1, j + 1);
                }
            }

        }

    }

    public void commandAction(Command command, Displayable displayable)
    {
        if(command.equals(mBackCommand))
        {
            tickerFocus(false);
            ScreenEngine.getInstance().setHomescreenInStandby(true);
        } else
        if(command.equals(mHomeCommand))
            FbStandbyInvocationHandler.getInstance().sendMessage(2);
        else
        if(command.equals(mUpdateCommand))
            Update();
    }

    public void settingsUpdated(long updateIntervalInSeconds)
    {
        mAutoUpdateIntervalInSeconds = updateIntervalInSeconds;
    }

    private boolean shouldUpdate()
    {
        if(mAutoUpdateIntervalInSeconds <= 0L)
        {
            return false;
        } else
        {
            long currentTimeMillis = ScreenEngine.getInstance().getTime();
            long secondsSinceLastUpdate = (currentTimeMillis - mLastUpdateTimeMillis) / 1000L;
            return secondsSinceLastUpdate > mAutoUpdateIntervalInSeconds;
        }
    }

    private int getShadowHeight(int thumbHeight, int yOffset)
    {
        return 31 - thumbHeight / 2 - yOffset;
    }

    private void setThumbsVisible(int startIndex, int endIndex)
    {
        if(mImages != null)
        {
            for(int i = 0; i < mImages.getChildCount(); i++)
            {
                FbStandbyThumbnail thumb = (FbStandbyThumbnail)mImages.getChild(i);
                thumb.setVisible(i >= startIndex && i <= endIndex);
            }

        }
    }

    public boolean isFocused()
    {
        return mIsFocused;
    }

    public void keyPressed(int key)
    {
        switch(key)
        {
        case 3: // '\003'
            tickerFocus(false);
            ScreenEngine.getInstance().setHomescreenInStandby(true);
            // fall through

        case 2: // '\002'
        default:
            return;
        }
    }

    private Homescreen mHomescreen;
    private final int TICKER_WITH;
    private final int NUM_SLOTS;
    private final int TOTAL_NUMBER_OF_PICTURES;
    private final int OFFSET;
    private final int MOVE_DURATION;
    private final int TUMBNAIL_POSITION_Y;
    private final int SMALL_ICON_SIZE;
    private final int LARGE_ICON_SIZE;
    private final int RIGHT_ARROW_POSITION_X;
    private final int RIGHT_ARROW_POSITION_Y;
    private final int LEFT_ARROW_POSITION_X;
    private final int LEFT_ARROW_POSITION_Y;
    private final int TRANSITION_SCALE_STEP;
    private final int UNFOCUSED_MODE_IMAGE_ALPHA;
    private final int FOCUSED_IMAGE_OFFSET_Y;
    private final int NR_VISIBLE_UNFOCUSED_THUMBS_LEFT;
    private final int NR_VISIBLE_UNFOCUSED_THUMBS_RIGHT;
    private static final int FORWARD = 1;
    private static final int BACK = -1;
    private static final int UNFOCUS_NEXT_TIME_IN_SECONDS = 4;
    private boolean mIsFocused;
    private long mLastUpdateTimeMillis;
    private long mLastStepTimeMillis;
    private static final int STATUS_BUBBLE_ANIMATION_DELAY = 250;
    private boolean mBubbleAnimationInitialized;
    private long mBubbleAnimationInitTime;
    private Group mImages;
    private FbStandByBubble mStatusBubble;
    private BitmapSprite mRightArrow;
    private BitmapSprite mLeftArrow;
    private BitmapSprite mFocusedHaloImage;
    private int mCurrentActiveIndex;
    private int mCurrentTargetPosition;
    private int mPrevScaleValue;
    Vector mStatusData;
    private static final int ARROW_POS_0 = 0;
    private static final int ARROW_POS_1 = 1;
    private static final int ARROW_POS_2 = 2;
    private static final int ARROW_POS_3 = 3;
    private static final int ARROW_POS_4 = 4;
    private Command mBackCommand;
    private Command mHomeCommand;
    private Command mUpdateCommand;
    private boolean isMoving;
    private boolean isScaling;
    private boolean isRefreshing;
    private boolean dataReady;
    private IFbAPIRequest mRequest;
    private long mAutoUpdateIntervalInSeconds;
















}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?