Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 55d3bae2 authored by Dianne Hackborn's avatar Dianne Hackborn Committed by Android (Google) Code Review
Browse files

Merge "Change recents UIs to do task switches."

parents b66d287e b677746b
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@ import java.util.List;

import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.IActivityManager;
import android.app.IThumbnailReceiver;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.ActivityNotFoundException;
@@ -189,8 +191,15 @@ public class RecentApplicationsActivity extends Activity {
        public void onCardSelected(int n) {
            if (n < mActivityDescriptions.size()) {
                ActivityDescription item = mActivityDescriptions.get(n);
                if (item.id >= 0) {
                    // This is an active task; it should just go to the foreground.
                    IActivityManager am = ActivityManagerNative.getDefault();
                    try {
                        am.moveTaskToFront(item.id);
                    } catch (RemoteException e) {
                    }
                } else if (item.intent != null) {
                    // prepare a launch intent and send it
                if (item.intent != null) {
                    item.intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
                    try {
                        if (DBG) Log.v(TAG, "Starting intent " + item.intent);
+16 −4
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import java.util.ArrayList;
import java.util.List;

import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.IActivityManager;
import android.app.IThumbnailReceiver;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
@@ -236,7 +238,7 @@ public class RecentAppsPanel extends LinearLayout implements StatusBarPanel, OnC
            appIcon.setImageDrawable(activityDescription.icon);
            appDescription.setText(activityDescription.label);
            view.setOnClickListener(this);
            view.setTag(activityDescription.intent);
            view.setTag(activityDescription);
            Log.v(TAG, "Adding task: " + activityDescription.label);
            mRecentsContainer.addView(view);
        }
@@ -247,9 +249,19 @@ public class RecentAppsPanel extends LinearLayout implements StatusBarPanel, OnC
    }

    public void onClick(View v) {
        Intent intent = (Intent) v.getTag();
        ActivityDescription ad = (ActivityDescription)v.getTag();
        if (ad.id >= 0) {
            // This is an active task; it should just go to the foreground.
            IActivityManager am = ActivityManagerNative.getDefault();
            try {
                am.moveTaskToFront(ad.id);
            } catch (RemoteException e) {
            }
        } else {
            Intent intent = ad.intent;
            if (DEBUG) Log.v(TAG, "Starting activity " + intent);
            getContext().startActivity(intent);
        }
        mBar.animateCollapse();
    }
}
+39 −12
Original line number Diff line number Diff line
@@ -17,7 +17,9 @@
package com.android.internal.policy.impl;

import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.Dialog;
import android.app.IActivityManager;
import android.app.StatusBarManager;
import android.content.ActivityNotFoundException;
import android.content.BroadcastReceiver;
@@ -30,6 +32,8 @@ import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.RemoteException;
import android.util.Log;
import android.view.View;
import android.view.Window;
@@ -53,6 +57,22 @@ public class RecentApplicationsDialog extends Dialog implements OnClickListener
    View mNoAppsText;
    IntentFilter mBroadcastIntentFilter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);

    class RecentTag {
        ActivityManager.RecentTaskInfo info;
        Intent intent;
    }

    Handler mHandler = new Handler();
    Runnable mCleanup = new Runnable() {
        public void run() {
            // dump extra memory we're hanging on to
            for (TextView icon: mIcons) {
                icon.setCompoundDrawables(null, null, null, null);
                icon.setTag(null);
            }
        }
    };

    private int mIconSize;

    public RecentApplicationsDialog(Context context) {
@@ -115,12 +135,18 @@ public class RecentApplicationsDialog extends Dialog implements OnClickListener

        for (TextView b: mIcons) {
            if (b == v) {
                // prepare a launch intent and send it
                Intent intent = (Intent)b.getTag();
                if (intent != null) {
                    intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
                RecentTag tag = (RecentTag)b.getTag();
                if (tag.info.id >= 0) {
                    // This is an active task; it should just go to the foreground.
                    IActivityManager am = ActivityManagerNative.getDefault();
                    try {
                        getContext().startActivity(intent);
                        am.moveTaskToFront(tag.info.id);
                    } catch (RemoteException e) {
                    }
                } else if (tag.intent != null) {
                    tag.intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
                    try {
                        getContext().startActivity(tag.intent);
                    } catch (ActivityNotFoundException e) {
                        Log.w("Recent", "Unable to launch recent task", e);
                    }
@@ -144,6 +170,8 @@ public class RecentApplicationsDialog extends Dialog implements OnClickListener

        // receive broadcasts
        getContext().registerReceiver(mBroadcastReceiver, mBroadcastIntentFilter);

        mHandler.removeCallbacks(mCleanup);
    }

    /**
@@ -153,18 +181,14 @@ public class RecentApplicationsDialog extends Dialog implements OnClickListener
    public void onStop() {
        super.onStop();

        // dump extra memory we're hanging on to
        for (TextView icon: mIcons) {
            icon.setCompoundDrawables(null, null, null, null);
            icon.setTag(null);
        }

        if (sStatusBar != null) {
            sStatusBar.disable(StatusBarManager.DISABLE_NONE);
        }

        // stop receiving broadcasts
        getContext().unregisterReceiver(mBroadcastReceiver);

        mHandler.postDelayed(mCleanup, 100);
     }

    /**
@@ -224,7 +248,10 @@ public class RecentApplicationsDialog extends Dialog implements OnClickListener
                    tv.setText(title);
                    icon = iconUtilities.createIconDrawable(icon);
                    tv.setCompoundDrawables(null, icon, null, null);
                    tv.setTag(intent);
                    RecentTag tag = new RecentTag();
                    tag.info = info;
                    tag.intent = intent;
                    tv.setTag(tag);
                    tv.setVisibility(View.VISIBLE);
                    tv.setPressed(false);
                    tv.clearFocus();