Add top activity and top scene for Crash

This commit is contained in:
seven332 committed 2016-03-19 01:09:37 +08:00
1 parent ff8bf2be64
commit 5325c0c4f7
9 files changed
+109 -9

No files matched your search

@@ -16,11 +16,14 @@
package com.hippo.ehviewer;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.annotation.NonNull;
import com.hippo.scene.StageActivity;
import com.hippo.util.PackageUtils;
import com.hippo.util.ReadableTime;
import com.hippo.yorozuya.IOUtils;
@@ -34,6 +37,12 @@ import java.io.PrintWriter;
public class Crash {
@NonNull
private static String avoidNull(String str) {
return null != str ? str : "null";
}
@SuppressWarnings("deprecation")
private static void collectInfo(Context context, FileWriter fw) throws IOException {
try {
PackageManager pm = context.getPackageManager();
@@ -55,6 +64,25 @@ public class Crash {
fw.write("\r\n");
}
// Runtime
String topActivityClazzName = null;
String topSceneClazzName = null;
try {
Activity topActivity = ((EhApplication) context.getApplicationContext()).getTopActivity();
if (null != topActivity) {
topActivityClazzName = topActivity.getClass().getName();
if (topActivity instanceof StageActivity) {
topSceneClazzName = ((StageActivity) topActivity).getTopSceneClazzName();
}
}
} catch (Throwable e) {
// Ignore
}
fw.write("======== Runtime ========\r\n");
fw.write("TopActivity=");fw.write(avoidNull(topActivityClazzName));fw.write("\r\n");
fw.write("TopScene=");fw.write(avoidNull(topSceneClazzName));fw.write("\r\n");
fw.write("\r\n");
// Device info
fw.write("======== DeviceInfo ========\r\n");
fw.write("BOARD=");fw.write(Build.BOARD);fw.write("\r\n");
@@ -16,6 +16,7 @@
package com.hippo.ehviewer;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.ComponentCallbacks2;
import android.content.Context;
@@ -24,6 +25,7 @@ import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.Debug;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.util.LruCache;
import android.util.Log;
import android.util.SparseArray;
@@ -46,6 +48,8 @@ import com.hippo.yorozuya.FileUtils;
import com.hippo.yorozuya.SimpleHandler;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
@@ -75,6 +79,8 @@ public class EhApplication extends SceneApplication implements Thread.UncaughtEx
private SimpleDiskCache mSpiderInfoCache;
private DownloadManager mDownloadManager;
private final List<Activity> mActivityList = new ArrayList<>();
@Override
public void onCreate() {
// Prepare to catch crash
@@ -321,4 +327,21 @@ public class EhApplication extends SceneApplication implements Thread.UncaughtEx
public static String getDeveloperEmail() {
return "ehviewersu$gmail.com".replace('$', '@');
}
public void registerActivity(Activity activity) {
mActivityList.add(activity);
}
public void unregisterActivity(Activity activity) {
mActivityList.remove(activity);
}
@Nullable
public Activity getTopActivity() {
if (!mActivityList.isEmpty()) {
return mActivityList.get(mActivityList.size() - 1);
} else {
return null;
}
}
}
@@ -16,15 +16,32 @@
package com.hippo.ehviewer.ui;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import com.google.analytics.tracking.android.EasyTracker;
import com.hippo.ehviewer.EhApplication;
import com.hippo.ehviewer.Settings;
public class TrackedActivity extends AppCompatActivity {
public class EhActivity extends AppCompatActivity {
private boolean mTrackStarted;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((EhApplication) getApplication()).registerActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
((EhApplication) getApplication()).unregisterActivity(this);
}
@Override
public void onStart() {
super.onStart();
@@ -16,14 +16,32 @@
package com.hippo.ehviewer.ui;
import android.os.Bundle;
import android.support.annotation.Nullable;
import com.google.analytics.tracking.android.EasyTracker;
import com.hippo.app.AppCompatPreferenceActivity;
import com.hippo.ehviewer.EhApplication;
import com.hippo.ehviewer.Settings;
public class TrackedPreferenceActivity extends AppCompatPreferenceActivity {
public class EhPreferenceActivity extends AppCompatPreferenceActivity {
private boolean mTrackStarted;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((EhApplication) getApplication()).registerActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
((EhApplication) getApplication()).unregisterActivity(this);
}
@Override
public void onStart() {
super.onStart();
@@ -65,7 +65,7 @@ import com.hippo.yorozuya.ViewUtils;
import java.io.File;
public class GalleryActivity extends TrackedActivity
public class GalleryActivity extends EhActivity
implements GalleryProviderListener, Slider.OnSetProgressListener,
GalleryView.Listener {
@@ -43,7 +43,7 @@ import com.hippo.util.DrawableManager;
import java.lang.reflect.Field;
import java.util.List;
public final class SettingsActivity extends TrackedPreferenceActivity {
public final class SettingsActivity extends EhPreferenceActivity {
private static final int REQUEST_CODE_FRAGMENT = 0;
@@ -26,7 +26,7 @@ import android.view.ViewGroup;
import com.hippo.ehviewer.R;
public class ToolbarActivity extends TrackedActivity {
public class ToolbarActivity extends EhActivity {
@Override
public void setContentView(@LayoutRes int layoutResID) {
@@ -23,8 +23,8 @@ import com.hippo.yorozuya.IntIdGenerator;
public class SceneApplication extends Application {
private IntIdGenerator mIdGenerator = new IntIdGenerator();
private SparseArray<StageActivity> mStageMap = new SparseArray<>();
private final IntIdGenerator mIdGenerator = new IntIdGenerator();
private final SparseArray<StageActivity> mStageMap = new SparseArray<>();
void registerStageActivity(StageActivity stage) {
int id = mIdGenerator.nextId();
@@ -27,7 +27,7 @@ import android.util.Log;
import android.view.View;
import com.hippo.ehviewer.R;
import com.hippo.ehviewer.ui.TrackedActivity;
import com.hippo.ehviewer.ui.EhActivity;
import com.hippo.yorozuya.AssertUtils;
import com.hippo.yorozuya.IntIdGenerator;
@@ -39,7 +39,7 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
public abstract class StageActivity extends TrackedActivity {
public abstract class StageActivity extends EhActivity {
private static final String TAG = StageActivity.class.getSimpleName();
@@ -575,4 +575,18 @@ public abstract class StageActivity extends TrackedActivity {
return null;
}
}
@Nullable
public String getTopSceneClazzName() {
int index = mSceneTagList.size() - 1;
if (index < 0) {
return null;
}
String tag = mSceneTagList.get(index);
Fragment fragment = getSupportFragmentManager().findFragmentByTag(tag);
if (null == fragment) {
return null;
}
return fragment.getClass().getName();
}
}