NTP-29477 | Blacklisted app optimisation (#1063)
This commit is contained in:
@@ -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) {
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}, []);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 [];
|
||||
|
||||
Reference in New Issue
Block a user