diff --git a/app/src/main/java/com/hippo/content/RecordingApplication.java b/app/src/main/java/com/hippo/content/RecordingApplication.java new file mode 100644 index 000000000..76ff3a4ad --- /dev/null +++ b/app/src/main/java/com/hippo/content/RecordingApplication.java @@ -0,0 +1,90 @@ +/* + * Copyright 2018 Hippo Seven + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.hippo.content; + +/* + * Created by Hippo on 2018/3/27. + */ + +import android.app.Activity; +import android.os.Bundle; +import com.hippo.scene.SceneApplication; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + +public abstract class RecordingApplication extends SceneApplication { + + private List> list = new LinkedList<>(); + + @Override + public void onCreate() { + super.onCreate(); + + registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) { + list.add(new java.lang.ref.WeakReference<>(activity)); + } + + @Override + public void onActivityDestroyed(Activity activity) { + Iterator> iterator = list.iterator(); + while (iterator.hasNext()) { + WeakReference reference = iterator.next(); + Activity a = reference.get(); + // Remove current activity and null + if (a == null || a == activity) { + iterator.remove(); + } + } + } + + @Override + public void onActivityStarted(Activity activity) {} + + @Override + public void onActivityResumed(Activity activity) {} + + @Override + public void onActivityPaused(Activity activity) {} + + @Override + public void onActivityStopped(Activity activity) {} + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} + }); + } + + public void recreate() { + // Copy list + ArrayList listCopy = new ArrayList<>(list.size()); + for (WeakReference reference: list) { + Activity activity = reference.get(); + if (activity == null) continue; + listCopy.add(activity); + } + + // Finish all activities + for (int i = listCopy.size() - 1; i >= 0; --i) { + listCopy.get(i).recreate(); + } + } +} diff --git a/app/src/main/java/com/hippo/ehviewer/EhApplication.java b/app/src/main/java/com/hippo/ehviewer/EhApplication.java index c783188f5..d56872679 100644 --- a/app/src/main/java/com/hippo/ehviewer/EhApplication.java +++ b/app/src/main/java/com/hippo/ehviewer/EhApplication.java @@ -26,9 +26,9 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.LruCache; import android.util.Log; - import com.hippo.beerbelly.SimpleDiskCache; import com.hippo.conaco.Conaco; +import com.hippo.content.RecordingApplication; import com.hippo.ehviewer.client.EhClient; import com.hippo.ehviewer.client.EhCookieStore; import com.hippo.ehviewer.client.EhDns; @@ -40,7 +40,6 @@ import com.hippo.ehviewer.ui.CommonOperations; import com.hippo.image.Image; import com.hippo.image.ImageBitmap; import com.hippo.network.StatusCodeException; -import com.hippo.scene.SceneApplication; import com.hippo.text.Html; import com.hippo.unifile.UniFile; import com.hippo.util.BitmapUtils; @@ -49,17 +48,15 @@ import com.hippo.yorozuya.FileUtils; import com.hippo.yorozuya.IntIdGenerator; import com.hippo.yorozuya.OSUtils; import com.hippo.yorozuya.SimpleHandler; - import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.concurrent.TimeUnit; - import okhttp3.OkHttpClient; -public class EhApplication extends SceneApplication implements Thread.UncaughtExceptionHandler { +public class EhApplication extends RecordingApplication implements Thread.UncaughtExceptionHandler { private static final String TAG = EhApplication.class.getSimpleName();