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>