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

Commit a34a64d2 authored by Robert Greenwalt's avatar Robert Greenwalt Committed by The Android Automerger
Browse files

Add gservices updater for carrier provisioning url

bug:9623159
Change-Id: I36697ed341353b7a3dbec5afe20241102e76f6f1
parent 4fbe5af4
Loading
Loading
Loading
Loading
+12 −0
Original line number Original line Diff line number Diff line
@@ -1358,4 +1358,16 @@ public class ConnectivityManager {
        }
        }
        return timeOutMs;
        return timeOutMs;
    }
    }

    /**
     * Get the carrier provisioning url.
     * {@hide}
     */
    public String getMobileProvisioningUrl() {
        try {
            return mService.getMobileProvisioningUrl();
        } catch (RemoteException e) {
        }
        return null;
    }
}
}
+2 −0
Original line number Original line Diff line number Diff line
@@ -134,4 +134,6 @@ interface IConnectivityManager
    int findConnectionTypeForIface(in String iface);
    int findConnectionTypeForIface(in String iface);


    int checkMobileProvisioning(boolean sendNotification, int suggestedTimeOutMs, in ResultReceiver resultReceiver);
    int checkMobileProvisioning(boolean sendNotification, int suggestedTimeOutMs, in ResultReceiver resultReceiver);

    String getMobileProvisioningUrl();
}
}
+6 −0
Original line number Original line Diff line number Diff line
@@ -2384,6 +2384,12 @@
            </intent-filter>
            </intent-filter>
        </receiver>
        </receiver>


        <receiver android:name="com.android.server.updates.CarrierProvisioningUrlsInstallReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.UPDATE_CARRIER_PROVISIONING_URLS" />
            </intent-filter>
        </receiver>

        <receiver android:name="com.android.server.updates.TZInfoInstallReceiver" >
        <receiver android:name="com.android.server.updates.TZInfoInstallReceiver" >
            <intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.UPDATE_TZINFO" />
                <action android:name="android.intent.action.UPDATE_TZINFO" />
+119 −7
Original line number Original line Diff line number Diff line
@@ -42,6 +42,7 @@ import android.content.ContextWrapper;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.database.ContentObserver;
import android.net.CaptivePortalTracker;
import android.net.CaptivePortalTracker;
@@ -97,6 +98,7 @@ import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.Slog;
import android.util.Slog;
import android.util.SparseIntArray;
import android.util.SparseIntArray;
import android.util.Xml;


import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.net.LegacyVpnInfo;
import com.android.internal.net.LegacyVpnInfo;
@@ -106,6 +108,7 @@ import com.android.internal.telephony.DctConstants;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.XmlUtils;
import com.android.server.am.BatteryStatsService;
import com.android.server.am.BatteryStatsService;
import com.android.server.connectivity.Nat464Xlat;
import com.android.server.connectivity.Nat464Xlat;
import com.android.server.connectivity.Tethering;
import com.android.server.connectivity.Tethering;
@@ -117,7 +120,13 @@ import com.google.android.collect.Sets;


import dalvik.system.DexClassLoader;
import dalvik.system.DexClassLoader;


