Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Verified Commit d641ca7e authored by Marvin W.'s avatar Marvin W. 🐿️
Browse files

Fix UI mismatching actual configuration due to multiprocess

parent 3ef330ad
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -193,6 +193,8 @@
            </intent-filter>
        </service>

        <receiver android:name="org.microg.gms.checkin.ServiceInfoReceiver" />

        <receiver android:name="org.microg.gms.checkin.TriggerReceiver">
            <intent-filter>
                <action android:name="android.server.checkin.CHECKIN" />
@@ -238,7 +240,7 @@
            </intent-filter>
        </receiver>

        <receiver android:name="org.microg.gms.gcm.StatusInfoProvider" />
        <receiver android:name="org.microg.gms.gcm.ServiceInfoReceiver" />

        <receiver android:name="org.microg.gms.gcm.TriggerReceiver">
            <intent-filter>
@@ -627,6 +629,8 @@
            </intent-filter>
        </service>

        <receiver android:name="org.microg.gms.snet.ServiceInfoReceiver" />

        <service android:name="org.microg.gms.snet.SafetyNetClientService">
            <intent-filter>
                <action android:name="com.google.android.gms.safetynet.service.START" />
+21 −1
Original line number Diff line number Diff line
@@ -9,6 +9,11 @@ import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;

import org.microg.gms.common.PackageUtils;

import java.io.File;

public class CheckinPrefs implements SharedPreferences.OnSharedPreferenceChangeListener {
    public static final String PREF_ENABLE_CHECKIN = "checkin_enable_service";
@@ -16,6 +21,9 @@ public class CheckinPrefs implements SharedPreferences.OnSharedPreferenceChangeL

    public static CheckinPrefs get(Context context) {
        if (INSTANCE == null) {
            if (!context.getPackageName().equals(PackageUtils.getProcessName())) {
                Log.w("Preferences", CheckinPrefs.class.getName() + " initialized outside main process", new RuntimeException());
            }
            if (context == null) return new CheckinPrefs(null);
            INSTANCE = new CheckinPrefs(context.getApplicationContext());
        }
@@ -23,18 +31,30 @@ public class CheckinPrefs implements SharedPreferences.OnSharedPreferenceChangeL
    }

    private SharedPreferences preferences;
    private SharedPreferences systemDefaultPreferences;
    private boolean checkinEnabled = false;

    private CheckinPrefs(Context context) {
        if (context != null) {
            preferences = PreferenceManager.getDefaultSharedPreferences(context);
            preferences.registerOnSharedPreferenceChangeListener(this);
            try {
                systemDefaultPreferences = (SharedPreferences) Context.class.getDeclaredMethod("getSharedPreferences", File.class, int.class).invoke(context, new File("/system/etc/microg.xml"), Context.MODE_PRIVATE);
            } catch (Exception ignored) {
            }
            update();
        }
    }

    private boolean getSettingsBoolean(String key, boolean def) {
        if (systemDefaultPreferences != null) {
            def = systemDefaultPreferences.getBoolean(key, def);
        }
        return preferences.getBoolean(key, def);
    }

    private void update() {
        checkinEnabled = preferences.getBoolean(PREF_ENABLE_CHECKIN, false);
        checkinEnabled = getSettingsBoolean(PREF_ENABLE_CHECKIN, false);
    }

    @Override
+1 −1
Original line number Diff line number Diff line
@@ -55,6 +55,6 @@ public class LastCheckinInfo {
                .putLong(PREF_SECURITY_TOKEN, securityToken)
                .putString(PREF_VERSION_INFO, versionInfo)
                .putString(PREF_DEVICE_DATA_VERSION_INFO, deviceDataVersionInfo)
                .apply();
                .commit();
    }
}
+4 −0
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Build;
import android.text.TextUtils;

