From 5325c0c4f7f59b17fb94e4083028f41d031e65cd Mon Sep 17 00:00:00 2001 From: seven332 Date: Sat, 19 Mar 2016 01:09:37 +0800 Subject: [PATCH] Add top activity and top scene for Crash --- .../main/java/com/hippo/ehviewer/Crash.java | 28 +++++++++++++++++++ .../com/hippo/ehviewer/EhApplication.java | 23 +++++++++++++++ .../{TrackedActivity.java => EhActivity.java} | 19 ++++++++++++- ...ctivity.java => EhPreferenceActivity.java} | 20 ++++++++++++- .../hippo/ehviewer/ui/GalleryActivity.java | 2 +- .../hippo/ehviewer/ui/SettingsActivity.java | 2 +- .../hippo/ehviewer/ui/ToolbarActivity.java | 2 +- .../com/hippo/scene/SceneApplication.java | 4 +-- .../java/com/hippo/scene/StageActivity.java | 18 ++++++++++-- 9 files changed, 109 insertions(+), 9 deletions(-) rename app/src/main/java/com/hippo/ehviewer/ui/{TrackedActivity.java => EhActivity.java} (70%) rename app/src/main/java/com/hippo/ehviewer/ui/{TrackedPreferenceActivity.java => EhPreferenceActivity.java} (69%) diff --git a/app/src/main/java/com/hippo/ehviewer/Crash.java b/app/src/main/java/com/hippo/ehviewer/Crash.java index 40366a904..83919579f 100644 --- a/app/src/main/java/com/hippo/ehviewer/Crash.java +++ b/app/src/main/java/com/hippo/ehviewer/Crash.java @@ -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"); diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java index c0540b462..8c78cb99b 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java @@ -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 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; + } + } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/TrackedActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java similarity index 70% rename from app/src/main/java/com/hippo/ehviewer/ui/TrackedActivity.java rename to app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java index c952d27a5..b7e1460b4 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/TrackedActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/EhActivity.java @@ -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(); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/TrackedPreferenceActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java similarity index 69% rename from app/src/main/java/com/hippo/ehviewer/ui/TrackedPreferenceActivity.java rename to app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java index af7ed9e15..8f1cb86d0 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/TrackedPreferenceActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/EhPreferenceActivity.java @@ -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(); diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 59e2e6f37..d11c0a0e8 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -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 { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java index c46a86b03..e400f5008 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/SettingsActivity.java @@ -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; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/ToolbarActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/ToolbarActivity.java index 9409276b5..808efce91 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/ToolbarActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/ToolbarActivity.java @@ -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) { diff --git a/app/src/main/java/com/hippo/scene/SceneApplication.java b/app/src/main/java/com/hippo/scene/SceneApplication.java index d032182f7..a4c226038 100644 --- a/app/src/main/java/com/hippo/scene/SceneApplication.java +++ b/app/src/main/java/com/hippo/scene/SceneApplication.java @@ -23,8 +23,8 @@ import com.hippo.yorozuya.IntIdGenerator; public class SceneApplication extends Application { - private IntIdGenerator mIdGenerator = new IntIdGenerator(); - private SparseArray mStageMap = new SparseArray<>(); + private final IntIdGenerator mIdGenerator = new IntIdGenerator(); + private final SparseArray mStageMap = new SparseArray<>(); void registerStageActivity(StageActivity stage) { int id = mIdGenerator.nextId(); diff --git a/app/src/main/java/com/hippo/scene/StageActivity.java b/app/src/main/java/com/hippo/scene/StageActivity.java index 832a7663e..0580a46bc 100644 --- a/app/src/main/java/com/hippo/scene/StageActivity.java +++ b/app/src/main/java/com/hippo/scene/StageActivity.java @@ -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(); + } }