package com.lody.virtual.server.am;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import com.lody.virtual.helper.utils.collection.SparseArray;
import com.lody.virtual.server.interfaces.IUiObserver;
import java.util.HashMap;
import java.util.Map;
/**
* @author Lody
*/
class UiEngine {
private RemoteCallbackList<IUiObserver> observers = new RemoteCallbackList<>();
private SparseArray<Map<String, Integer>> appMarker = new SparseArray<>();
void addObserver(IUiObserver observer) {
observers.register(observer);
}
void removeObserver(IUiObserver observer) {
observers.unregister(observer);
}
void enterActivity(int userId, String packageName) {
Map<String, Integer> appCounter = appMarker.get(userId);
if (appCounter == null) {
appCounter = new HashMap<>();
appMarker.put(userId, appCounter);
}
Integer count = appCounter.get(packageName);
if (count == null || count == 0) {
final int N = observers.beginBroadcast();
for (int i = 0; i < N; i++) {
try {
observers.getBroadcastItem(i).enterAppUI(userId, packageName);
} catch (RemoteException e) {
e.printStackTrace();
}
}
observers.finishBroadcast();
}
if (count == null) {
appCounter.put(packageName, 1);
} else {
appCounter.put(packageName, count + 1);
}
}
void exitActivity(int userId, String packageName) {
Map<String, Integer> appCounter = appMarker.get(userId);
if (appCounter != null) {
Integer count = appCounter.get(packageName);
if (count != null) {
if (count <= 0) {
count = 1;
}
count = count - 1;
if (count == 0) {
final int N = observers.beginBroadcast();
for (int i = 0; i < N; i++) {
try {
observers.getBroadcastItem(i).exitAppUI(userId, packageName);
} catch (RemoteException e) {
e.printStackTrace();
}
}
observers.finishBroadcast();
}
appCounter.put(packageName, count);
}
}
}
void appDead(int userId, String packageName) {
Map<String, Integer> appCounter = appMarker.get(userId);
if (appCounter != null) {
appCounter.remove(packageName);
final int N = observers.beginBroadcast();
for (int i = 0; i < N; i++) {
try {
observers.getBroadcastItem(i).exitAppUI(userId, packageName);
} catch (RemoteException e) {
e.printStackTrace();
}
}
observers.finishBroadcast();
}
}
}