import java.util.ArrayList;
@@ -65,6 +66,9 @@ public class GcmDatabase extends SQLiteOpenHelper {
    public GcmDatabase(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
        this.context = context;
        if (Build.VERSION.SDK_INT >= 16) {
            this.setWriteAheadLoggingEnabled(true);
        }
    }

    public static class App {
+36 −17
Original line number Diff line number Diff line
@@ -24,6 +24,9 @@ import android.net.NetworkInfo;
import android.preference.PreferenceManager;
import android.util.Log;

import org.microg.gms.common.PackageUtils;

import java.io.File;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -50,6 +53,9 @@ public class GcmPrefs implements SharedPreferences.OnSharedPreferenceChangeListe

    public static GcmPrefs get(Context context) {
        if (INSTANCE == null) {
            if (!context.getPackageName().equals(PackageUtils.getProcessName())) {
                Log.w("Preferences", GcmPrefs.class.getName() + " initialized outside main process", new RuntimeException());
            }
            if (context == null) return new GcmPrefs(null);
            INSTANCE = new GcmPrefs(context.getApplicationContext());
        }
@@ -70,30 +76,43 @@ public class GcmPrefs implements SharedPreferences.OnSharedPreferenceChangeListe
    private int learntMobile = 300000;
    private int learntOther = 300000;

    private SharedPreferences defaultPreferences;
    private SharedPreferences preferences;
    private SharedPreferences systemDefaultPreferences;

    private GcmPrefs(Context context) {
        if (context != null) {
            defaultPreferences = PreferenceManager.getDefaultSharedPreferences(context);
            defaultPreferences.registerOnSharedPreferenceChangeListener(this);
            preferences = PreferenceManager.getDefaultSharedPreferences(context);
            preferences.registerOnSharedPreferenceChangeListener(this);
            try {
                systemDefaultPreferences = (SharedPreferences) Context.class.getDeclaredMethod("getSharedPreferences", File.class, int.class).invoke(context, new File("/system/etc/microg.xml"), Context.MODE_PRIVATE);
            } catch (Exception ignored) {
            }
            update();
        }
    }

    private boolean getSettingsBoolean(String key, boolean def) {
        if (systemDefaultPreferences != null) {
            def = systemDefaultPreferences.getBoolean(key, def);
        }
        return preferences.getBoolean(key, def);
    }

    public void update() {
        gcmLogEnabled = defaultPreferences.getBoolean(PREF_FULL_LOG, true);
        lastPersistedId = defaultPreferences.getString(PREF_LAST_PERSISTENT_ID, "");
        confirmNewApps = defaultPreferences.getBoolean(PREF_CONFIRM_NEW_APPS, false);
        gcmEnabled = defaultPreferences.getBoolean(PREF_ENABLE_GCM, false);
        gcmEnabled = getSettingsBoolean(PREF_ENABLE_GCM, false);
        gcmLogEnabled = getSettingsBoolean(PREF_FULL_LOG, true);
        confirmNewApps = getSettingsBoolean(PREF_CONFIRM_NEW_APPS, false);

        lastPersistedId = preferences.getString(PREF_LAST_PERSISTENT_ID, "");

        networkMobile = Integer.parseInt(defaultPreferences.getString(PREF_NETWORK_MOBILE, "0"));
        networkWifi = Integer.parseInt(defaultPreferences.getString(PREF_NETWORK_WIFI, "0"));
        networkRoaming = Integer.parseInt(defaultPreferences.getString(PREF_NETWORK_ROAMING, "0"));
        networkOther = Integer.parseInt(defaultPreferences.getString(PREF_NETWORK_OTHER, "0"));
        networkMobile = Integer.parseInt(preferences.getString(PREF_NETWORK_MOBILE, "0"));
        networkWifi = Integer.parseInt(preferences.getString(PREF_NETWORK_WIFI, "0"));
        networkRoaming = Integer.parseInt(preferences.getString(PREF_NETWORK_ROAMING, "0"));
        networkOther = Integer.parseInt(preferences.getString(PREF_NETWORK_OTHER, "0"));

        learntMobile = defaultPreferences.getInt(PREF_LEARNT_MOBILE, 300000);
        learntWifi = defaultPreferences.getInt(PREF_LEARNT_WIFI, 300000);
        learntOther = defaultPreferences.getInt(PREF_LEARNT_OTHER, 300000);
        learntMobile = preferences.getInt(PREF_LEARNT_MOBILE, 300000);
        learntWifi = preferences.getInt(PREF_LEARNT_WIFI, 300000);
        learntOther = preferences.getInt(PREF_LEARNT_OTHER, 300000);
    }

    public String getNetworkPrefForInfo(NetworkInfo info) {
@@ -182,7 +201,7 @@ public class GcmPrefs implements SharedPreferences.OnSharedPreferenceChangeListe
        learntMobile = Math.max(MIN_INTERVAL, Math.min(learntMobile, MAX_INTERVAL));
        learntWifi = Math.max(MIN_INTERVAL, Math.min(learntWifi, MAX_INTERVAL));
        learntOther = Math.max(MIN_INTERVAL, Math.min(learntOther, MAX_INTERVAL));
        defaultPreferences.edit().putInt(PREF_LEARNT_MOBILE, learntMobile).putInt(PREF_LEARNT_WIFI, learntWifi).putInt(PREF_LEARNT_OTHER, learntOther).apply();
        preferences.edit().putInt(PREF_LEARNT_MOBILE, learntMobile).putInt(PREF_LEARNT_WIFI, learntWifi).putInt(PREF_LEARNT_OTHER, learntOther).apply();
    }

    @Override
@@ -223,11 +242,11 @@ public class GcmPrefs implements SharedPreferences.OnSharedPreferenceChangeListe
    public void extendLastPersistedId(String id) {
        if (!lastPersistedId.isEmpty()) lastPersistedId += "|";
        lastPersistedId += id;
        defaultPreferences.edit().putString(PREF_LAST_PERSISTENT_ID, lastPersistedId).apply();
        preferences.edit().putString(PREF_LAST_PERSISTENT_ID, lastPersistedId).apply();
    }

    public void clearLastPersistedId() {
        lastPersistedId = "";
        defaultPreferences.edit().putString(PREF_LAST_PERSISTENT_ID, lastPersistedId).apply();
        preferences.edit().putString(PREF_LAST_PERSISTENT_ID, lastPersistedId).apply();
    }
}
Loading