Loading core/java/android/accounts/ChooseTypeAndAccountActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -402,7 +402,7 @@ public class ChooseTypeAndAccountActivity extends Activity mExistingAccounts = AccountManager.get(this).getAccountsForPackage(mCallingPackage, mCallingUid); intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK); startActivityForResult(intent, REQUEST_ADD_ACCOUNT); startActivityForResult(new Intent(intent), REQUEST_ADD_ACCOUNT); return; } } catch (OperationCanceledException e) { Loading core/java/android/app/AppOpsManager.java +13 −9 Original line number Diff line number Diff line Loading @@ -9134,8 +9134,9 @@ public class AppOpsManager { */ public int startProxyOpNoThrow(int op, @NonNull AttributionSource attributionSource, @Nullable String message, boolean skipProxyOperation) { return startProxyOpNoThrow(op, attributionSource, message, skipProxyOperation, ATTRIBUTION_FLAGS_NONE, ATTRIBUTION_FLAGS_NONE, ATTRIBUTION_CHAIN_ID_NONE); return startProxyOpNoThrow(attributionSource.getToken(), op, attributionSource, message, skipProxyOperation, ATTRIBUTION_FLAGS_NONE, ATTRIBUTION_FLAGS_NONE, ATTRIBUTION_CHAIN_ID_NONE); } /** Loading @@ -9147,7 +9148,8 @@ public class AppOpsManager { * * @hide */ public int startProxyOpNoThrow(int op, @NonNull AttributionSource attributionSource, public int startProxyOpNoThrow(@NonNull IBinder clientId, int op, @NonNull AttributionSource attributionSource, @Nullable String message, boolean skipProxyOperation, @AttributionFlags int proxyAttributionFlags, @AttributionFlags int proxiedAttributionFlags, int attributionChainId) { Loading @@ -9165,7 +9167,7 @@ public class AppOpsManager { } } SyncNotedAppOp syncOp = mService.startProxyOperation(op, SyncNotedAppOp syncOp = mService.startProxyOperation(clientId, op, attributionSource, false, collectionMode == COLLECT_ASYNC, message, shouldCollectMessage, skipProxyOperation, proxyAttributionFlags, proxiedAttributionFlags, attributionChainId); Loading Loading @@ -9263,9 +9265,10 @@ public class AppOpsManager { */ public void finishProxyOp(@NonNull String op, int proxiedUid, @NonNull String proxiedPackageName, @Nullable String proxiedAttributionTag) { finishProxyOp(op, new AttributionSource(mContext.getAttributionSource(), IBinder token = mContext.getAttributionSource().getToken(); finishProxyOp(token, op, new AttributionSource(mContext.getAttributionSource(), new AttributionSource(proxiedUid, proxiedPackageName, proxiedAttributionTag, mContext.getAttributionSource().getToken())), /*skipProxyOperation*/ false); token)), /*skipProxyOperation*/ false); } /** Loading @@ -9280,10 +9283,11 @@ public class AppOpsManager { * * @hide */ public void finishProxyOp(@NonNull String op, @NonNull AttributionSource attributionSource, boolean skipProxyOperation) { public void finishProxyOp(@NonNull IBinder clientId, @NonNull String op, @NonNull AttributionSource attributionSource, boolean skipProxyOperation) { try { mService.finishProxyOperation(strOpToOp(op), attributionSource, skipProxyOperation); mService.finishProxyOperation(clientId, strOpToOp(op), attributionSource, skipProxyOperation); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Loading core/java/android/app/AppOpsManagerInternal.java +14 −9 Original line number Diff line number Diff line Loading @@ -26,13 +26,11 @@ import android.util.SparseArray; import android.util.SparseIntArray; import com.android.internal.app.IAppOpsCallback; import com.android.internal.util.function.DecFunction; import com.android.internal.util.function.HeptFunction; import com.android.internal.util.function.HexFunction; import com.android.internal.util.function.QuadFunction; import com.android.internal.util.function.QuintConsumer; import com.android.internal.util.function.QuintFunction; import com.android.internal.util.function.TriFunction; import com.android.internal.util.function.UndecFunction; /** Loading Loading @@ -135,6 +133,7 @@ public abstract class AppOpsManagerInternal { /** * Allows overriding start proxy operation behavior. * * @param clientId The client calling start, represented by an IBinder * @param code The op code to start. * @param attributionSource The permission identity of the caller. * @param startIfModeDefault Whether to start the op of the mode is default. Loading @@ -148,11 +147,12 @@ public abstract class AppOpsManagerInternal { * @param superImpl The super implementation. * @return The app op note result. */ SyncNotedAppOp startProxyOperation(int code, @NonNull AttributionSource attributionSource, boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp, String message, boolean shouldCollectMessage, boolean skipProxyOperation, @AttributionFlags int proxyAttributionFlags, @AttributionFlags int proxiedAttributionFlags, int attributionChainId, @NonNull DecFunction<Integer, AttributionSource, Boolean, SyncNotedAppOp startProxyOperation(@NonNull IBinder clientId, int code, @NonNull AttributionSource attributionSource, boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp, String message, boolean shouldCollectMessage, boolean skipProxyOperation, @AttributionFlags int proxyAttributionFlags, @AttributionFlags int proxiedAttributionFlags, int attributionChainId, @NonNull UndecFunction<IBinder, Integer, AttributionSource, Boolean, Boolean, String, Boolean, Boolean, Integer, Integer, Integer, SyncNotedAppOp> superImpl); Loading @@ -176,10 +176,15 @@ public abstract class AppOpsManagerInternal { * * @param code The op code to finish. * @param attributionSource The permission identity of the caller. * @param skipProxyOperation Whether to skip the proxy in the proxy/proxied operation * @param clientId The client calling finishProxyOperation * @param superImpl The "standard" implementation to potentially call */ void finishProxyOperation(int code, @NonNull AttributionSource attributionSource, void finishProxyOperation(@NonNull IBinder clientId, int code, @NonNull AttributionSource attributionSource, boolean skipProxyOperation, @NonNull TriFunction<Integer, AttributionSource, Boolean, Void> superImpl); @NonNull QuadFunction<IBinder, Integer, AttributionSource, Boolean, Void> superImpl); } /** Loading core/java/com/android/internal/app/IAppOpsService.aidl +6 −5 Original line number Diff line number Diff line Loading @@ -58,11 +58,12 @@ interface IAppOpsService { SyncNotedAppOp noteProxyOperation(int code, in AttributionSource attributionSource, boolean shouldCollectAsyncNotedOp, String message, boolean shouldCollectMessage, boolean skipProxyOperation); SyncNotedAppOp startProxyOperation(int code, in AttributionSource attributionSource, boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp, String message, boolean shouldCollectMessage, boolean skipProxyOperation, int proxyAttributionFlags, int proxiedAttributionFlags, int attributionChainId); void finishProxyOperation(int code, in AttributionSource attributionSource, SyncNotedAppOp startProxyOperation(IBinder clientId, int code, in AttributionSource attributionSource, boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp, String message, boolean shouldCollectMessage, boolean skipProxyOperation, int proxyAttributionFlags, int proxiedAttributionFlags, int attributionChainId); void finishProxyOperation(IBinder clientId, int code, in AttributionSource attributionSource, boolean skipProxyOperation); // Remaining methods are only used in Java. Loading packages/SettingsProvider/src/com/android/providers/settings/SettingsService.java +30 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.app.ContentProviderHolder; import android.content.AttributionSource; import android.content.IContentProvider; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.os.Binder; import android.os.Bundle; import android.os.IBinder; Loading @@ -39,6 +40,7 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; Loading Loading @@ -92,6 +94,34 @@ final public class SettingsService extends Binder { mProvider.dumpProto(fd); } else { mProvider.dumpInternal(fd, pw, args); // Dump LineageSettings per user, as they would appear if listed via shell. final UserManager userManager = UserManager.get(mProvider.getContext()); for (UserInfo user : userManager.getAliveUsers()) { final String[] tables = new String[] { "GLOBAL", "SECURE", "SYSTEM" }; for (String table : Arrays.asList(tables)) { pw.println("LINEAGE " + table + " SETTINGS (user " + user.id + ")"); // shellCmd will create its own buffered writer for the same fd, // so we must flush. pw.flush(); // Prepare and execute the shell command. final MyShellCommand shellCmd = new MyShellCommand(mProvider, true /* dumping */); final String[] cmdArgs = new String[] { "list", "--lineage", "--user", String.valueOf(user.id), table.toLowerCase() }; shellCmd.exec(this, null /* in */, fd /* out */, fd /* err */, cmdArgs, null /* callback */, null /* resultReceiver */); pw.println(); } } } } finally { Binder.restoreCallingIdentity(ident); Loading Loading
core/java/android/accounts/ChooseTypeAndAccountActivity.java +1 −1 Original line number Diff line number Diff line Loading @@ -402,7 +402,7 @@ public class ChooseTypeAndAccountActivity extends Activity mExistingAccounts = AccountManager.get(this).getAccountsForPackage(mCallingPackage, mCallingUid); intent.setFlags(intent.getFlags() & ~Intent.FLAG_ACTIVITY_NEW_TASK); startActivityForResult(intent, REQUEST_ADD_ACCOUNT); startActivityForResult(new Intent(intent), REQUEST_ADD_ACCOUNT); return; } } catch (OperationCanceledException e) { Loading
core/java/android/app/AppOpsManager.java +13 −9 Original line number Diff line number Diff line Loading @@ -9134,8 +9134,9 @@ public class AppOpsManager { */ public int startProxyOpNoThrow(int op, @NonNull AttributionSource attributionSource, @Nullable String message, boolean skipProxyOperation) { return startProxyOpNoThrow(op, attributionSource, message, skipProxyOperation, ATTRIBUTION_FLAGS_NONE, ATTRIBUTION_FLAGS_NONE, ATTRIBUTION_CHAIN_ID_NONE); return startProxyOpNoThrow(attributionSource.getToken(), op, attributionSource, message, skipProxyOperation, ATTRIBUTION_FLAGS_NONE, ATTRIBUTION_FLAGS_NONE, ATTRIBUTION_CHAIN_ID_NONE); } /** Loading @@ -9147,7 +9148,8 @@ public class AppOpsManager { * * @hide */ public int startProxyOpNoThrow(int op, @NonNull AttributionSource attributionSource, public int startProxyOpNoThrow(@NonNull IBinder clientId, int op, @NonNull AttributionSource attributionSource, @Nullable String message, boolean skipProxyOperation, @AttributionFlags int proxyAttributionFlags, @AttributionFlags int proxiedAttributionFlags, int attributionChainId) { Loading @@ -9165,7 +9167,7 @@ public class AppOpsManager { } } SyncNotedAppOp syncOp = mService.startProxyOperation(op, SyncNotedAppOp syncOp = mService.startProxyOperation(clientId, op, attributionSource, false, collectionMode == COLLECT_ASYNC, message, shouldCollectMessage, skipProxyOperation, proxyAttributionFlags, proxiedAttributionFlags, attributionChainId); Loading Loading @@ -9263,9 +9265,10 @@ public class AppOpsManager { */ public void finishProxyOp(@NonNull String op, int proxiedUid, @NonNull String proxiedPackageName, @Nullable String proxiedAttributionTag) { finishProxyOp(op, new AttributionSource(mContext.getAttributionSource(), IBinder token = mContext.getAttributionSource().getToken(); finishProxyOp(token, op, new AttributionSource(mContext.getAttributionSource(), new AttributionSource(proxiedUid, proxiedPackageName, proxiedAttributionTag, mContext.getAttributionSource().getToken())), /*skipProxyOperation*/ false); token)), /*skipProxyOperation*/ false); } /** Loading @@ -9280,10 +9283,11 @@ public class AppOpsManager { * * @hide */ public void finishProxyOp(@NonNull String op, @NonNull AttributionSource attributionSource, boolean skipProxyOperation) { public void finishProxyOp(@NonNull IBinder clientId, @NonNull String op, @NonNull AttributionSource attributionSource, boolean skipProxyOperation) { try { mService.finishProxyOperation(strOpToOp(op), attributionSource, skipProxyOperation); mService.finishProxyOperation(clientId, strOpToOp(op), attributionSource, skipProxyOperation); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } Loading
core/java/android/app/AppOpsManagerInternal.java +14 −9 Original line number Diff line number Diff line Loading @@ -26,13 +26,11 @@ import android.util.SparseArray; import android.util.SparseIntArray; import com.android.internal.app.IAppOpsCallback; import com.android.internal.util.function.DecFunction; import com.android.internal.util.function.HeptFunction; import com.android.internal.util.function.HexFunction; import com.android.internal.util.function.QuadFunction; import com.android.internal.util.function.QuintConsumer; import com.android.internal.util.function.QuintFunction; import com.android.internal.util.function.TriFunction; import com.android.internal.util.function.UndecFunction; /** Loading Loading @@ -135,6 +133,7 @@ public abstract class AppOpsManagerInternal { /** * Allows overriding start proxy operation behavior. * * @param clientId The client calling start, represented by an IBinder * @param code The op code to start. * @param attributionSource The permission identity of the caller. * @param startIfModeDefault Whether to start the op of the mode is default. Loading @@ -148,11 +147,12 @@ public abstract class AppOpsManagerInternal { * @param superImpl The super implementation. * @return The app op note result. */ SyncNotedAppOp startProxyOperation(int code, @NonNull AttributionSource attributionSource, boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp, String message, boolean shouldCollectMessage, boolean skipProxyOperation, @AttributionFlags int proxyAttributionFlags, @AttributionFlags int proxiedAttributionFlags, int attributionChainId, @NonNull DecFunction<Integer, AttributionSource, Boolean, SyncNotedAppOp startProxyOperation(@NonNull IBinder clientId, int code, @NonNull AttributionSource attributionSource, boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp, String message, boolean shouldCollectMessage, boolean skipProxyOperation, @AttributionFlags int proxyAttributionFlags, @AttributionFlags int proxiedAttributionFlags, int attributionChainId, @NonNull UndecFunction<IBinder, Integer, AttributionSource, Boolean, Boolean, String, Boolean, Boolean, Integer, Integer, Integer, SyncNotedAppOp> superImpl); Loading @@ -176,10 +176,15 @@ public abstract class AppOpsManagerInternal { * * @param code The op code to finish. * @param attributionSource The permission identity of the caller. * @param skipProxyOperation Whether to skip the proxy in the proxy/proxied operation * @param clientId The client calling finishProxyOperation * @param superImpl The "standard" implementation to potentially call */ void finishProxyOperation(int code, @NonNull AttributionSource attributionSource, void finishProxyOperation(@NonNull IBinder clientId, int code, @NonNull AttributionSource attributionSource, boolean skipProxyOperation, @NonNull TriFunction<Integer, AttributionSource, Boolean, Void> superImpl); @NonNull QuadFunction<IBinder, Integer, AttributionSource, Boolean, Void> superImpl); } /** Loading
core/java/com/android/internal/app/IAppOpsService.aidl +6 −5 Original line number Diff line number Diff line Loading @@ -58,11 +58,12 @@ interface IAppOpsService { SyncNotedAppOp noteProxyOperation(int code, in AttributionSource attributionSource, boolean shouldCollectAsyncNotedOp, String message, boolean shouldCollectMessage, boolean skipProxyOperation); SyncNotedAppOp startProxyOperation(int code, in AttributionSource attributionSource, boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp, String message, boolean shouldCollectMessage, boolean skipProxyOperation, int proxyAttributionFlags, int proxiedAttributionFlags, int attributionChainId); void finishProxyOperation(int code, in AttributionSource attributionSource, SyncNotedAppOp startProxyOperation(IBinder clientId, int code, in AttributionSource attributionSource, boolean startIfModeDefault, boolean shouldCollectAsyncNotedOp, String message, boolean shouldCollectMessage, boolean skipProxyOperation, int proxyAttributionFlags, int proxiedAttributionFlags, int attributionChainId); void finishProxyOperation(IBinder clientId, int code, in AttributionSource attributionSource, boolean skipProxyOperation); // Remaining methods are only used in Java. Loading
packages/SettingsProvider/src/com/android/providers/settings/SettingsService.java +30 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.app.ContentProviderHolder; import android.content.AttributionSource; import android.content.IContentProvider; import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.os.Binder; import android.os.Bundle; import android.os.IBinder; Loading @@ -39,6 +40,7 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; Loading Loading @@ -92,6 +94,34 @@ final public class SettingsService extends Binder { mProvider.dumpProto(fd); } else { mProvider.dumpInternal(fd, pw, args); // Dump LineageSettings per user, as they would appear if listed via shell. final UserManager userManager = UserManager.get(mProvider.getContext()); for (UserInfo user : userManager.getAliveUsers()) { final String[] tables = new String[] { "GLOBAL", "SECURE", "SYSTEM" }; for (String table : Arrays.asList(tables)) { pw.println("LINEAGE " + table + " SETTINGS (user " + user.id + ")"); // shellCmd will create its own buffered writer for the same fd, // so we must flush. pw.flush(); // Prepare and execute the shell command. final MyShellCommand shellCmd = new MyShellCommand(mProvider, true /* dumping */); final String[] cmdArgs = new String[] { "list", "--lineage", "--user", String.valueOf(user.id), table.toLowerCase() }; shellCmd.exec(this, null /* in */, fd /* out */, fd /* err */, cmdArgs, null /* callback */, null /* resultReceiver */); pw.println(); } } } } finally { Binder.restoreCallingIdentity(ident); Loading