@Override public void handleInitPackageResources(XC_InitPackageResources.InitPackageResourcesParam initPackageResourcesParam) throws Throwable { if (!initPackageResourcesParam.packageName.equals("com.whatsapp")) return; modRes = XModuleResources.createInstance(MODULE_PATH, initPackageResourcesParam.res); if (sharedPreferences != null && sharedPreferences.getBoolean("hideTabs", false)) initPackageResourcesParam.res.setReplacement("com.whatsapp", "dimen", "tab_height", modRes.fwd(R.dimen.tab_height)); if (sharedPreferences != null && sharedPreferences.getBoolean("showBlackTicks", false)) { initPackageResourcesParam.res.setReplacement("com.whatsapp", "drawable", "message_got_read_receipt_from_target", modRes.fwd(R.mipmap.ic_black_tick_conv)); initPackageResourcesParam.res.setReplacement("com.whatsapp", "drawable", "message_got_read_receipt_from_target_onmedia", modRes.fwd(R.mipmap.ic_black_tick_conv)); initPackageResourcesParam.res.setReplacement("com.whatsapp", "drawable", "msg_status_client_read", modRes.fwd(R.mipmap.ic_black_tick_main)); } }
/** * Creates a dialog saying the image is too large. Two options are given: continue or quit. * * @param activity The activity to be used to create the dialog * @return The dialog to show */ private static AlertDialog createDialog(final Activity activity) { AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity); dialogBuilder.setTitle(mResources.getString(R.string.app_name)); dialogBuilder.setMessage(mResources.getString(R.string.dialog_main)); dialogBuilder.setPositiveButton(mResources.getString(R.string.continue_anyway), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); dialogBuilder.setNegativeButton(mResources.getString(R.string.go_back), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { activity.finish(); } }); return dialogBuilder.create(); } }
public static void handleInitPackageResources(XModuleResources modRes) throws Throwable { statusDrawable = modRes.getDrawable(R.drawable.status_toast); }
@Override public void initZygote(StartupParam startupParam) throws Throwable { MODULE_PATH = startupParam.modulePath; mResources = XModuleResources.createInstance(startupParam.modulePath, null); }
@Override protected void afterHookedMethod(MethodHookParam param) { try { XModuleResources modRes = XModuleResources.createInstance(MODULE_PATH, null); ImageView iv = (ImageView) param.thisObject; int resId = (Integer) param.args[0]; iv.getContext().getResources().getIdentifier("camera_batteryfilter_full", "drawable", "com.snapchat.android")) if (Preferences.getFilterPath() == null) { iv.setImageDrawable(modRes.getDrawable(R.drawable.custom_filter_1)); Logger.log("Replaced batteryfilter from R.drawable", true); } else {
final int[] currentItem = {2}; rowView = inflater.inflate(mRes.getLayout(R.layout.optionlayout), null); holder.tv=(TextView) rowView.findViewById(mRes.getIdentifier("description", "id", "com.marz.snapprefs")); holder.img=(ImageView) rowView.findViewById(mRes.getIdentifier("textIcon", "id", "com.marz.snapprefs")); holder.img.setImageDrawable(mRes.getDrawable(optionImageId[position]));
@Override public void handleInitPackageResources(XC_InitPackageResources.InitPackageResourcesParam resparam) throws Throwable { if (!resparam.packageName.equals(WECHAT_PACKAGENAME)) return; if (Common.MOD_RES == null) Common.MOD_RES = XModuleResources.createInstance(MODULE_PATH, null); ResReplacement.init(resparam); } }
View rowView; rowView = inflater.inflate(mRes.getLayout(R.layout.optionlayout), null); holder.tv = (TextView) rowView.findViewById(mRes.getIdentifier("description", "id", "com.marz.snapprefs")); holder.img = (ImageView) rowView.findViewById(mRes.getIdentifier("textIcon", "id", "com.marz.snapprefs")); holder.img.setImageDrawable(mRes.getDrawable(optionImageId[position]));
public static void hookResSystemui(XC_InitPackageResources.InitPackageResourcesParam resparam, String modulePath) { try { ConfigUtils config = ConfigUtils.getInstance(); XModuleResources modRes = XModuleResources.createInstance(modulePath, resparam.res); if (config.recents.no_recents_image) { resparam.res.setReplacement(PACKAGE_SYSTEMUI, "dimen", "recents_stack_top_padding", modRes.fwd(R.dimen.recents_stack_top_padding)); try { resparam.res.setReplacement(PACKAGE_SYSTEMUI, "layout", "recents_empty", modRes.fwd(R.layout.recents_empty)); } catch (Throwable t) { // AICP resparam.res.setReplacement(PACKAGE_SYSTEMUI, "layout", "no_recents_holder", modRes.fwd(R.layout.recents_empty)); } } if (config.recents.large_recents) { resparam.res.setReplacement(PACKAGE_SYSTEMUI, "dimen", "recents_stack_top_padding", modRes.fwd(R.dimen.recents_stack_top_padding)); // srsly bliss? 12 dp looks ugly as hell... resparam.res.setReplacement(PACKAGE_SYSTEMUI, "dimen", "recents_task_view_rounded_corners_radius", new XResources.DimensionReplacement(2, TypedValue.COMPLEX_UNIT_DIP)); } } catch (Throwable t) { XposedHook.logE(TAG, "Error hooking SystemUI resources", t); } }
@Override public void handleInitPackageResources(XC_InitPackageResources.InitPackageResourcesParam resparam) throws Throwable { if (!resparam.packageName.equals("com.android.providers.contacts")) return; Resources res = XModuleResources.createInstance(MODULE_PATH, resparam.res); NOTIF_ICON_RES_ID = resparam.res.addResource(res, R.drawable.ic_settings_identicons); }
MenuItem callMenuItem = ((Menu) param.args[0]).add(modRes.getString(R.string.menuitem_call)); callMenuItem.setIcon(android.R.drawable.ic_menu_search); callMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); menuItem = ((Menu) param.args[0]).add(modRes.getString(R.string.menuitem_hide)); else menuItem = ((Menu) param.args[0]).add(modRes.getString(R.string.menuitem_unhide)); MenuItem unlock; lock = ((Menu) param.args[0]).add(modRes.getString(R.string.menuitem_lock)); lock.setIcon(android.R.drawable.ic_menu_search); lock.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); unlock = ((Menu) param.args[0]).add(modRes.getString(R.string.menuitem_unlock)); unlock.setIcon(android.R.drawable.ic_menu_search); unlock.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); MenuItem reminderMenuItem = ((Menu) param.args[0]).add(modRes.getString(R.string.menuitem_reminder)); reminderMenuItem.setIcon(android.R.drawable.ic_menu_search); reminderMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
layoutParams2.rightMargin = HookMethods.px(115.0f); final ImageView snapPrefsBtn = new ImageView(HookMethods.SnapContext); snapPrefsBtn.setImageDrawable(mResources.getDrawable(R.drawable.story_filter)); snapPrefsBtn.setScaleX(0.75f); snapPrefsBtn.setScaleY(0.75f);
public static void hookRes(final XC_InitPackageResources.InitPackageResourcesParam resparam, String modulePath) { try { if (ConfigUtils.others().package_installer) { final XModuleResources modRes = XModuleResources.createInstance(modulePath, resparam.res); resparam.res.setReplacement(PACKAGE_PACKAGEINSTALLER, "string", "install_failed_inconsistent_certificates", modRes.fwd(R.string.install_failed_conflict)); resparam.res.setReplacement(PACKAGE_PACKAGEINSTALLER, "string", "install_failed_cpu_abi_incompatible", modRes.fwd(R.string.install_failed_incompatible)); resparam.res.setReplacement(PACKAGE_PACKAGEINSTALLER, "string", "install_failed_older_sdk", modRes.fwd(R.string.install_failed_blocked)); resparam.res.hookLayout(PACKAGE_PACKAGEINSTALLER, "layout", "install_start", install_start); resparam.res.hookLayout(PACKAGE_PACKAGEINSTALLER, "layout", "app_details", app_details); resparam.res.hookLayout(PACKAGE_PACKAGEINSTALLER, "layout", "install_confirm", install_confirm); resparam.res.hookLayout(PACKAGE_PACKAGEINSTALLER, "layout", "op_progress", op_progress); resparam.res.hookLayout(PACKAGE_PACKAGEINSTALLER, "layout", "uninstall_confirm", uninstall_confirm); resparam.res.hookLayout(PACKAGE_PACKAGEINSTALLER, "layout", "uninstall_progress", uninstall_progress); } } catch (Throwable t) { XposedHook.logE(TAG, "Error hooking PackageInstaller resources", t); } }
public void init(IXposedHookZygoteInit.StartupParam startupParam, String resName, HashSet blocklistName) throws IOException { String MODULE_PATH = startupParam.modulePath; Resources res = XModuleResources.createInstance(MODULE_PATH, null); byte[] array = XposedHelpers.assetAsByteArray(res, resName); String decoded = decodeString(resName, array); String[] sUrls = decoded.split("\n"); Collections.addAll(blocklistName, sUrls); }
@Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); Menu menu = (Menu) param.args[0]; File f = new File(Environment.getExternalStorageDirectory() + ExtModule.WALLPAPER_DIR + contactNumber + ".jpg"); if (f.exists() && !f.isDirectory()) menu.getItem(menu.size() - 1).getSubMenu().add(modRes.getString(R.string.menuitem_wallpaper_remove)); else menu.getItem(menu.size() - 1).getSubMenu().add(modRes.getString(R.string.menuitem_wallpaper_set)); if (isCurrentOpenConversationGroup && enableHighlight) return; if (highlightedChats.contains(contactNumber)) { menu.getItem(menu.size() - 1).getSubMenu().add(modRes.getString(R.string.menuitem_unhighlight)); } else { menu.getItem(menu.size() - 1).getSubMenu().add(modRes.getString(R.string.menuitem_highlight)); } menu.getItem(menu.size() - 1).getSubMenu().add(modRes.getString(R.string.stats)); } });
row.setLayoutParams(navigation.getChildAt(0).getLayoutParams()); ImageView iv = new ImageView(navigation.getContext()); iv.setImageDrawable(mResources.getDrawable(R.drawable.profile_snapprefs)); iv.setLayoutParams(orig.getLayoutParams()); TextView textView = new TextView(navigation.getContext());
if (ConfigUtils.qs().header) { XModuleResources modRes = XModuleResources.createInstance(modulePath, resparam.res); resparam.res.setReplacement(PACKAGE_SYSTEMUI, "dimen", "notification_panel_width", modRes.fwd(R.dimen.notification_panel_width)); resparam.res.setReplacement(PACKAGE_SYSTEMUI, "dimen", "qs_peek_height", zero); resparam.res.setReplacement(PACKAGE_SYSTEMUI, "dimen", "status_bar_header_height", modRes.fwd(R.dimen.status_bar_header_height)); resparam.res.setReplacement(PACKAGE_SYSTEMUI, "dimen", "status_bar_header_height_expanded", modRes.fwd(R.dimen.status_bar_header_height)); resparam.res.setReplacement(PACKAGE_SYSTEMUI, "dimen", "qs_emergency_calls_only_text_size", modRes.fwd(R.dimen.emergency_calls_only_text_size)); resparam.res.setReplacement(PACKAGE_SYSTEMUI, "dimen", "qs_date_collapsed_size", modRes.fwd(R.dimen.date_time_collapsed_size)); resparam.res.setReplacement(PACKAGE_SYSTEMUI, "dimen", "multi_user_avatar_collapsed_size", modRes.fwd(R.dimen.multi_user_avatar_size)); resparam.res.setReplacement(PACKAGE_SYSTEMUI, "dimen", "qs_brightness_padding_top", modRes.fwd(R.dimen.brightness_slider_padding_top)); if (ConfigUtils.M) resparam.res.setReplacement(PACKAGE_SYSTEMUI, "dimen", "multi_user_avatar_expanded_size", modRes.fwd(R.dimen.multi_user_avatar_size));
public static void hookResSystemUI(XC_InitPackageResources.InitPackageResourcesParam resparam, String modulePath) { XModuleResources modRes = XModuleResources.createInstance(modulePath, resparam.res); R_drawable_ic_qs_data_disabled = resparam.res.addResource(modRes, R.drawable.ic_qs_data_disabled); R_drawable_stat_sys_data_disabled = resparam.res.addResource(modRes, R.drawable.stat_sys_data_disabled); }
if (title.equals(modRes.getString(R.string.menuitem_lock))) { lockedContacts.add(contactNumber); templockedContacts.add(contactNumber); ExtModule.this.showToast(modRes.getString(R.string.lock_enable_message)); param.setResult(false); ((Activity) param.thisObject).finish(); } else if (title.equals(modRes.getString(R.string.menuitem_unlock))) { lockedContacts.remove(contactNumber); templockedContacts.remove(contactNumber); ExtModule.this.showToast(modRes.getString(R.string.lock_disable_message)); } else if (title.equals(modRes.getString(R.string.menuitem_call)) || (title.equals(modRes.getString(R.string.voice_call_string)) && replaceCallButton)) { Intent callIntent = new Intent(Intent.ACTION_DIAL); callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); AndroidAppHelper.currentApplication().startActivity(callIntent); } catch (Exception ex) { showToast(modRes.getString(R.string.call_place_error)); ex.printStackTrace(); } else if (title.equals(modRes.getString(R.string.menuitem_reminder))) { intent = new Intent(); intent.setComponent(new ComponentName("com.suraj.waext", "com.suraj.waext.ReminderActivity")); } else if (title.equals(modRes.getString(R.string.menuitem_wallpaper_set))) { intent = new Intent();
@Override protected void afterHookedMethod(final MethodHookParam param) throws Throwable { if (!once){ View colorPickerView = (View) getObjectField(param.thisObject, "j"); outerOptionsLayout = new RelativeLayout(HookMethods.SnapContext); final GridView innerOptionsView = new GridView(HookMethods.SnapContext); innerOptionsView.setAdapter(new OptionsAdapter(HookMethods.SnapContext, mResources)); innerOptionsView.setNumColumns(5); innerOptionsView.setHorizontalSpacing(px(2.0f)); innerOptionsView.setVerticalSpacing(px(5.0f)); innerOptionsView.setStretchMode(GridView.STRETCH_COLUMN_WIDTH); innerOptionsView.setPadding(0,px(7.5f), px(1.0f), px(7.5f)); final RelativeLayout.LayoutParams outerOptionsLayoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); outerOptionsLayoutParams.leftMargin = px(75.0f); outerOptionsLayoutParams.rightMargin = px(25.0f); outerOptionsLayout.setVisibility(View.VISIBLE); outerOptionsLayout.setBackgroundDrawable(mResources.getDrawable(R.drawable.drawingbackground)); outerOptionsLayout.addView(innerOptionsView, GridLayout.LayoutParams.MATCH_PARENT, GridLayout.LayoutParams.MATCH_PARENT); ((RelativeLayout)colorPickerView.getParent().getParent()).addView(outerOptionsLayout, outerOptionsLayoutParams); once = true; } } });