diff options
4 files changed, 29 insertions, 22 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index f20fd33..809acac 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -2708,7 +2708,12 @@ public class Activity extends ContextThemeWrapper // metadata is available. Intent upIntent = getParentActivityIntent(); if (upIntent != null) { - if (shouldUpRecreateTask(upIntent)) { + if (mActivityInfo.taskAffinity == null) { + // Activities with a null affinity are special; they really shouldn't + // specify a parent activity intent in the first place. Just finish + // the current activity and call it a day. + finish(); + } else if (shouldUpRecreateTask(upIntent)) { TaskStackBuilder b = TaskStackBuilder.create(this); onCreateNavigateUpTaskStack(b); onPrepareNavigateUpTaskStack(b); diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java index 7334ac3..0d9f7bc 100644 --- a/core/java/com/android/internal/app/ResolverActivity.java +++ b/core/java/com/android/internal/app/ResolverActivity.java @@ -371,7 +371,8 @@ public class ResolverActivity extends AlertActivity implements AdapterView.OnIte void showAppDetails(ResolveInfo ri) { Intent in = new Intent().setAction("android.settings.APPLICATION_DETAILS_SETTINGS") - .setData(Uri.fromParts("package", ri.activityInfo.packageName, null)); + .setData(Uri.fromParts("package", ri.activityInfo.packageName, null)) + .addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); startActivity(in); } diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java index 0bdf84a..cb69660 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java @@ -21,6 +21,7 @@ import android.animation.LayoutTransition; import android.app.ActivityManager; import android.app.ActivityManagerNative; import android.app.ActivityOptions; +import android.app.TaskStackBuilder; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; @@ -845,8 +846,9 @@ public class RecentsPanelView extends FrameLayout implements OnItemClickListener private void startApplicationDetailsActivity(String packageName) { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts("package", packageName, null)); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - getContext().startActivity(intent); + intent.setComponent(intent.resolveActivity(mContext.getPackageManager())); + TaskStackBuilder.create(getContext()) + .addNextIntentWithParentStack(intent).startActivities(); } public boolean onInterceptTouchEvent(MotionEvent ev) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index bd8be1f..b392648 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -16,9 +16,24 @@ package com.android.systemui.statusbar; +import com.android.internal.statusbar.IStatusBarService; +import com.android.internal.statusbar.StatusBarIcon; +import com.android.internal.statusbar.StatusBarIconList; +import com.android.internal.statusbar.StatusBarNotification; +import com.android.internal.widget.SizeAdaptiveLayout; +import com.android.systemui.R; +import com.android.systemui.SearchPanelView; +import com.android.systemui.SystemUI; +import com.android.systemui.recent.RecentTasksLoader; +import com.android.systemui.recent.RecentsPanelView; +import com.android.systemui.recent.TaskDescription; +import com.android.systemui.statusbar.policy.NotificationRowLayout; +import com.android.systemui.statusbar.tablet.StatusBarPanel; + import android.app.ActivityManagerNative; import android.app.KeyguardManager; import android.app.PendingIntent; +import android.app.TaskStackBuilder; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; @@ -51,22 +66,6 @@ import android.widget.LinearLayout; import android.widget.PopupMenu; import android.widget.RemoteViews; -import com.android.internal.statusbar.IStatusBarService; -import com.android.internal.statusbar.StatusBarIcon; -import com.android.internal.statusbar.StatusBarIconList; -import com.android.internal.statusbar.StatusBarNotification; -import com.android.internal.widget.SizeAdaptiveLayout; -import com.android.systemui.R; -import com.android.systemui.SearchPanelView; -import com.android.systemui.SystemUI; -import com.android.systemui.recent.RecentTasksLoader; -import com.android.systemui.recent.RecentsPanelView; -import com.android.systemui.recent.TaskDescription; -import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.NotificationData.Entry; -import com.android.systemui.statusbar.policy.NotificationRowLayout; -import com.android.systemui.statusbar.tablet.StatusBarPanel; - import java.util.ArrayList; public abstract class BaseStatusBar extends SystemUI implements @@ -299,8 +298,8 @@ public abstract class BaseStatusBar extends SystemUI implements private void startApplicationDetailsActivity(String packageName) { Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, Uri.fromParts("package", packageName, null)); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - mContext.startActivity(intent); + intent.setComponent(intent.resolveActivity(mContext.getPackageManager())); + TaskStackBuilder.create(mContext).addNextIntentWithParentStack(intent).startActivities(); } protected View.OnLongClickListener getNotificationLongClicker() { |