一键清理功能
——frameworks/base/packages/SystemUI/res/drawable/ic_one_key_clean.xml
——frameworks/base/packages/SystemUI/res/drawable/ic_one_key_clean_bg.png
——frameworks/base/packages/SystemUI/res/drawable/ic_one_key_clean_press.png –
——frameworks/base/packages/SystemUI/res/layout/recents.xml
——frameworks/base/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
——frameworks/base/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
——frameworks/base/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
——frameworks/base/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
----- frameworks/base/packages/SystemUI/res/drawable/ic_one_key_clean.xml -----
new file mode 100644
index 0000000..c6e9ead
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="false" android:drawable="@drawable/ic_one_key_clean_bg" />
+ <item android:state_pressed="true" android:drawable="@drawable/ic_one_key_clean_press" />
+ <item android:state_focused="true" android:drawable="@drawable/ic_one_key_clean_press" />
+</selector>
---- frameworks/base/packages/SystemUI/res/drawable/ic_one_key_clean_bg.png ----
new file mode 100644
index 0000000..a418757
Binary files /dev/null and b/frameworks/base/packages/SystemUI/res/drawable/ic_one_key_clean_bg.png differ
-- frameworks/base/packages/SystemUI/res/drawable/ic_one_key_clean_press.png --
new file mode 100644
index 0000000..a56bdd7
Binary files /dev/null and b/frameworks/base/packages/SystemUI/res/drawable/ic_one_key_clean_press.png differ
----------- frameworks/base/packages/SystemUI/res/layout/recents.xml -----------
index bdda527..d5bb64a 100644
@@ -45,7 +45,16 @@
android:layout="@layout/recents_debug_overlay"
android:layout_width="match_parent"
android:layout_height="match_parent" />
-
+ <!-- One Key Clean view added -->
+ <ImageView
+ android:id="@+id/one_key_clean"
+ android:layout_width="55.0dip"
+ android:layout_height="55.0dip"
+ android:layout_gravity="center_horizontal|bottom"
+ android:layout_marginBottom="50dp"
+ android:focusable="true"
+ android:scaleType="centerCrop"
+ android:src="@drawable/ic_one_key_clean" />
<!-- Nav Bar Scrim View -->
<ImageView
android:id="@+id/nav_bar_scrim"
frameworks/base/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
index d08f916..01cb980 100644
@@ -30,7 +30,9 @@ import android.os.SystemClock;
import android.os.UserHandle;
import android.view.KeyEvent;
import android.view.View;
+import android.view.View.OnClickListener;
import android.view.ViewStub;
+import android.widget.ImageView;
import android.widget.Toast;
import android.util.Log;
@@ -73,6 +75,9 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
ViewStub mDebugOverlayStub;
View mEmptyView;
DebugOverlayView mDebugOverlay;
+ // added
+ ImageView mOneKeyClean;
+ // added
// Resize task debug
RecentsResizeTaskDialog mResizeTaskDebugDialog;
@@ -255,6 +260,7 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
}
mEmptyView.setVisibility(View.VISIBLE);
mRecentsView.setSearchBarVisibility(View.GONE);
+ mOneKeyClean.setVisibility(View.GONE); //added for one key clean
} else {
if (mEmptyView != null) {
mEmptyView.setVisibility(View.GONE);
@@ -264,6 +270,7 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
} else {
refreshSearchWidgetView();
}
+ mOneKeyClean.setVisibility(View.VISIBLE); //added for one key clean
}
// Animate the SystemUI scrims into view
@@ -368,7 +375,20 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
mDebugOverlayStub = (ViewStub) findViewById(R.id.debug_overlay_stub);
mScrimViews = new SystemBarScrimViews(this, mConfig);
inflateDebugOverlay();
-
+ // added for one key clean
+ mOneKeyClean = (ImageView) findViewById(R.id.one_key_clean);
+ mOneKeyClean.setOnClickListener(new OnClickListener(){
+
+ @Override
+ public void onClick(View v) {
+ // TODO Auto-generated method stub
+ if (mRecentsView != null) {
+ mRecentsView.onOneKeyCleanClicked();
+ }
+ }
+
+ });
+ // added end
// Bind the search app widget when we first start up
mSearchWidgetInfo = ssp.getOrBindSearchAppWidget(this, mAppWidgetHost);
frameworks/base/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
index 947c19c..dae0f0a 100644
@@ -719,4 +719,41 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV
stackView.onPackagesChanged(monitor, packageName, userId);
}
}
+ /**
+ * Added for One Key Clean Feature
+ */
+ @Override
+ public void onOneKeyCleanClicked() {
+ int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ View child = getChildAt(i);
+ if (child != mSearchBar) {
+ final TaskStackView stackView = (TaskStackView) child;
+ final int viewCount = stackView.getChildCount();
+ TaskStack stack = stackView.mStack;
+ ArrayList<Task> tasks = stack.getTasks();
+ int delay = 0;
+ for (int k = viewCount - 1; k >= 0; k--) {
+ TaskView tv = (TaskView) stackView.getChildAt(k);
+ Task task = tv.getTask();
+ if (tasks.contains(task)) {
+ tasks.remove(task);
+ }
+ tv.dismissTask();
+ //tv.dismissTask(delay);
+ //delay += 50;
+ //Log.d(TAG, "Lee----stackView.getChildCount():" + viewCount
+ // + ", k = " + k);
+ }
+
+ if (!tasks.isEmpty()) {
+ final int taskCount = tasks.size();
+ for (int j = 0; j < taskCount; j++) {
+ Task task = tasks.get(0);
+ stack.removeTask(task);
+ }
+ }
+ }
+ }
+ }
}
frameworks/base/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
index e2b1050..be7fc43 100644
@@ -67,6 +67,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
public void onTaskStackUnfilterTriggered();
public void onTaskResize(Task t);
+ public void onOneKeyCleanClicked(); //added for one key clean
}
RecentsConfiguration mConfig;
frameworks/base/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
index cbfe842..6dda68b 100644
@@ -493,6 +493,20 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks,
}, 0);
}
+ /** Dismisses this task. added */
+ void dismissTask(int delay) {
+ // Animate out the view and call the callback
+ final TaskView tv = this;
+ startDeleteTaskAnimation(new Runnable() {
+ @Override
+ public void run() {
+ if (mCb != null) {
+ mCb.onTaskViewDismissed(tv);
+ }
+ }
+ }, delay);
+ }
+
/**
* Returns whether this view should be clipped, or any views below should clip against this
* view.