am ffda4648: Merge "Fixes for ActivityView on home activity" into klp-modular-dev

* commit 'ffda464851008f750246f343c939d8003071cd23':
  Fixes for ActivityView on home activity
This commit is contained in:
Craig Mautner
2014-02-22 07:33:24 +00:00
committed by Android Git Automerger
2 changed files with 47 additions and 13 deletions

View File

@ -39,6 +39,7 @@ import android.view.WindowManager;
public class ActivityView extends ViewGroup { public class ActivityView extends ViewGroup {
private final String TAG = "ActivityView"; private final String TAG = "ActivityView";
private final boolean DEBUG = false;
private final TextureView mTextureView; private final TextureView mTextureView;
private IActivityContainer mActivityContainer; private IActivityContainer mActivityContainer;
@ -76,6 +77,7 @@ public class ActivityView extends ViewGroup {
mTextureView = new TextureView(context); mTextureView = new TextureView(context);
mTextureView.setSurfaceTextureListener(new ActivityViewSurfaceTextureListener()); mTextureView.setSurfaceTextureListener(new ActivityViewSurfaceTextureListener());
addView(mTextureView); addView(mTextureView);
if (DEBUG) Log.v(TAG, "ctor()");
} }
@Override @Override
@ -85,6 +87,8 @@ public class ActivityView extends ViewGroup {
@Override @Override
protected void onAttachedToWindow() { protected void onAttachedToWindow() {
if (DEBUG) Log.v(TAG, "onAttachedToWindow()");
super.onAttachedToWindow();
try { try {
final IBinder token = mActivity.getActivityToken(); final IBinder token = mActivity.getActivityToken();
mActivityContainer = mActivityContainer =
@ -99,6 +103,8 @@ public class ActivityView extends ViewGroup {
@Override @Override
protected void onDetachedFromWindow() { protected void onDetachedFromWindow() {
if (DEBUG) Log.v(TAG, "onDetachedFromWindow(): mActivityContainer=" + mActivityContainer);
super.onDetachedFromWindow();
if (mActivityContainer != null) { if (mActivityContainer != null) {
detach(); detach();
mActivityContainer = null; mActivityContainer = null;
@ -107,11 +113,17 @@ public class ActivityView extends ViewGroup {
@Override @Override
protected void onWindowVisibilityChanged(int visibility) { protected void onWindowVisibilityChanged(int visibility) {
if (DEBUG) Log.v(TAG, "onWindowVisibilityChanged(): visibility=" + visibility);
super.onWindowVisibilityChanged(visibility); super.onWindowVisibilityChanged(visibility);
if (visibility == View.VISIBLE) { switch (visibility) {
case View.VISIBLE:
attachToSurfaceWhenReady(); attachToSurfaceWhenReady();
} else { break;
case View.INVISIBLE:
break;
case View.GONE:
detach(); detach();
break;
} }
} }
@ -143,6 +155,8 @@ public class ActivityView extends ViewGroup {
} }
public void startActivity(Intent intent) { public void startActivity(Intent intent) {
if (DEBUG) Log.v(TAG, "startActivity(): intent=" + intent + " " +
(isAttachedToDisplay() ? "" : "not") + " attached");
if (mSurface != null) { if (mSurface != null) {
try { try {
mActivityContainer.startActivity(intent); mActivityContainer.startActivity(intent);
@ -165,6 +179,8 @@ public class ActivityView extends ViewGroup {
} }
public void startActivity(IntentSender intentSender) { public void startActivity(IntentSender intentSender) {
if (DEBUG) Log.v(TAG, "startActivityIntentSender(): intentSender=" + intentSender + " " +
(isAttachedToDisplay() ? "" : "not") + " attached");
final IIntentSender iIntentSender = intentSender.getTarget(); final IIntentSender iIntentSender = intentSender.getTarget();
if (mSurface != null) { if (mSurface != null) {
startActivityIntentSender(iIntentSender); startActivityIntentSender(iIntentSender);
@ -175,6 +191,8 @@ public class ActivityView extends ViewGroup {
} }
public void startActivity(PendingIntent pendingIntent) { public void startActivity(PendingIntent pendingIntent) {
if (DEBUG) Log.v(TAG, "startActivityPendingIntent(): PendingIntent=" + pendingIntent + " "
+ (isAttachedToDisplay() ? "" : "not") + " attached");
final IIntentSender iIntentSender = pendingIntent.getTarget(); final IIntentSender iIntentSender = pendingIntent.getTarget();
if (mSurface != null) { if (mSurface != null) {
startActivityIntentSender(iIntentSender); startActivityIntentSender(iIntentSender);
@ -205,6 +223,8 @@ public class ActivityView extends ViewGroup {
"ActivityView: Unable to create ActivityContainer. " + e); "ActivityView: Unable to create ActivityContainer. " + e);
} }
if (DEBUG) Log.v(TAG, "attachToSurfaceWhenReady: " + (mQueuedIntent != null ||
mQueuedPendingIntent != null ? "" : "no") + " queued intent");
if (mQueuedIntent != null) { if (mQueuedIntent != null) {
startActivity(mQueuedIntent); startActivity(mQueuedIntent);
mQueuedIntent = null; mQueuedIntent = null;
@ -215,6 +235,7 @@ public class ActivityView extends ViewGroup {
} }
private void detach() { private void detach() {
if (DEBUG) Log.d(TAG, "detach: attached=" + isAttachedToDisplay());
if (mSurface != null) { if (mSurface != null) {
try { try {
mActivityContainer.detachFromDisplay(); mActivityContainer.detachFromDisplay();
@ -229,6 +250,8 @@ public class ActivityView extends ViewGroup {
@Override @Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width,
int height) { int height) {
if (DEBUG) Log.d(TAG, "onSurfaceTextureAvailable: width=" + width + " height="
+ height);
mWidth = width; mWidth = width;
mHeight = height; mHeight = height;
if (mActivityContainer != null) { if (mActivityContainer != null) {
@ -239,12 +262,12 @@ public class ActivityView extends ViewGroup {
@Override @Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int width, public void onSurfaceTextureSizeChanged(SurfaceTexture surfaceTexture, int width,
int height) { int height) {
Log.d(TAG, "onSurfaceTextureSizeChanged: w=" + width + " h=" + height); if (DEBUG) Log.d(TAG, "onSurfaceTextureSizeChanged: w=" + width + " h=" + height);
} }
@Override @Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) { public boolean onSurfaceTextureDestroyed(SurfaceTexture surfaceTexture) {
Log.d(TAG, "onSurfaceTextureDestroyed"); if (DEBUG) Log.d(TAG, "onSurfaceTextureDestroyed");
detach(); detach();
return true; return true;
} }

View File

@ -1375,8 +1375,15 @@ public final class ActivityStackSupervisor implements DisplayListener {
void setFocusedStack(ActivityRecord r) { void setFocusedStack(ActivityRecord r) {
if (r != null) { if (r != null) {
final boolean isHomeActivity = final TaskRecord task = r.task;
!r.isApplicationActivity() || (r.task != null && !r.task.isApplicationTask()); boolean isHomeActivity = !r.isApplicationActivity();
if (!isHomeActivity && task != null) {
isHomeActivity = !task.isApplicationTask();
}
if (!isHomeActivity && task != null) {
final ActivityRecord parent = task.stack.mActivityContainer.mParentActivity;
isHomeActivity = parent != null && parent.isHomeActivity();
}
moveHomeStack(isHomeActivity); moveHomeStack(isHomeActivity);
} }
} }
@ -2058,17 +2065,21 @@ public final class ActivityStackSupervisor implements DisplayListener {
if (targetStack == null) { if (targetStack == null) {
targetStack = getFocusedStack(); targetStack = getFocusedStack();
} }
// Do targetStack first.
boolean result = false; boolean result = false;
if (isFrontStack(targetStack)) {
result = targetStack.resumeTopActivityLocked(target, targetOptions);
}
for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) { for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks; final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) { for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
final ActivityStack stack = stacks.get(stackNdx); final ActivityStack stack = stacks.get(stackNdx);
if (isFrontStack(stack)) {
if (stack == targetStack) { if (stack == targetStack) {
result = stack.resumeTopActivityLocked(target, targetOptions); // Already started above.
} else { continue;
stack.resumeTopActivityLocked(null);
} }
if (isFrontStack(stack)) {
stack.resumeTopActivityLocked(null);
} }
} }
} }