Loading packages/SystemUI/res/values/config.xml +2 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,8 @@ <integer name="recents_animate_task_bar_exit_duration">150</integer> <!-- The animation duration for animating in the info pane. --> <integer name="recents_animate_task_view_info_pane_duration">150</integer> <!-- The animation duration for animating the removal of a task view. --> <integer name="recents_animate_task_view_remove_duration">150</integer> <!-- The minimum alpha for the dim applied to cards that go deeper into the stack. --> <integer name="recents_max_task_stack_view_dim">96</integer> <!-- Transposes the search bar layout in landscape --> Loading packages/SystemUI/res/values/dimens.xml +3 −0 Original line number Diff line number Diff line Loading @@ -233,6 +233,9 @@ <!-- The translation in the Z index for each task above the last task. --> <dimen name="recents_task_view_z_increment">5dp</dimen> <!-- The amount to translate when animating the removal of a task. --> <dimen name="recents_task_view_remove_anim_translation_x">75dp</dimen> <!-- The amount of space a user has to scroll to dismiss any info panes. --> <dimen name="recents_task_stack_scroll_dismiss_info_pane_distance">50dp</dimen> Loading packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +7 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; Loading @@ -37,6 +38,7 @@ import com.android.systemui.recents.model.TaskStack; import com.android.systemui.recents.views.RecentsView; import java.util.ArrayList; import java.util.Set; /** Our special app widget host */ class RecentsAppWidgetHost extends AppWidgetHost { Loading Loading @@ -308,6 +310,9 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_OFF); registerReceiver(mScreenOffReceiver, filter); // Register any broadcast receivers for the task loader RecentsTaskLoader.getInstance().registerReceivers(this, mRecentsView); } @Override Loading @@ -320,6 +325,7 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView // Unregister any broadcast receivers we have registered unregisterReceiver(mServiceBroadcastReceiver); unregisterReceiver(mScreenOffReceiver); RecentsTaskLoader.getInstance().unregisterReceivers(); } @Override Loading packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java +6 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,8 @@ public class RecentsConfiguration { public int taskStackScrollDismissInfoPaneDistance; public int taskStackMaxDim; public int taskViewInfoPaneAnimDuration; public int taskViewRemoveAnimDuration; public int taskViewRemoveAnimTranslationXPx; public int taskViewTranslationZMinPx; public int taskViewTranslationZIncrementPx; public int taskViewRoundedCornerRadiusPx; Loading Loading @@ -108,6 +110,10 @@ public class RecentsConfiguration { taskStackMaxDim = res.getInteger(R.integer.recents_max_task_stack_view_dim); taskViewInfoPaneAnimDuration = res.getInteger(R.integer.recents_animate_task_view_info_pane_duration); taskViewRemoveAnimDuration = res.getInteger(R.integer.recents_animate_task_view_remove_duration); taskViewRemoveAnimTranslationXPx = res.getDimensionPixelSize(R.dimen.recents_task_view_remove_anim_translation_x); taskViewRoundedCornerRadiusPx = res.getDimensionPixelSize(R.dimen.recents_task_view_rounded_corners_radius); taskViewTranslationZMinPx = res.getDimensionPixelSize(R.dimen.recents_task_view_z_min); Loading packages/SystemUI/src/com/android/systemui/recents/RecentsPackageMonitor.java 0 → 100644 +112 −0 Original line number Diff line number Diff line /* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.recents; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.os.Looper; import com.android.internal.content.PackageMonitor; import java.util.HashSet; import java.util.List; import java.util.Set; /** * The package monitor listens for changes from PackageManager to update the contents of the Recents * list. */ public class RecentsPackageMonitor extends PackageMonitor { public interface PackageCallbacks { public void onComponentRemoved(Set<ComponentName> cns); } PackageCallbacks mCb; List<ActivityManager.RecentTaskInfo> mTasks; SystemServicesProxy mSsp; public RecentsPackageMonitor(Context context) { mSsp = new SystemServicesProxy(context); } /** Registers the broadcast receivers with the specified callbacks. */ public void register(Context context, PackageCallbacks cb) { mCb = cb; register(context, Looper.getMainLooper(), false); } /** Unregisters the broadcast receivers. */ @Override public void unregister() { super.unregister(); mTasks.clear(); } /** Sets the list of tasks to match against package broadcast changes. */ void setTasks(List<ActivityManager.RecentTaskInfo> tasks) { mTasks = tasks; } @Override public void onPackageRemoved(String packageName, int uid) { if (mCb == null) return; // Identify all the tasks that should be removed as a result of the package being removed. // Using a set to ensure that we callback once per unique component. HashSet<ComponentName> componentsToRemove = new HashSet<ComponentName>(); for (ActivityManager.RecentTaskInfo t : mTasks) { ComponentName cn = t.baseIntent.getComponent(); if (cn.getPackageName().equals(packageName)) { componentsToRemove.add(cn); } } // Notify our callbacks that the components no longer exist mCb.onComponentRemoved(componentsToRemove); } @Override public boolean onPackageChanged(String packageName, int uid, String[] components) { onPackageModified(packageName); return true; } @Override public void onPackageModified(String packageName) { if (mCb == null) return; // Identify all the tasks that should be removed as a result of the package being removed. // Using a set to ensure that we callback once per unique component. HashSet<ComponentName> componentsKnownToExist = new HashSet<ComponentName>(); HashSet<ComponentName> componentsToRemove = new HashSet<ComponentName>(); for (ActivityManager.RecentTaskInfo t : mTasks) { ComponentName cn = t.baseIntent.getComponent(); if (cn.getPackageName().equals(packageName)) { if (componentsKnownToExist.contains(cn)) { // If we know that the component still exists in the package, then skip continue; } if (mSsp.getActivityInfo(cn) != null) { componentsKnownToExist.add(cn); } else { componentsToRemove.add(cn); } } } // Notify our callbacks that the components no longer exist mCb.onComponentRemoved(componentsToRemove); } } Loading
packages/SystemUI/res/values/config.xml +2 −0 Original line number Diff line number Diff line Loading @@ -121,6 +121,8 @@ <integer name="recents_animate_task_bar_exit_duration">150</integer> <!-- The animation duration for animating in the info pane. --> <integer name="recents_animate_task_view_info_pane_duration">150</integer> <!-- The animation duration for animating the removal of a task view. --> <integer name="recents_animate_task_view_remove_duration">150</integer> <!-- The minimum alpha for the dim applied to cards that go deeper into the stack. --> <integer name="recents_max_task_stack_view_dim">96</integer> <!-- Transposes the search bar layout in landscape --> Loading
packages/SystemUI/res/values/dimens.xml +3 −0 Original line number Diff line number Diff line Loading @@ -233,6 +233,9 @@ <!-- The translation in the Z index for each task above the last task. --> <dimen name="recents_task_view_z_increment">5dp</dimen> <!-- The amount to translate when animating the removal of a task. --> <dimen name="recents_task_view_remove_anim_translation_x">75dp</dimen> <!-- The amount of space a user has to scroll to dismiss any info panes. --> <dimen name="recents_task_stack_scroll_dismiss_info_pane_distance">50dp</dimen> Loading
packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +7 −1 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.appwidget.AppWidgetHostView; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProviderInfo; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; Loading @@ -37,6 +38,7 @@ import com.android.systemui.recents.model.TaskStack; import com.android.systemui.recents.views.RecentsView; import java.util.ArrayList; import java.util.Set; /** Our special app widget host */ class RecentsAppWidgetHost extends AppWidgetHost { Loading Loading @@ -308,6 +310,9 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView filter = new IntentFilter(); filter.addAction(Intent.ACTION_SCREEN_OFF); registerReceiver(mScreenOffReceiver, filter); // Register any broadcast receivers for the task loader RecentsTaskLoader.getInstance().registerReceivers(this, mRecentsView); } @Override Loading @@ -320,6 +325,7 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView // Unregister any broadcast receivers we have registered unregisterReceiver(mServiceBroadcastReceiver); unregisterReceiver(mScreenOffReceiver); RecentsTaskLoader.getInstance().unregisterReceivers(); } @Override Loading
packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java +6 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,8 @@ public class RecentsConfiguration { public int taskStackScrollDismissInfoPaneDistance; public int taskStackMaxDim; public int taskViewInfoPaneAnimDuration; public int taskViewRemoveAnimDuration; public int taskViewRemoveAnimTranslationXPx; public int taskViewTranslationZMinPx; public int taskViewTranslationZIncrementPx; public int taskViewRoundedCornerRadiusPx; Loading Loading @@ -108,6 +110,10 @@ public class RecentsConfiguration { taskStackMaxDim = res.getInteger(R.integer.recents_max_task_stack_view_dim); taskViewInfoPaneAnimDuration = res.getInteger(R.integer.recents_animate_task_view_info_pane_duration); taskViewRemoveAnimDuration = res.getInteger(R.integer.recents_animate_task_view_remove_duration); taskViewRemoveAnimTranslationXPx = res.getDimensionPixelSize(R.dimen.recents_task_view_remove_anim_translation_x); taskViewRoundedCornerRadiusPx = res.getDimensionPixelSize(R.dimen.recents_task_view_rounded_corners_radius); taskViewTranslationZMinPx = res.getDimensionPixelSize(R.dimen.recents_task_view_z_min); Loading
packages/SystemUI/src/com/android/systemui/recents/RecentsPackageMonitor.java 0 → 100644 +112 −0 Original line number Diff line number Diff line /* * Copyright (C) 2014 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.systemui.recents; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; import android.os.Looper; import com.android.internal.content.PackageMonitor; import java.util.HashSet; import java.util.List; import java.util.Set; /** * The package monitor listens for changes from PackageManager to update the contents of the Recents * list. */ public class RecentsPackageMonitor extends PackageMonitor { public interface PackageCallbacks { public void onComponentRemoved(Set<ComponentName> cns); } PackageCallbacks mCb; List<ActivityManager.RecentTaskInfo> mTasks; SystemServicesProxy mSsp; public RecentsPackageMonitor(Context context) { mSsp = new SystemServicesProxy(context); } /** Registers the broadcast receivers with the specified callbacks. */ public void register(Context context, PackageCallbacks cb) { mCb = cb; register(context, Looper.getMainLooper(), false); } /** Unregisters the broadcast receivers. */ @Override public void unregister() { super.unregister(); mTasks.clear(); } /** Sets the list of tasks to match against package broadcast changes. */ void setTasks(List<ActivityManager.RecentTaskInfo> tasks) { mTasks = tasks; } @Override public void onPackageRemoved(String packageName, int uid) { if (mCb == null) return; // Identify all the tasks that should be removed as a result of the package being removed. // Using a set to ensure that we callback once per unique component. HashSet<ComponentName> componentsToRemove = new HashSet<ComponentName>(); for (ActivityManager.RecentTaskInfo t : mTasks) { ComponentName cn = t.baseIntent.getComponent(); if (cn.getPackageName().equals(packageName)) { componentsToRemove.add(cn); } } // Notify our callbacks that the components no longer exist mCb.onComponentRemoved(componentsToRemove); } @Override public boolean onPackageChanged(String packageName, int uid, String[] components) { onPackageModified(packageName); return true; } @Override public void onPackageModified(String packageName) { if (mCb == null) return; // Identify all the tasks that should be removed as a result of the package being removed. // Using a set to ensure that we callback once per unique component. HashSet<ComponentName> componentsKnownToExist = new HashSet<ComponentName>(); HashSet<ComponentName> componentsToRemove = new HashSet<ComponentName>(); for (ActivityManager.RecentTaskInfo t : mTasks) { ComponentName cn = t.baseIntent.getComponent(); if (cn.getPackageName().equals(packageName)) { if (componentsKnownToExist.contains(cn)) { // If we know that the component still exists in the package, then skip continue; } if (mSsp.getActivityInfo(cn) != null) { componentsKnownToExist.add(cn); } else { componentsToRemove.add(cn); } } } // Notify our callbacks that the components no longer exist mCb.onComponentRemoved(componentsToRemove); } }