启动多个自由小窗口时,后启动的小窗口没有展示在最前面

修改路径在frameworks下
frameworks\base\services\core\java\com\android\server\wm\ActivityStarter.java

在ActivityStarter.java文件下:找到下面的函数
startActivityInner(final ActivityRecord r, ActivityRecord sourceRecord,
IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
int startFlags, ActivityOptions options, Task inTask,
TaskFragment inTaskFragment, @BalCode int balCode,
NeededUriGrants intentGrants, int realCallingUid)

在此函数内几处代码添加判断:
1)
if (startResult != START_SUCCESS) {
++ reusedWindowingMode(sourceRecord, options);//此处添加判断
if (r.resultTo != null) {
r.resultTo.sendResult(INVALID_UID, r.resultWho, r.requestCode, RESULT_CANCELED,
null /* data /, null / dataGrants */);
}
return startResult;
}

2)
if (targetTaskTop != null) {
if (LAUNCH_SINGLE_INSTANCE == mLaunchMode && mSourceRecord != null
&& targetTask == mSourceRecord.getTask()) {
final ActivityRecord activity = mRootWindowContainer.findActivity(mIntent,
mStartActivity.info, false);
if (activity != null && activity.getTask() != targetTask) {
activity.destroyIfPossible(“Removes redundant singleInstance”);
}
}
startResult = recycleTask(targetTask, targetTaskTop, reusedTask, intentGrants);
if (startResult != START_SUCCESS) {
++ reusedWindowingMode(sourceRecord, options);//此处添加判断
return startResult;
}
} else {
mAddingToTask = true;
}
3)
++ reusedWindowingMode(sourceRecord, options);//此处添加判断
if (newTask) {
final Task taskToAffiliate = (mLaunchTaskBehind && mSourceRecord != null)
? mSourceRecord.getTask() : null;
setNewTask(taskToAffiliate);
} else if (mAddingToTask) {
addOrReparentStartingActivity(targetTask, “adding to task”);
}

import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM;
import android.graphics.Rect;
private void reusedWindowingMode(ActivityRecord sourceRecord, ActivityOptions options){
if (mTargetRootTask != null && mTargetRootTask.getWindowingMode() != WINDOWING_MODE_FREEFORM){
if (options != null){
if(options.getLaunchWindowingMode() == WINDOWING_MODE_FREEFORM){
mTargetRootTask.setWindowingMode(options.getLaunchWindowingMode());
mTargetRootTask.setBounds(options.getLaunchBounds());
mTargetRootTask.setAlwaysOnTop(true);
}
}else{
if(sourceRecord != null && sourceRecord.getWindowingMode() == WINDOWING_MODE_FREEFORM){
mTargetRootTask.setWindowingMode(sourceRecord.getWindowingMode());
final Rect appBounds = sourceRecord.getConfiguration().windowConfiguration.getAppBounds();
Rect rect = new Rect(appBounds.left + 50, appBounds.top + 50, appBounds.left + 1920 + 50, appBounds.top + 1080 + 50);
mTargetRootTask.setBounds(rect);
mTargetRootTask.setAlwaysOnTop(true);
}
}
}else{
if(sourceRecord != null && sourceRecord.getWindowingMode() == WINDOWING_MODE_FREEFORM){
mTargetRootTask.setWindowingMode(sourceRecord.getWindowingMode());
final Rect appBounds = sourceRecord.getConfiguration().windowConfiguration.getAppBounds();
Rect rect = new Rect(appBounds.left + 50, appBounds.top + 50, appBounds.left + 1920 + 50, appBounds.top + 1080 + 50);
mTargetRootTask.setBounds(rect);
mTargetRootTask.setAlwaysOnTop(true);
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值