1
0
mirror of https://github.com/TeamNewPipe/NewPipe synced 2025-06-27 07:32:54 +00:00

Merge pull request #11789 from Thompson3142/fix_background_crash_focus

Fix background crash focus
This commit is contained in:
Profpatsch 2025-05-09 23:41:38 +02:00 committed by GitHub
commit f3858e70a3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 34 additions and 8 deletions

View File

@ -126,7 +126,10 @@ public class MainActivity extends AppCompatActivity {
private static final int ITEM_ID_ABOUT = 2; private static final int ITEM_ID_ABOUT = 2;
private static final int ORDER = 0; private static final int ORDER = 0;
public static final String KEY_IS_IN_BACKGROUND = "is_in_background";
private SharedPreferences sharedPreferences;
private SharedPreferences.Editor sharedPrefEditor;
/*////////////////////////////////////////////////////////////////////////// /*//////////////////////////////////////////////////////////////////////////
// Activity's LifeCycle // Activity's LifeCycle
//////////////////////////////////////////////////////////////////////////*/ //////////////////////////////////////////////////////////////////////////*/
@ -156,6 +159,8 @@ public class MainActivity extends AppCompatActivity {
assureCorrectAppLanguage(this); assureCorrectAppLanguage(this);
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
sharedPrefEditor = sharedPreferences.edit();
mainBinding = ActivityMainBinding.inflate(getLayoutInflater()); mainBinding = ActivityMainBinding.inflate(getLayoutInflater());
drawerLayoutBinding = mainBinding.drawerLayout; drawerLayoutBinding = mainBinding.drawerLayout;
@ -199,16 +204,29 @@ public class MainActivity extends AppCompatActivity {
super.onPostCreate(savedInstanceState); super.onPostCreate(savedInstanceState);
final App app = App.getApp(); final App app = App.getApp();
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(app);
if (prefs.getBoolean(app.getString(R.string.update_app_key), false) if (sharedPreferences.getBoolean(app.getString(R.string.update_app_key), false)
&& prefs.getBoolean(app.getString(R.string.update_check_consent_key), false)) { && sharedPreferences
.getBoolean(app.getString(R.string.update_check_consent_key), false)) {
// Start the worker which is checking all conditions // Start the worker which is checking all conditions
// and eventually searching for a new version. // and eventually searching for a new version.
NewVersionWorker.enqueueNewVersionCheckingWork(app, false); NewVersionWorker.enqueueNewVersionCheckingWork(app, false);
} }
} }
@Override
protected void onStart() {
super.onStart();
sharedPrefEditor.putBoolean(KEY_IS_IN_BACKGROUND, false).apply();
Log.d(TAG, "App moved to foreground");
}
@Override
protected void onStop() {
super.onStop();
sharedPrefEditor.putBoolean(KEY_IS_IN_BACKGROUND, true).apply();
Log.d(TAG, "App moved to background");
}
private void setupDrawer() throws ExtractionException { private void setupDrawer() throws ExtractionException {
addDrawerMenuForCurrentService(); addDrawerMenuForCurrentService();
@ -508,13 +526,11 @@ public class MainActivity extends AppCompatActivity {
ErrorUtil.showUiErrorSnackbar(this, "Setting up service toggle", e); ErrorUtil.showUiErrorSnackbar(this, "Setting up service toggle", e);
} }
final SharedPreferences sharedPreferences =
PreferenceManager.getDefaultSharedPreferences(this);
if (sharedPreferences.getBoolean(Constants.KEY_THEME_CHANGE, false)) { if (sharedPreferences.getBoolean(Constants.KEY_THEME_CHANGE, false)) {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "Theme has changed, recreating activity..."); Log.d(TAG, "Theme has changed, recreating activity...");
} }
sharedPreferences.edit().putBoolean(Constants.KEY_THEME_CHANGE, false).apply(); sharedPrefEditor.putBoolean(Constants.KEY_THEME_CHANGE, false).apply();
ActivityCompat.recreate(this); ActivityCompat.recreate(this);
} }
@ -522,7 +538,7 @@ public class MainActivity extends AppCompatActivity {
if (DEBUG) { if (DEBUG) {
Log.d(TAG, "main page has changed, recreating main fragment..."); Log.d(TAG, "main page has changed, recreating main fragment...");
} }
sharedPreferences.edit().putBoolean(Constants.KEY_MAIN_PAGE_CHANGE, false).apply(); sharedPrefEditor.putBoolean(Constants.KEY_MAIN_PAGE_CHANGE, false).apply();
NavigationHelper.openMainActivity(this); NavigationHelper.openMainActivity(this);
} }

View File

@ -11,7 +11,9 @@ import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat import androidx.core.app.NotificationManagerCompat
import androidx.core.app.PendingIntentCompat import androidx.core.app.PendingIntentCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.preference.PreferenceManager
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import org.schabi.newpipe.MainActivity
import org.schabi.newpipe.R import org.schabi.newpipe.R
/** /**
@ -35,12 +37,20 @@ class ErrorUtil {
* activity (since the workflow would be interrupted anyway in that case). So never use this * activity (since the workflow would be interrupted anyway in that case). So never use this
* for background services. * for background services.
* *
* If the crashed occurred while the app was in the background open a notification instead
*
* @param context the context to use to start the new activity * @param context the context to use to start the new activity
* @param errorInfo the error info to be reported * @param errorInfo the error info to be reported
*/ */
@JvmStatic @JvmStatic
fun openActivity(context: Context, errorInfo: ErrorInfo) { fun openActivity(context: Context, errorInfo: ErrorInfo) {
context.startActivity(getErrorActivityIntent(context, errorInfo)) if (PreferenceManager.getDefaultSharedPreferences(context)
.getBoolean(MainActivity.KEY_IS_IN_BACKGROUND, true)
) {
createNotification(context, errorInfo)
} else {
context.startActivity(getErrorActivityIntent(context, errorInfo))
}
} }
/** /**