Skip to content

Commit 6341438

Browse files
committed
Fix MeiZu crash and multi settings item
1 parent d52713a commit 6341438

File tree

3 files changed

+43
-6
lines changed

3 files changed

+43
-6
lines changed

app/src/main/java/com/yyxx/wechatfp/activity/WebActivity.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@
2222

2323
public class WebActivity extends AppCompatActivity {
2424

25-
public static final String TAG = WebActivity.class.getName();
26-
2725
public static void openUrl(Context context, String url) {
2826
try {
2927
Intent intent = new Intent(context, WebActivity.class);

app/src/main/java/com/yyxx/wechatfp/util/log/L.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public static void d(Object... arg) {
3939
public static void e(Object... arg) {
4040
final String log = arg2string(arg);
4141
if (log != null) {
42-
sILog.error(LOG_TAG + getTraceTag(), log);
42+
sILog.error("tag:" + LOG_TAG + " ver:" + BuildConfig.VERSION_NAME + " " + getTraceTag(), log);
4343
}
4444
}
4545

app/src/main/java/com/yyxx/wechatfp/xposed/plugin/XposedWeChatPlugin.java

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import android.view.View;
2020
import android.view.ViewGroup;
2121
import android.view.ViewTreeObserver;
22+
import android.widget.AbsListView;
2223
import android.widget.EditText;
2324
import android.widget.ImageView;
2425
import android.widget.LinearLayout;
@@ -27,6 +28,7 @@
2728
import android.widget.TextView;
2829
import android.widget.Toast;
2930

31+
import com.samsung.android.sdk.SsdkUnsupportedException;
3032
import com.wei.android.lib.fingerprintidentify.FingerprintIdentify;
3133
import com.wei.android.lib.fingerprintidentify.base.BaseFingerprint;
3234
import com.yyxx.wechatfp.BuildConfig;
@@ -43,6 +45,7 @@
4345
import com.yyxx.wechatfp.util.log.L;
4446
import com.yyxx.wechatfp.view.SettingsView;
4547

48+
import java.lang.reflect.Field;
4649
import java.lang.reflect.Method;
4750
import java.util.ArrayList;
4851
import java.util.List;
@@ -229,13 +232,14 @@ protected void afterHookedMethod(MethodHookParam param) throws Throwable {
229232

230233
private void doSettingsMenuInject(final Activity activity) {
231234
ListView itemView = (ListView)ViewUtil.findViewByName(activity, "android", "list");
232-
if (ViewUtil.findViewByText(itemView, Lang.getString(Lang.APP_SETTINGS_NAME)) != null) {
235+
if (ViewUtil.findViewByText(itemView, Lang.getString(Lang.APP_SETTINGS_NAME)) != null
236+
|| isHeaderViewExistsFallback(itemView)) {
233237
return;
234238
}
235239

236240
LinearLayout settingsItemRootLLayout = new LinearLayout(activity);
237241
settingsItemRootLLayout.setOrientation(LinearLayout.VERTICAL);
238-
settingsItemRootLLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
242+
settingsItemRootLLayout.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
239243
settingsItemRootLLayout.setPadding(0, DpUtil.dip2px(activity, 20), 0, 0);
240244

241245
LinearLayout settingsItemLinearLayout = new LinearLayout(activity);
@@ -300,14 +304,49 @@ private void doSettingsMenuInject(final Activity activity) {
300304
settingsItemLinearLayout.addView(itemHlinearLayout, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, DpUtil.dip2px(activity, 50)));
301305

302306
settingsItemRootLLayout.addView(settingsItemLinearLayout);
307+
settingsItemRootLLayout.setTag(BuildConfig.APPLICATION_ID);
303308

304309
itemView.addHeaderView(settingsItemRootLLayout);
305310

306311
}
307312

313+
private boolean isHeaderViewExistsFallback(ListView listView) {
314+
if (listView == null) {
315+
return false;
316+
}
317+
if (listView.getHeaderViewsCount() <= 0) {
318+
return false;
319+
}
320+
try {
321+
Field mHeaderViewInfosField = ListView.class.getDeclaredField("mHeaderViewInfos");
322+
mHeaderViewInfosField.setAccessible(true);
323+
ArrayList<ListView.FixedViewInfo> mHeaderViewInfos = (ArrayList<ListView.FixedViewInfo>) mHeaderViewInfosField.get(listView);
324+
if (mHeaderViewInfos != null) {
325+
for (ListView.FixedViewInfo viewInfo : mHeaderViewInfos) {
326+
if (viewInfo.view == null) {
327+
continue;
328+
}
329+
Object tag = viewInfo.view.getTag();
330+
if (BuildConfig.APPLICATION_ID.equals(tag)) {
331+
L.d("found plugin settings headerView");
332+
return true;
333+
}
334+
}
335+
}
336+
} catch (Exception e) {
337+
L.e(e);
338+
}
339+
return false;
340+
}
341+
308342
public synchronized void initFingerPrintLock(Context context, Runnable onSuccessUnlockRunnable) {
309343
mMockCurrentUser = true;
310-
mFingerprintIdentify = new FingerprintIdentify(context, exception -> L.e("fingerprint", exception));
344+
mFingerprintIdentify = new FingerprintIdentify(context, exception -> {
345+
if (exception instanceof SsdkUnsupportedException) {
346+
return;
347+
}
348+
L.e("fingerprint", exception);
349+
});
311350
if (mFingerprintIdentify.isFingerprintEnable()) {
312351
mFingerprintIdentify.startIdentify(3, new BaseFingerprint.FingerprintIdentifyListener() {
313352
@Override

0 commit comments

Comments
 (0)