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:
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user