() {
@Override
public void onSuccess(final Account result) {
- final FragmentActivity activity = getActivity();
- if (activity == null) return;
- activity.recreate();
+ // final FragmentActivity activity = getActivity();
+ // if (activity == null) return;
+ // activity.recreate();
+ AppExecutors.getInstance().mainThread().execute(() -> {
+ final Context context = getContext();
+ if (context == null) return;
+ ProcessPhoenix.triggerRebirth(context);
+ }, 200);
}
@Override
diff --git a/app/src/main/java/awais/instagrabber/utils/ProcessPhoenix.java b/app/src/main/java/awais/instagrabber/utils/ProcessPhoenix.java
new file mode 100644
index 00000000..5dcc6e19
--- /dev/null
+++ b/app/src/main/java/awais/instagrabber/utils/ProcessPhoenix.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2014 Jake Wharton
+ *
+ * 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 awais.instagrabber.utils;
+
+import android.app.Activity;
+import android.app.ActivityManager;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Process;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import static android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK;
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+
+/**
+ * Process Phoenix facilitates restarting your application process. This should only be used for
+ * things like fundamental state changes in your debug builds (e.g., changing from staging to
+ * production).
+ *
+ * Trigger process recreation by calling {@link #triggerRebirth} with a {@link Context} instance.
+ */
+public final class ProcessPhoenix extends Activity {
+ private static final String KEY_RESTART_INTENTS = "phoenix_restart_intents";
+
+ /**
+ * Call to restart the application process using the {@linkplain Intent#CATEGORY_DEFAULT default}
+ * activity as an intent.
+ *
+ * Behavior of the current process after invoking this method is undefined.
+ */
+ public static void triggerRebirth(Context context) {
+ triggerRebirth(context, getRestartIntent(context));
+ }
+
+ /**
+ * Call to restart the application process using the specified intents.
+ *
+ * Behavior of the current process after invoking this method is undefined.
+ */
+ public static void triggerRebirth(Context context, Intent... nextIntents) {
+ Intent intent = new Intent(context, ProcessPhoenix.class);
+ intent.addFlags(FLAG_ACTIVITY_NEW_TASK); // In case we are called with non-Activity context.
+ intent.putParcelableArrayListExtra(KEY_RESTART_INTENTS, new ArrayList<>(Arrays.asList(nextIntents)));
+ context.startActivity(intent);
+ if (context instanceof Activity) {
+ ((Activity) context).finish();
+ }
+ Runtime.getRuntime().exit(0); // Kill kill kill!
+ }
+
+ private static Intent getRestartIntent(Context context) {
+ String packageName = context.getPackageName();
+ Intent defaultIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);
+ if (defaultIntent != null) {
+ defaultIntent.addFlags(FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK);
+ return defaultIntent;
+ }
+
+ throw new IllegalStateException("Unable to determine default activity for "
+ + packageName
+ + ". Does an activity specify the DEFAULT category in its intent filter?");
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ ArrayList intents = getIntent().getParcelableArrayListExtra(KEY_RESTART_INTENTS);
+ startActivities(intents.toArray(new Intent[intents.size()]));
+ finish();
+ Runtime.getRuntime().exit(0); // Kill kill kill!
+ }
+
+ /**
+ * Checks if the current process is a temporary Phoenix Process.
+ * This can be used to avoid initialisation of unused resources or to prevent running code that
+ * is not multi-process ready.
+ *
+ * @return true if the current process is a temporary Phoenix Process
+ */
+ public static boolean isPhoenixProcess(Context context) {
+ int currentPid = Process.myPid();
+ ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
+ List runningProcesses = manager.getRunningAppProcesses();
+ if (runningProcesses != null) {
+ for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
+ if (processInfo.pid == currentPid && processInfo.processName.endsWith(":phoenix")) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+}
diff --git a/app/src/main/java/awais/instagrabber/utils/Utils.java b/app/src/main/java/awais/instagrabber/utils/Utils.java
index 6f966c33..6f711a45 100644
--- a/app/src/main/java/awais/instagrabber/utils/Utils.java
+++ b/app/src/main/java/awais/instagrabber/utils/Utils.java
@@ -31,7 +31,6 @@ import android.webkit.MimeTypeMap;
import android.widget.Toast;
import androidx.annotation.DrawableRes;
-import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
@@ -474,7 +473,11 @@ public final class Utils {
final List navGraphNameList = Arrays.asList(navGraphNames);
if (TextUtils.isEmpty(tabOrderString)) {
// Use top 5 entries for default list
- return navGraphNameList.subList(0, 5);
+ final List top5navGraphNames = navGraphNameList.subList(0, 5);
+ final String newOrderString = android.text.TextUtils.join(",", top5navGraphNames);
+ Utils.settingsHelper.putString(PreferenceKeys.PREF_TAB_ORDER, newOrderString);
+ tabOrderString = newOrderString;
+ return top5navGraphNames;
}
// Make sure that the list from preference does not contain any invalid values
final List orderGraphNames = Arrays.stream(tabOrderString.split(","))
@@ -489,6 +492,7 @@ public final class Utils {
}
public static boolean isNavRootInCurrentTabs(final String navRootString) {
+ if (navRootString == null || tabOrderString == null) return false;
return tabOrderString.contains(navRootString);
}
}
diff --git a/app/src/main/java/awais/instagrabber/webservices/NewsService.java b/app/src/main/java/awais/instagrabber/webservices/NewsService.java
index 63fede99..db20e984 100644
--- a/app/src/main/java/awais/instagrabber/webservices/NewsService.java
+++ b/app/src/main/java/awais/instagrabber/webservices/NewsService.java
@@ -56,9 +56,11 @@ public class NewsService extends BaseService {
callback.onSuccess(null);
return;
}
- final List result = new ArrayList<>();
- result.addAll(body.getNewStories());
- result.addAll(body.getOldStories());
+ final List result = new ArrayList();
+ final List newStories = body.getNewStories();
+ if (newStories != null) result.addAll(newStories);
+ final List oldStories = body.getOldStories();
+ if (oldStories != null) result.addAll(oldStories);
callback.onSuccess(result);
}
diff --git a/app/src/main/res/layout/layout_profile_details.xml b/app/src/main/res/layout/layout_profile_details.xml
index 035a04b0..ea4df164 100644
--- a/app/src/main/res/layout/layout_profile_details.xml
+++ b/app/src/main/res/layout/layout_profile_details.xml
@@ -326,6 +326,7 @@
diff --git a/app/src/main/res/menu/story_menu.xml b/app/src/main/res/menu/story_menu.xml
index a7293f91..8169fd62 100644
--- a/app/src/main/res/menu/story_menu.xml
+++ b/app/src/main/res/menu/story_menu.xml
@@ -5,13 +5,18 @@
+ android:title="@string/reply_story"
+ android:titleCondensed="@string/reply_story"
+ app:showAsAction="never" />
+
+ app:showAsAction="never" />
\ No newline at end of file
diff --git a/app/src/main/res/navigation/notification_viewer_nav_graph.xml b/app/src/main/res/navigation/notification_viewer_nav_graph.xml
index 8f80b18e..50e2fbdf 100644
--- a/app/src/main/res/navigation/notification_viewer_nav_graph.xml
+++ b/app/src/main/res/navigation/notification_viewer_nav_graph.xml
@@ -5,25 +5,6 @@
android:id="@+id/notification_viewer_nav_graph"
app:startDestination="@id/notificationsViewer">
-
-
-
-
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/resources/feed_response.json b/app/src/main/resources/feed_response.json
deleted file mode 100644
index 9e26dfee..00000000
--- a/app/src/main/resources/feed_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/app/src/main/resources/stories_response.json b/app/src/main/resources/stories_response.json
deleted file mode 100644
index 9e26dfee..00000000
--- a/app/src/main/resources/stories_response.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file