Merge "Don don't blame if attr ctx created" into sc-dev am: 55b9b53e34
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14935399 Change-Id: I6cf2b01087c1a94bc9d20b46189fb02a65c28f8a
This commit is contained in:
@@ -33,10 +33,13 @@ import android.os.Binder;
|
|||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
|
import android.os.Looper;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import com.android.internal.util.function.pooled.PooledLambda;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@@ -225,6 +228,27 @@ public abstract class RecognitionService extends Service {
|
|||||||
*/
|
*/
|
||||||
protected abstract void onStopListening(Callback listener);
|
protected abstract void onStopListening(Callback listener);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Context createContext(@NonNull ContextParams contextParams) {
|
||||||
|
if (contextParams.getNextAttributionSource() != null) {
|
||||||
|
if (mHandler.getLooper().equals(Looper.myLooper())) {
|
||||||
|
handleAttributionContextCreation(contextParams.getNextAttributionSource());
|
||||||
|
} else {
|
||||||
|
mHandler.sendMessage(
|
||||||
|
PooledLambda.obtainMessage(this::handleAttributionContextCreation,
|
||||||
|
contextParams.getNextAttributionSource()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return super.createContext(contextParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void handleAttributionContextCreation(@NonNull AttributionSource attributionSource) {
|
||||||
|
if (mCurrentCallback != null
|
||||||
|
&& mCurrentCallback.mCallingAttributionSource.equals(attributionSource)) {
|
||||||
|
mCurrentCallback.mAttributionContextCreated = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public final IBinder onBind(final Intent intent) {
|
public final IBinder onBind(final Intent intent) {
|
||||||
if (DBG) Log.d(TAG, "onBind, intent=" + intent);
|
if (DBG) Log.d(TAG, "onBind, intent=" + intent);
|
||||||
@@ -249,6 +273,7 @@ public abstract class RecognitionService extends Service {
|
|||||||
private final IRecognitionListener mListener;
|
private final IRecognitionListener mListener;
|
||||||
private final @NonNull AttributionSource mCallingAttributionSource;
|
private final @NonNull AttributionSource mCallingAttributionSource;
|
||||||
private @Nullable Context mAttributionContext;
|
private @Nullable Context mAttributionContext;
|
||||||
|
private boolean mAttributionContextCreated;
|
||||||
|
|
||||||
private Callback(IRecognitionListener listener,
|
private Callback(IRecognitionListener listener,
|
||||||
@NonNull AttributionSource attributionSource) {
|
@NonNull AttributionSource attributionSource) {
|
||||||
@@ -421,7 +446,7 @@ public abstract class RecognitionService extends Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean checkPermissionAndStartDataDelivery() {
|
private boolean checkPermissionAndStartDataDelivery() {
|
||||||
if (isPerformingDataDelivery()) {
|
if (mCurrentCallback.mAttributionContextCreated) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (PermissionChecker.checkPermissionAndStartDataDelivery(
|
if (PermissionChecker.checkPermissionAndStartDataDelivery(
|
||||||
@@ -441,13 +466,4 @@ public abstract class RecognitionService extends Service {
|
|||||||
mCurrentCallback.getAttributionContextForCaller().getAttributionSource());
|
mCurrentCallback.getAttributionContextForCaller().getAttributionSource());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("ConstantCondition")
|
|
||||||
private boolean isPerformingDataDelivery() {
|
|
||||||
final int op = AppOpsManager.permissionToOpCode(Manifest.permission.RECORD_AUDIO);
|
|
||||||
final AppOpsManager appOpsManager = getSystemService(AppOpsManager.class);
|
|
||||||
return appOpsManager.isProxying(op, getAttributionTag(),
|
|
||||||
mCurrentCallback.getCallingAttributionSource().getUid(),
|
|
||||||
mCurrentCallback.getCallingAttributionSource().getPackageName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user