resolve merge conflicts of 9acd72c60b to stage-aosp-master

Bug: None
Test: TH
Merged-In: I2fcf25264c62acc801f9e62967072cd04e4641e7
Change-Id: I5bc6b8c20bda03b3760f13f747b1e2069bfd9ac1
This commit is contained in:
Mathew Inwood
2019-07-22 09:40:58 +01:00
6 changed files with 81 additions and 9 deletions

View File

@@ -790,6 +790,8 @@ public final class ActivityThread extends ClientTransactionHandler {
@Nullable
ContentCaptureOptions contentCaptureOptions;
long[] disabledCompatChanges;
@Override
public String toString() {
return "AppBindData{appInfo=" + appInfo + "}";
@@ -1002,7 +1004,8 @@ public final class ActivityThread extends ClientTransactionHandler {
boolean isRestrictedBackupMode, boolean persistent, Configuration config,
CompatibilityInfo compatInfo, Map services, Bundle coreSettings,
String buildSerial, AutofillOptions autofillOptions,
ContentCaptureOptions contentCaptureOptions) {
ContentCaptureOptions contentCaptureOptions,
long[] disabledCompatChanges) {
if (services != null) {
if (false) {
// Test code to make sure the app could see the passed-in services.
@@ -1048,8 +1051,7 @@ public final class ActivityThread extends ClientTransactionHandler {
data.compatInfo = compatInfo;
data.initProfilerInfo = profilerInfo;
data.buildSerial = buildSerial;
data.autofillOptions = autofillOptions;
data.contentCaptureOptions = contentCaptureOptions;
data.disabledCompatChanges = disabledCompatChanges;
sendMessage(H.BIND_APPLICATION, data);
}
@@ -6134,6 +6136,7 @@ public final class ActivityThread extends ClientTransactionHandler {
// Note when this process has started.
Process.setStartTimes(SystemClock.elapsedRealtime(), SystemClock.uptimeMillis());
AppCompatCallbacks.install(data.disabledCompatChanges);
mBoundApplication = data;
mConfiguration = new Configuration(data.config);
mCompatConfiguration = new Configuration(data.config);

View File

@@ -0,0 +1,64 @@
/*
* Copyright (C) 2019 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.app;
import android.compat.Compatibility;
import android.os.Process;
import android.util.Log;
import java.util.Arrays;
/**
* App process implementation of the {@link Compatibility} API.
*
* @hide
*/
public final class AppCompatCallbacks extends Compatibility.Callbacks {
private static final String TAG = "Compatibility";
private final long[] mDisabledChanges;
/**
* Install this class into the current process.
*
* @param disabledChanges Set of compatibility changes that are disabled for this process.
*/
public static void install(long[] disabledChanges) {
Compatibility.setCallbacks(new AppCompatCallbacks(disabledChanges));
}
private AppCompatCallbacks(long[] disabledChanges) {
mDisabledChanges = Arrays.copyOf(disabledChanges, disabledChanges.length);
Arrays.sort(mDisabledChanges);
}
protected void reportChange(long changeId) {
Log.d(TAG, "Compat change reported: " + changeId + "; UID " + Process.myUid());
// TODO log via StatsLog
}
protected boolean isChangeEnabled(long changeId) {
if (Arrays.binarySearch(mDisabledChanges, changeId) < 0) {
// Not present in the disabled array
reportChange(changeId);
return true;
}
return false;
}
}

View File

@@ -73,7 +73,7 @@ oneway interface IApplicationThread {
boolean restrictedBackupMode, boolean persistent, in Configuration config,
in CompatibilityInfo compatInfo, in Map services,
in Bundle coreSettings, in String buildSerial, in AutofillOptions autofillOptions,
in ContentCaptureOptions contentCaptureOptions);
in ContentCaptureOptions contentCaptureOptions, in long[] disabledCompatChanges);
void runIsolatedEntryPoint(in String entryPoint, in String[] entryPointArgs);
void scheduleExit();
void scheduleServiceArgs(IBinder token, in ParceledListSlice args);

View File

@@ -32,8 +32,8 @@ import android.view.WindowManager;
import android.view.WindowManager.LayoutParams;
/**
* CompatibilityInfo class keeps the information about compatibility mode that the application is
* running under.
* CompatibilityInfo class keeps the information about the screen compatibility mode that the
* application is running under.
*
* {@hide}
*/

View File

@@ -416,7 +416,8 @@ public class TransactionParcelTests {
IUiAutomationConnection iUiAutomationConnection, int i, boolean b, boolean b1,
boolean b2, boolean b3, Configuration configuration,
CompatibilityInfo compatibilityInfo, Map map, Bundle bundle1, String s1,
AutofillOptions ao, ContentCaptureOptions co) throws RemoteException {
AutofillOptions ao, ContentCaptureOptions co, long[] disableCompatChanges)
throws RemoteException {
}
@Override

View File

@@ -348,6 +348,7 @@ import com.android.server.ThreadPriorityBooster;
import com.android.server.Watchdog;
import com.android.server.am.ActivityManagerServiceDumpProcessesProto.UidObserverRegistrationProto;
import com.android.server.appop.AppOpsService;
import com.android.server.compat.CompatConfig;
import com.android.server.contentcapture.ContentCaptureManagerInternal;
import com.android.server.firewall.IntentFirewall;
import com.android.server.job.JobSchedulerInternal;
@@ -5038,6 +5039,7 @@ public class ActivityManagerService extends IActivityManager.Stub
bindApplicationTimeMillis = SystemClock.elapsedRealtime();
mAtmInternal.preBindApplication(app.getWindowProcessController());
final ActiveInstrumentation instr2 = app.getActiveInstrumentation();
long[] disabledCompatChanges = CompatConfig.get().getDisabledChanges(app.info);
if (app.isolatedEntryPoint != null) {
// This is an isolated process which should just call an entry point instead of
// being bound to an application.
@@ -5053,7 +5055,8 @@ public class ActivityManagerService extends IActivityManager.Stub
new Configuration(app.getWindowProcessController().getConfiguration()),
app.compat, getCommonServicesLocked(app.isolated),
mCoreSettingsObserver.getCoreSettingsLocked(),
buildSerial, autofillOptions, contentCaptureOptions);
buildSerial, autofillOptions, contentCaptureOptions,
disabledCompatChanges);
} else {
thread.bindApplication(processName, appInfo, providers, null, profilerInfo,
null, null, null, testMode,
@@ -5062,7 +5065,8 @@ public class ActivityManagerService extends IActivityManager.Stub
new Configuration(app.getWindowProcessController().getConfiguration()),
app.compat, getCommonServicesLocked(app.isolated),
mCoreSettingsObserver.getCoreSettingsLocked(),
buildSerial, autofillOptions, contentCaptureOptions);
buildSerial, autofillOptions, contentCaptureOptions,
disabledCompatChanges);
}
if (profilerInfo != null) {
profilerInfo.closeFd();