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

Commit f96afa94 authored by Shareef Ali's avatar Shareef Ali
Browse files

SamsungQualcommRil: bring back operatorCheck. (1/2)

* use more memory effience algorithim.
* Add Alot of comments
* Add xml to hashmap code.
* remove obsolete code.

Change-Id: Ia567d376962d95fced93634ace52452cdaeafd8b
parent d6d8fe5a
Loading
Loading
Loading
Loading
+119 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2013-2014 The CyanogenMod 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.internal.telephony;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;

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

import android.os.Environment;
import android.telephony.Rlog;
import android.util.Xml;

import com.android.internal.util.XmlUtils;

public class Operators{


    // Initialize list of Operator codes
    // this will be taken care of when garbage collection starts.
    private HashMap<String, String>  initList() {
        HashMap<String, String> init = new HashMap<String, String>();
        //taken from spnOveride.java

        FileReader spnReader;

        final File spnFile = new File(Environment.getRootDirectory(),
                                     "etc/selective-spn-conf.xml");

        try {
            spnReader = new FileReader(spnFile);
        } catch (FileNotFoundException e) {
            Rlog.w("Operatorcheck", "Can not open " +
                   Environment.getRootDirectory() + "/etc/selective-spn-conf.xml");
            return init;
        }

        try {
            XmlPullParser parser = Xml.newPullParser();
            parser.setInput(spnReader);

            XmlUtils.beginDocument(parser, "spnOverrides");

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

                String name = parser.getName();
                if (!"spnOverride".equals(name)) {
                    break;
                }

                String numeric = parser.getAttributeValue(null, "numeric");
                String data    = parser.getAttributeValue(null, "spn");

                init.put(numeric, data);
            }
        } catch (XmlPullParserException e) {
            Rlog.w("Operatorcheck", "Exception in spn-conf parser " + e);
        } catch (IOException e) {
            Rlog.w("Operatorcheck", "Exception in spn-conf parser " + e);
        }
        return init;
    }
    //this will stay persistant in memory when called
    private static String stored = null;
    private static String storedOperators = null;

    public static String operatorReplace(String response){
        // sanity checking if the value is actually not equal to the range apn
        // numerics
        // if it is null, check your ril class.
        if(response == null ||
           (5 != response.length() && response.length() != 6)){
            return response;
        }
        // this will check if the stored value is equal to other.
        // this uses a technique called last known of good value.
        // along with sanity checking
        if(storedOperators != null && stored != null && stored.equals(response)){
            return storedOperators;
        }
        stored = response;
        try {
            // this will find out if it a number then it will catch it based
            // on invalid chars.
            Integer.parseInt(response);
        }  catch(NumberFormatException E){
            // not a number, pass it along to stored operator until the next
            // round.
            storedOperators = response;
            return storedOperators;
        }
        // this code will be taking care of when garbage collection start
        Operators init = new Operators();
        Map<String, String> operators = init.initList();
        storedOperators = operators.containsKey(response) ? operators.get(response) : response;
        return storedOperators;
    }
}
+3 −9
Original line number Original line Diff line number Diff line
/*
/*
 * Copyright (C) 2012-2013 The CyanogenMod Project
 * Copyright (C) 2012-2014 The CyanogenMod Project
 *
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * you may not use this file except in compliance with the License.
@@ -560,15 +560,9 @@ public class SamsungQualcommRIL extends RIL implements CommandsInterface {
    private Object
    private Object
    operatorCheck(Parcel p) {
    operatorCheck(Parcel p) {
        String response[] = (String[])responseStrings(p);
        String response[] = (String[])responseStrings(p);
        for(int i=0; i<3; i++){
        for(int i=0; i<2; i++){
            if (response[i]!= null){
            if (response[i]!= null){
                if (i<2){
                response[i] = Operators.operatorReplace(response[i]);
                    if (response[i].equals("       Empty") || (response[i].equals("") && !isGSM)) {
                        response[i]=operator;
                    }
                } else if (response[i].equals("31000")|| response[i].equals("11111") || response[i].equals("123456") || response[i].equals("31099") || ((response[i].length()<5  || response[i].length()>6) && !isGSM)){
                        response[i]=homeOperator;
                }
            }
            }
        }
        }
        return response;
        return response;