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 + -
显示快捷键?