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

Commit 1e6329d4 authored by Wink Saville's avatar Wink Saville
Browse files

Use new preferredAPN URI avoiding onApnChanged() call with self-change

Solving the issue that setting preferred APN from GDCT triggers
back APN change event and force unnecessary data call disconnects
and setups.

The new URI is added in Telephony Provider so ContentObserver
callback (results in onApnChanged) will not be triggered.

Bug:5448858
Change-Id: I4c0bcf32cec69cf1d0a0430f7a27495b89e93625
parent bd9d9d3a
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -136,7 +136,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
    private static final String INTENT_DATA_STALL_ALARM =
        "com.android.internal.telephony.gprs-data-stall";

    static final Uri PREFERAPN_URI = Uri.parse("content://telephony/carriers/preferapn");
    static final Uri PREFERAPN_NO_UPDATE_URI =
                        Uri.parse("content://telephony/carriers/preferapn_no_update");
    static final String APN_ID = "apn_id";
    private boolean canSetPreferApn = false;

@@ -2342,26 +2343,30 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {

    private void setPreferredApn(int pos) {
        if (!canSetPreferApn) {
            log("setPreferredApn: X !canSEtPreferApn");
            return;
        }

        log("setPreferredApn: delete");
        ContentResolver resolver = mPhone.getContext().getContentResolver();
        resolver.delete(PREFERAPN_URI, null, null);
        resolver.delete(PREFERAPN_NO_UPDATE_URI, null, null);

        if (pos >= 0) {
            log("setPreferredApn: insert");
            ContentValues values = new ContentValues();
            values.put(APN_ID, pos);
            resolver.insert(PREFERAPN_URI, values);
            resolver.insert(PREFERAPN_NO_UPDATE_URI, values);
        }
    }

    private ApnSetting getPreferredApn() {
        if (mAllApns.isEmpty()) {
            log("getPreferredApn: X not found mAllApns.isEmpty");
            return null;
        }

        Cursor cursor = mPhone.getContext().getContentResolver().query(
                PREFERAPN_URI, new String[] { "_id", "name", "apn" },
                PREFERAPN_NO_UPDATE_URI, new String[] { "_id", "name", "apn" },
                null, null, Telephony.Carriers.DEFAULT_SORT_ORDER);

        if (cursor != null) {
@@ -2376,6 +2381,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
            pos = cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers._ID));
            for(ApnSetting p:mAllApns) {
                if (p.id == pos && p.canHandleType(mRequestedApnType)) {
                    log("getPreferredApn: X found apnSetting" + p);
                    cursor.close();
                    return p;
                }
@@ -2386,6 +2392,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
            cursor.close();
        }

        log("getPreferredApn: X not found");
        return null;
    }