@Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { if (!prefs.getBoolean(Common.PREF_TAGLOST, true)) return; // broadcast tag lost message try { Class<?> activityManagerNative = Class.forName("android.app.ActivityManagerNative"); if (activityManagerNative != null) { Object am = activityManagerNative.getMethod("getDefault").invoke(activityManagerNative); if (am != null) { am.getClass().getMethod("resumeAppSwitches").invoke(am); } } } catch (Exception e) { e.printStackTrace(); } Context context = (Context) XposedHelpers.getAdditionalInstanceField( XposedHelpers.getSurroundingThis(param.thisObject), "mContext"); if (context == null) { log(TAG, "step-4 context == null"); return; } try { byte[] uId = (byte[]) XposedHelpers.callMethod( XposedHelpers.getSurroundingThis(param.thisObject), "getUid"); Intent intentToStart = new Intent(); intentToStart.putExtra(NfcAdapter.EXTRA_ID, uId); intentToStart.setData(null); intentToStart.setType(null); intentToStart.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); intentToStart.setAction(Common.ACTION_TAG_LOST); PackageManager packageManager = context.getPackageManager(); if (packageManager != null) { List<ResolveInfo> activities = packageManager.queryIntentActivities(intentToStart, 0); if (activities.size() > 0) { log( TAG, String.format( "startActivity - android.nfc.action.TAG_LOST(%x%x%x%x)", uId[0], uId[1], uId[2], uId[3])); context.startActivity(intentToStart); } else { log( TAG, String.format("activities.size() <= 0 (%x%x%x%x)", uId[0], uId[1], uId[2], uId[3])); } } playTagLostSound(); } catch (Exception e) { e.printStackTrace(); } }
/* 获取农历字符串子程序 */ private void setText(){ synchronized (Main.class) { for (TextView dateView : mDateViews) { /* 判断当前日期栏是否包含上次更新后的日期文本 * 如果当前日期已经改变,则必须重新计算农历 * 如果当前日期未改变,则只需要重新用已经缓存的文本写入TextView */ //判断日期是否改变,不改变则不更新内容,改变则重新计算农历 String nDate = dateView.getText().toString(); String lDate = (String) XposedHelpers.getAdditionalInstanceField(dateView, "lDate"); String lunarText = (String) XposedHelpers.getAdditionalInstanceField(dateView, "lunarText"); String finalText = (String) XposedHelpers.getAdditionalInstanceField(dateView, "finalText"); if (lunarText == null || !(nDate.contains(lunarText) || finalText == null || nDate.equals(finalText))) { if (lDate == null || !nDate.equals(lDate)) { //获取时间 lunar.init(); //修正layout的singleLine属性 if (!layout_run) { try { //去掉singleLine属性 if (_layout_line) dateView.setSingleLine(false); //去除singleLine属性 //去掉align_baseline,并将其设置为center_vertical if (_layout_align) { //一般机型的状态栏都是RelativeLayout,少数为LinearLayout,但似乎影响不大 RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) dateView.getLayoutParams(); layoutParams.addRule(RelativeLayout.ALIGN_BASELINE, 0); //去除baseline对齐属性 layoutParams.addRule(RelativeLayout.CENTER_VERTICAL); //并将其设置为绝对居中 dateView.setLayoutParams(layoutParams); //设置布局参数 } //设置宽度为wrap_content if (_layout_width) { RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) dateView.getLayoutParams(); layoutParams.width = LayoutParams.WRAP_CONTENT; //取消宽度限制 dateView.setLayoutParams(layoutParams); } //设置高度为wrap_content if (_layout_height) { RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) dateView.getLayoutParams(); layoutParams.height = LayoutParams.WRAP_CONTENT; //取消高度限制 dateView.setLayoutParams(layoutParams); } layout_run = true; //已经执行过布局的处理步骤,下次不再执行 } catch (Throwable t) { XposedBridge.log("xStatusBarLunarDate: Statusbar layout fix error:"); XposedBridge.log(t); } } //更新记录的日期 XposedHelpers.setAdditionalInstanceField(dateView, "lDate", nDate); //从Lunar类中获得组合好的农历日期字符串(包括各节日) lunarText = lunar.getFormattedDate(_custom_format, _format); XposedHelpers.setAdditionalInstanceField(dateView, "lunarText", lunarText); //重置提醒次数 _notify_times = _notify_times_setting; if (_notify > 1) { //当天是否是节日 isFest = !"".equals(lunar.getFormattedDate("ff", 5)); if ((isFest || _notify == 2) && _lang != 3) { lunarTextToast = nDate.trim().replaceAll("\\n", " ") + "\n" + (_format == 5 ? lunar.getFormattedDate("", 3) : lunarText); } else { lunarTextToast = ""; } } //组合最终显示的文字 finalText = _remove_all ? lunarText : (_remove ? nDate.trim().replaceAll("[\\n|\\r]", " ") : nDate) + (_breakline ? "\n" : " ") + lunarText; XposedHelpers.setAdditionalInstanceField(dateView, "finalText", finalText); } //向TextView设置显示的最终文字 dateView.setText(finalText); } } } }