import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.File;
import java.io.FileDescriptor;
import java.io.FileDescriptor;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.PrintWriter;
import java.lang.reflect.Constructor;
import java.lang.reflect.Constructor;
@@ -3600,10 +3609,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                        }
                        }
                        case ConnectivityManager.CMP_RESULT_CODE_REDIRECTED: {
                        case ConnectivityManager.CMP_RESULT_CODE_REDIRECTED: {
                            log("CheckMp.onComplete: warm sim");
                            log("CheckMp.onComplete: warm sim");
                            String url = getProvisioningUrl();
                            String url = getMobileProvisioningUrl();
                            if (TextUtils.isEmpty(url)) {
                            if (TextUtils.isEmpty(url)) {
                                url = mContext.getResources()
                                url = getMobileRedirectedProvisioningUrl();
                                        .getString(R.string.mobile_redirected_provisioning_url);
                            }
                            }
                            if (TextUtils.isEmpty(url) == false) {
                            if (TextUtils.isEmpty(url) == false) {
                                log("CheckMp.onComplete: warm sim (redirected), url=" + url);
                                log("CheckMp.onComplete: warm sim (redirected), url=" + url);
@@ -3615,7 +3623,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                        }
                        }
                        case ConnectivityManager.CMP_RESULT_CODE_NO_DNS:
                        case ConnectivityManager.CMP_RESULT_CODE_NO_DNS:
                        case ConnectivityManager.CMP_RESULT_CODE_NO_TCP_CONNECTION: {
                        case ConnectivityManager.CMP_RESULT_CODE_NO_TCP_CONNECTION: {
                            String url = getProvisioningUrl();
                            String url = getMobileProvisioningUrl();
                            if (TextUtils.isEmpty(url) == false) {
                            if (TextUtils.isEmpty(url) == false) {
                                log("CheckMp.onComplete: warm sim (no dns/tcp), url=" + url);
                                log("CheckMp.onComplete: warm sim (no dns/tcp), url=" + url);
                                setNotificationVisible(true, ni, url);
                                setNotificationVisible(true, ni, url);
@@ -3989,10 +3997,114 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        log("setNotificationVisible: X visible=" + visible + " ni=" + networkInfo + " url=" + url);
        log("setNotificationVisible: X visible=" + visible + " ni=" + networkInfo + " url=" + url);
    }
    }


    private String getProvisioningUrl() {
    /** Location to an updatable file listing carrier provisioning urls.
        String url = mContext.getResources().getString(R.string.mobile_provisioning_url);
     *  An example:
        log("getProvisioningUrl: mobile_provisioning_url=" + url);
     *
     * <?xml version="1.0" encoding="utf-8"?>
     *  <provisioningUrls>
     *   <provisioningUrl mcc="310" mnc="4">http://myserver.com/foo?mdn=%3$s&amp;iccid=%1$s&amp;imei=%2$s</provisioningUrl>
     *   <redirectedUrl mcc="310" mnc="4">http://www.google.com</redirectedUrl>
     *  </provisioningUrls>
     */
    private static final String PROVISIONING_URL_PATH =
            "/data/misc/radio/provisioning_urls.xml";
    private final File mProvisioningUrlFile = new File(PROVISIONING_URL_PATH);

    /** XML tag for root element. */
    private static final String TAG_PROVISIONING_URLS = "provisioningUrls";
    /** XML tag for individual url */
    private static final String TAG_PROVISIONING_URL = "provisioningUrl";
    /** XML tag for redirected url */
    private static final String TAG_REDIRECTED_URL = "redirectedUrl";
    /** XML attribute for mcc */
    private static final String ATTR_MCC = "mcc";
    /** XML attribute for mnc */
    private static final String ATTR_MNC = "mnc";

    private static final int REDIRECTED_PROVISIONING = 1;
    private static final int PROVISIONING = 2;

    private String getProvisioningUrlBaseFromFile(int type) {
        FileReader fileReader = null;
        XmlPullParser parser = null;
        Configuration config = mContext.getResources().getConfiguration();
        String tagType;

        switch (type) {
            case PROVISIONING:
                tagType = TAG_PROVISIONING_URL;
                break;
            case REDIRECTED_PROVISIONING:
                tagType = TAG_REDIRECTED_URL;
                break;
            default:
                throw new RuntimeException("getProvisioningUrlBaseFromFile: Unexpected parameter " +
                        type);
        }

        try {
            fileReader = new FileReader(mProvisioningUrlFile);
            parser = Xml.newPullParser();
            parser.setInput(fileReader);
            XmlUtils.beginDocument(parser, TAG_PROVISIONING_URLS);

            while (true) {
                XmlUtils.nextElement(parser);


                String element = parser.getName();
                if (element == null) break;

                if (element.equals(tagType)) {
                    String mcc = parser.getAttributeValue(null, ATTR_MCC);
                    try {
                        if (mcc != null && Integer.parseInt(mcc) == config.mcc) {
                            String mnc = parser.getAttributeValue(null, ATTR_MNC);
                            if (mnc != null && Integer.parseInt(mnc) == config.mnc) {
                                parser.next();
                                if (parser.getEventType() == XmlPullParser.TEXT) {
                                    return parser.getText();
                                }
                            }
                        }
                    } catch (NumberFormatException e) {
                        loge("NumberFormatException in getProvisioningUrlBaseFromFile: " + e);
                    }
                }
            }
            return null;
        } catch (FileNotFoundException e) {
            loge("Carrier Provisioning Urls file not found");
        } catch (XmlPullParserException e) {
            loge("Xml parser exception reading Carrier Provisioning Urls file: " + e);
        } catch (IOException e) {
            loge("I/O exception reading Carrier Provisioning Urls file: " + e);
        } finally {
            if (fileReader != null) {
                try {
                    fileReader.close();
                } catch (IOException e) {}
            }
        }
        return null;
    }

    private String getMobileRedirectedProvisioningUrl() {
        String url = getProvisioningUrlBaseFromFile(REDIRECTED_PROVISIONING);
        if (TextUtils.isEmpty(url)) {
            url = mContext.getResources().getString(R.string.mobile_redirected_provisioning_url);
        }
        return url;
    }

    public String getMobileProvisioningUrl() {
        enforceConnectivityInternalPermission();
        String url = getProvisioningUrlBaseFromFile(PROVISIONING);
        if (TextUtils.isEmpty(url)) {
            url = mContext.getResources().getString(R.string.mobile_provisioning_url);
            log("getProvisioningUrl: mobile_provisioining_url from resource =" + url);
        } else {
            log("getProvisioningUrl: mobile_provisioning_url from File =" + url);
        }
        // populate the iccid, imei and phone number in the provisioning url.
        // populate the iccid, imei and phone number in the provisioning url.
        if (!TextUtils.isEmpty(url)) {
        if (!TextUtils.isEmpty(url)) {
            String phoneNumber = mTelephonyManager.getLine1Number();
            String phoneNumber = mTelephonyManager.getLine1Number();
+24 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * 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.android.server.updates;

public class CarrierProvisioningUrlsInstallReceiver extends ConfigUpdateInstallReceiver {

    public CarrierProvisioningUrlsInstallReceiver() {
        super("/data/misc/radio/", "provisioning_urls.xml", "metadata/", "version");
    }
}