天天看點

【Android系統源碼修改】通知欄相關筆記

NotificationPanelView.java

設定快速設定菜單下拉使能:

public void setQsExpansionEnabled(boolean qsExpansionEnabled) {

mQsExpansionEnabled = qsExpansionEnabled;

mHeader.setClickable(qsExpansionEnabled);

}

複位:

@Override

public void resetViews() {

mIsLaunchTransitionFinished = false;

mBlockTouches = false;

mUnlockIconActive = false;

mAfforanceHelper.reset(true);

closeQs();

mStatusBar.dismissPopups();

mNotificationStackScroller.setOverScrollAmount(0f, true );

}

關閉快速設定菜單:

public void closeQs() {

cancelAnimation();

setQsExpansion(mQsMinExpansionHeight);

}

打開快速設定:

public void openQs() {

cancelAnimation();

if (mQsExpansionEnabled) {

setQsExpansion(mQsMaxExpansionHeight);

}

}

展開快速設定菜單:

public void expandWithQs() {

if (mQsExpansionEnabled) {

mQsExpandImmediate = true;

}

expand();

}

攔截觸摸事件:

@Override

public boolean onInterceptTouchEvent(MotionEvent event) {

1.狀态欄上升,下拉的開始以及結束時的調用方法:

PanelView.java

開始:notifyExpandingStarted

結束:notifyExpandingFinished

對應着mExpanding

2.狀态欄的自動下拉和上升方法(伴有時間動畫)

PhoneStatusBar.java

自動下拉:animateExpandNotificationsPanel

自動上升:animateCollapsePanels

3.狀态欄的自動下拉和上升方法(立即)

PhoneStatusBar.java

由展開狀态立即不可見:makeExpandedInvisible

由不可見立即可見:makeExpandedVisible

4.下拉狀态欄的是否已經不可見或者下拉狀态欄的高度為0的判斷:

PanelView.java

isFullyCollapsed

5.下拉狀态欄是否已經下拉至最底部或者是最大高度的判斷:

PanelView.java

isFullyExpanded

6.下拉狀态欄3種狀态的判斷:

PanelBar.Java

mState:

STATE_CLOSED:下拉狀态欄的高度為0

STATE_OPENING:沒有到達最底部之前的下拉狀态欄正在下拉或者上升過程

STATE_OPEN:到達最底部後的下拉狀态欄正在下拉或者上升過程

它們由PanelView.java中onTrackingStarted和onTrackingStopped方法來控制參數,對應mTracking