98 lines
4.9 KiB
Java
98 lines
4.9 KiB
Java
|
package androidx.room;
|
||
|
|
||
|
import android.app.Service;
|
||
|
import android.content.Intent;
|
||
|
import android.os.IBinder;
|
||
|
import android.os.RemoteCallbackList;
|
||
|
import android.os.RemoteException;
|
||
|
import android.util.Log;
|
||
|
import androidx.annotation.Nullable;
|
||
|
import androidx.annotation.RestrictTo;
|
||
|
import androidx.room.IMultiInstanceInvalidationService;
|
||
|
import java.util.HashMap;
|
||
|
@RestrictTo({RestrictTo.Scope.LIBRARY_GROUP_PREFIX})
|
||
|
public class MultiInstanceInvalidationService extends Service {
|
||
|
private final IMultiInstanceInvalidationService.Stub mBinder = new AnonymousClass2();
|
||
|
public final RemoteCallbackList<IMultiInstanceInvalidationCallback> mCallbackList = new AnonymousClass1();
|
||
|
public final HashMap<Integer, String> mClientNames = new HashMap<>();
|
||
|
public int mMaxClientId = 0;
|
||
|
|
||
|
/* renamed from: androidx.room.MultiInstanceInvalidationService$1 reason: invalid class name */
|
||
|
public class AnonymousClass1 extends RemoteCallbackList<IMultiInstanceInvalidationCallback> {
|
||
|
public AnonymousClass1() {
|
||
|
}
|
||
|
|
||
|
public void onCallbackDied(IMultiInstanceInvalidationCallback iMultiInstanceInvalidationCallback, Object obj) {
|
||
|
MultiInstanceInvalidationService.this.mClientNames.remove(Integer.valueOf(((Integer) obj).intValue()));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* renamed from: androidx.room.MultiInstanceInvalidationService$2 reason: invalid class name */
|
||
|
public class AnonymousClass2 extends IMultiInstanceInvalidationService.Stub {
|
||
|
public AnonymousClass2() {
|
||
|
}
|
||
|
|
||
|
@Override // androidx.room.IMultiInstanceInvalidationService
|
||
|
public void broadcastInvalidation(int i, String[] strArr) {
|
||
|
synchronized (MultiInstanceInvalidationService.this.mCallbackList) {
|
||
|
String str = MultiInstanceInvalidationService.this.mClientNames.get(Integer.valueOf(i));
|
||
|
if (str == null) {
|
||
|
Log.w("ROOM", "Remote invalidation client ID not registered");
|
||
|
return;
|
||
|
}
|
||
|
int beginBroadcast = MultiInstanceInvalidationService.this.mCallbackList.beginBroadcast();
|
||
|
for (int i2 = 0; i2 < beginBroadcast; i2++) {
|
||
|
try {
|
||
|
int intValue = ((Integer) MultiInstanceInvalidationService.this.mCallbackList.getBroadcastCookie(i2)).intValue();
|
||
|
String str2 = MultiInstanceInvalidationService.this.mClientNames.get(Integer.valueOf(intValue));
|
||
|
if (i != intValue && str.equals(str2)) {
|
||
|
try {
|
||
|
MultiInstanceInvalidationService.this.mCallbackList.getBroadcastItem(i2).onInvalidation(strArr);
|
||
|
} catch (RemoteException e) {
|
||
|
Log.w("ROOM", "Error invoking a remote callback", e);
|
||
|
}
|
||
|
}
|
||
|
} catch (Throwable th) {
|
||
|
MultiInstanceInvalidationService.this.mCallbackList.finishBroadcast();
|
||
|
throw th;
|
||
|
}
|
||
|
}
|
||
|
MultiInstanceInvalidationService.this.mCallbackList.finishBroadcast();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // androidx.room.IMultiInstanceInvalidationService
|
||
|
public int registerCallback(IMultiInstanceInvalidationCallback iMultiInstanceInvalidationCallback, String str) {
|
||
|
if (str == null) {
|
||
|
return 0;
|
||
|
}
|
||
|
synchronized (MultiInstanceInvalidationService.this.mCallbackList) {
|
||
|
MultiInstanceInvalidationService multiInstanceInvalidationService = MultiInstanceInvalidationService.this;
|
||
|
int i = multiInstanceInvalidationService.mMaxClientId + 1;
|
||
|
multiInstanceInvalidationService.mMaxClientId = i;
|
||
|
if (multiInstanceInvalidationService.mCallbackList.register(iMultiInstanceInvalidationCallback, Integer.valueOf(i))) {
|
||
|
MultiInstanceInvalidationService.this.mClientNames.put(Integer.valueOf(i), str);
|
||
|
return i;
|
||
|
}
|
||
|
MultiInstanceInvalidationService multiInstanceInvalidationService2 = MultiInstanceInvalidationService.this;
|
||
|
multiInstanceInvalidationService2.mMaxClientId--;
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // androidx.room.IMultiInstanceInvalidationService
|
||
|
public void unregisterCallback(IMultiInstanceInvalidationCallback iMultiInstanceInvalidationCallback, int i) {
|
||
|
synchronized (MultiInstanceInvalidationService.this.mCallbackList) {
|
||
|
MultiInstanceInvalidationService.this.mCallbackList.unregister(iMultiInstanceInvalidationCallback);
|
||
|
MultiInstanceInvalidationService.this.mClientNames.remove(Integer.valueOf(i));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@Override // android.app.Service
|
||
|
@Nullable
|
||
|
public IBinder onBind(Intent intent) {
|
||
|
return this.mBinder;
|
||
|
}
|
||
|
}
|