NTP-29477 | Blacklisted app optimisation (#1063)

This commit is contained in:
Mantri Ramkishor
2025-02-05 15:18:37 +05:30
committed by GitHub
parent 81c69c41be
commit a0ee5dfaa6
4 changed files with 78 additions and 62 deletions

View File

@@ -21,6 +21,7 @@ import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.uimanager.UIManagerModule;
import com.navi.alfred.AlfredManager;
import com.navi.pulse.PulseManager;
@@ -111,30 +112,25 @@ public class DeviceUtilsModule extends ReactContextBaseJavaModule {
try {
PackageManager packageManager = RNContext.getPackageManager();
List<PackageInfo> installedPackages = packageManager.getInstalledPackages(0);
List<ApplicationInfo> packages = packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
JSONArray jsonArray = new JSONArray();
for (PackageInfo packageInfo : installedPackages) {
final PackageManager pm = RNContext.getApplicationContext().getPackageManager();
ApplicationInfo appsInstalled;
try {
appsInstalled = pm.getApplicationInfo( packageInfo.packageName, 0);
} catch (final PackageManager.NameNotFoundException e) {
appsInstalled = null;
}
final String applicationName = (String) (appsInstalled != null ? pm.getApplicationLabel(appsInstalled) : "(unknown)");
JSONObject mainObject = new JSONObject();
JSONObject appDetails = new JSONObject();
appDetails.put("appName",packageInfo.applicationInfo.processName);
appDetails.put("firstInstallTime", packageInfo.firstInstallTime);
appDetails.put("lastUpdateTime", packageInfo.lastUpdateTime);
appDetails.put("applicationName", applicationName);
appDetails.put("applicationIcon",getAppIcon(packageInfo.packageName));
mainObject.put("packageName", packageInfo.packageName);
mainObject.put("appDetails", appDetails);
try {
ApplicationInfo appInfo = packageInfo.applicationInfo;
String applicationName = (String) packageManager.getApplicationLabel(appInfo);
appDetails.put("appName", appInfo.processName);
appDetails.put("firstInstallTime", packageInfo.firstInstallTime);
appDetails.put("lastUpdateTime", packageInfo.lastUpdateTime);
appDetails.put("applicationName", applicationName != null ? applicationName : "(unknown)");
appDetails.put("applicationIcon", getAppIcon(packageInfo.packageName));
mainObject.put("packageName", packageInfo.packageName);
mainObject.put("appDetails", appDetails);
jsonArray.put(mainObject);
jsonArray.put(mainObject);
} catch (Exception e) {
Log.e("getAllInstalledApp", "Error processing package: " + packageInfo.packageName, e);
}
}
promise.resolve(jsonArray.toString());
} catch (Exception err) {
@@ -164,6 +160,42 @@ public class DeviceUtilsModule extends ReactContextBaseJavaModule {
}
}
@ReactMethod
public void getBlacklistedApps(ReadableMap blacklistedAppsMap, Promise promise) {
try {
PackageManager packageManager = RNContext.getPackageManager();
List<PackageInfo> installedPackages = packageManager.getInstalledPackages(0);
JSONArray jsonArray = new JSONArray();
for (PackageInfo packageInfo : installedPackages) {
// Skip system apps
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
continue;
}
String packageName = packageInfo.packageName;
if (blacklistedAppsMap.hasKey(packageName)) {
JSONObject appDetails = new JSONObject();
try {
String applicationName = (String) packageManager.getApplicationLabel(packageInfo.applicationInfo);
appDetails.put("packageName", packageName);
appDetails.put("applicationName", applicationName != null ? applicationName : "(unknown)");
appDetails.put("applicationIcon", getAppIcon(packageName));
jsonArray.put(appDetails);
} catch (Exception e) {
e.printStackTrace();
promise.reject("ERROR", e.getMessage());
}
}
}
promise.resolve(jsonArray.toString());
} catch (Exception err) {
err.printStackTrace();
promise.reject("ERROR", err.getMessage());
}
}
@ReactMethod
public void sendBottomSheetOpenSignal(Boolean isBottomSheetOpen) {
}

View File

@@ -25,10 +25,11 @@ import {
installApk,
openFallbackLonghornLink,
} from '@actions/appDownloadAction';
import AppUpdate from './AppUpdate';
import { setShouldUpdate } from '@reducers/appUpdateSlice';
import PostOperativeHours from './PostOperativeHours';
import { isFieldApp } from './utils';
import AppUpdate from './AppUpdate';
import { AppStates } from '@interfaces/appStates';
interface IBlockerScreen {
children?: ReactNode;
@@ -152,13 +153,17 @@ const BlockerScreen = (props: IBlockerScreen) => {
React.useEffect(() => {
const appStateChange = AppState.addEventListener('change', async (change) => {
setTimeout(async () => {
handleBlacklistedAppsForBlockingCosmos().then((blacklistedAppsInstalled) =>
dispatch(
setBlacklistedAppsInstalledData({ blacklistedAppsInstalled: blacklistedAppsInstalled })
)
);
}, 3000);
if (change === AppStates.ACTIVE) {
setTimeout(async () => {
handleBlacklistedAppsForBlockingCosmos().then((blacklistedAppsInstalled) =>
dispatch(
setBlacklistedAppsInstalledData({
blacklistedAppsInstalled: blacklistedAppsInstalled,
})
)
);
}, 3000);
}
});
return () => appStateChange.remove();
}, []);

View File

@@ -26,6 +26,8 @@ export type buildConfig = {
export const getBuildInfo = (): Promise<string> => DeviceUtilsModule.getBuildInfo();
export const getBlacklistedApps = (blacklistedAppsObject: Record<string, boolean>): Promise<string> => DeviceUtilsModule.getBlacklistedApps(blacklistedAppsObject);
export const alfredHandleSWWEvent = (error: Error) => {
const { message = '', stack = '', name = '' } = error;

View File

@@ -1,5 +1,5 @@
import { GenericType } from '@common/GenericTypes';
import { getAllInstalledApp } from '@components/utlis/DeviceUtils';
import { getBlacklistedApps } from '@components/utlis/DeviceUtils';
import { logError } from '@components/utlis/errorUtils';
export type Apps = {
@@ -8,18 +8,7 @@ export type Apps = {
applicationIcon: string;
};
type deviceApps = {
packageName: string;
appDetails: deviceAppDetails;
};
type deviceAppDetails = {
applicationName: string;
applicationIcon: string;
};
export let BLACKLISTED_APPS_LIST: string[] = [];
let installedBlacklistedApps: Apps[] = [];
export const getBlacklistedAppsList = () => BLACKLISTED_APPS_LIST;
@@ -27,33 +16,21 @@ export const setBlacklistedAppsList = (blacklistedAppsString: string) => {
BLACKLISTED_APPS_LIST = blacklistedAppsString.split(',');
};
function getBlacklistAppsPresent(installedApps: Apps[], blacklistedApps: string[]) {
installedBlacklistedApps = [];
const blacklistedAppsSet = new Set(blacklistedApps);
for (const app of installedApps) {
if (blacklistedAppsSet.has(app.packageName)) {
installedBlacklistedApps.push({
packageName: app.packageName,
applicationName: app.applicationName,
applicationIcon: app.applicationIcon,
});
}
}
}
const handleBlacklistedAppsForBlockingCosmos = async () => {
const blacklistedApps = getBlacklistedAppsList();
return getAllInstalledApp()
const uniqueBlacklistedApps = Array.from(new Set(blacklistedApps));
const blacklistedAppsObject = uniqueBlacklistedApps?.reduce((obj, app) => {
obj[app] = true;
return obj;
}, {} as Record<string, boolean>);
return getBlacklistedApps(blacklistedAppsObject)
.then((apps) => {
try {
const appsArray = JSON.parse(apps);
const installedApps = appsArray.map((app: deviceApps) => ({
packageName: app.packageName,
applicationName: app.appDetails.applicationName,
applicationIcon: app.appDetails.applicationIcon,
}));
getBlacklistAppsPresent(installedApps, blacklistedApps);
return installedBlacklistedApps;
return appsArray;
} catch (error: GenericType) {
logError(error);
return [];