Android M 中SystemUI添加一键清除功能

1.frameworks/base/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java 

public class RecentsActivity extends Activity implements RecentsView.RecentsViewCallbacks,
        RecentsAppWidgetHost.RecentsAppWidgetHostCallbacks,
        DebugOverlayView.DebugOverlayViewCallbacks {
     ViewStub mEmptyViewStub;
     ViewStub mDebugOverlayStub;
     View mEmptyView;
+    View mClearRecent; //lxm add
     DebugOverlayView mDebugOverlay;

    void updateRecentsTasks() {
         .
         .
         .
        // Update the top level view's visibilities
        if (mConfig.launchedWithNoRecentTasks) {
            if (mEmptyView == null) {
                mEmptyView = mEmptyViewStub.inflate();
            }
            mEmptyView.setVisibility(View.VISIBLE);
            mRecentsView.setSearchBarVisibility(View.GONE);
            mRecentsView.setSearchBarVisibility(View.GONE);//add by lxm
        } else {
            if (mEmptyView != null) {
                mEmptyView.setVisibility(View.GONE);
                mClearRecent.setVisibility(View.VISIBLE);//add by lxm
            }
            if (mRecentsView.hasValidSearchBar()) {
                mRecentsView.setSearchBarVisibility(View.VISIBLE);
                mClearRecent.setVisibility(View.GONE);//add by lxm
            } else {
                refreshSearchWidgetView();
            }
        }
           .
           .
           .
     @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        .
        .
        .
        //added by lxm
        mClearRecent = findViewById(R.id.clean_all_recent_apps);
        if(mClearRecent != null){
            mClearRecent.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mRecentsView.dismissAllTasksAnimated();
                }
            });
        }
         //added by lxm
        .
        .
        .
        }

}

2.frameworks/base/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java 

public class RecentsView extends FrameLayout implements TaskStackView.TaskStackViewCallbacks,
        RecentsPackageMonitor.PackageCallbacks {

    private static final String TAG = "RecentsView";   
    .
    .
    . 
    //added by lxm
    public void dismissAllTasksAnimated() {
    	int childCount = getChildCount();
    	for (int i = 0; i < childCount; i++) {
        	View child = getChildAt(i);
        	if (child != mSearchBar) {
            	TaskStackView stackView = (TaskStackView) child;
            	stackView.dismissAllTasks();
        	}
    	}
	}
}

3.frameworks/base/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java

public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCallbacks,
        TaskView.TaskViewCallbacks, TaskStackViewScroller.TaskStackViewScrollerCallbacks,
        ViewPool.ViewPoolConsumer<TaskView, Task>, RecentsPackageMonitor.PackageCallbacks {


        .
        .
        .
        //added by lxm
        public void dismissAllTasks() {
    	    post(new Runnable() {
        	@Override
        	public void run() {
           	 	    ArrayList<Task> tasks = new ArrayList<Task>();
            	    tasks.addAll(mStack.getTasks());
 
            	    int childCount = getChildCount();
            	    for (int i = 0; i < childCount; i++) {
                	    TaskView tv = (TaskView) getChildAt(i);
                	    tasks.remove(tv.getTask());
                	    tv.dismissTask();
            	    }
            	    int size = tasks.size();
            	    for (int i = 0; i < size; i++) {
                	    Task t = tasks.get(i);
                	    if (mStack.getTasks().contains(t)) {
                    	    mStack.removeTask(t);
                	    }
            	    }
        	    }
    	    });
	    }
    //added by lxm
}

4.添加按钮图标:frameworks/base/packages/SystemUI/res/drawable/ic_clear_recent.xml 

<vector xmlns:android="http://schemas.android.com/apk/res/android"
	android:viewportHeight="144" 
	android:viewportWidth="144"
    android:width="40dp" 
    android:height="40dp">
    <path android:fillColor="#66666666" android:pathData="M72,72m-69.912,0a69.912,69.912 0,1 1,139.824 0a69.912,69.912 0,1 1,-139.824 0"/>
    <path android:fillColor="#ffffff" android:pathData="M103.713,40.251c2.396,2.396 2.396,6.279 0,8.675l-54.911,54.912c-2.396,2.396 -6.28,2.396 -8.676,0.001l0,0c-2.396,-2.396 -2.396,-6.281 0,-8.678L95.037,40.25C97.433,37.854 101.317,37.855 103.713,40.251L103.713,40.251z"/>
    <path android:fillColor="#ffffff" android:pathData="M40.17,40.117c2.396,-2.396 6.28,-2.396 8.676,0l54.912,54.911c2.396,2.396 2.396,6.28 0,8.676l0,0c-2.396,2.396 -6.28,2.397 -8.677,0.001L40.169,48.793C37.773,46.397 37.774,42.513 40.17,40.117L40.17,40.117z"/>

</vector>

5.frameworks/base/packages/SystemUI/res/layout/recents.xml 

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <!-- Status Bar Scrim View -->
    .  
    .
    .
    <!--add by lxm begin-->
     <ImageButton 
        android:id="@+id/clean_all_recent_apps" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:layout_marginBottom="54dp"
        android:layout_gravity="bottom|center"
        android:background="#00000000"
        android:src="@drawable/ic_clear_recent" />
     <!--add by lxm end-->
</FrameLayout>

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值