/* * Copyright (C) 2012 Pixmob (http://github.com/pixmob) * * 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 org.pixmob.freemobile.netstat; import static org.pixmob.freemobile.netstat.BuildConfig.DEBUG; import static org.pixmob.freemobile.netstat.Constants.TAG; import java.util.HashSet; import java.util.Set; import android.content.Context; import android.database.CharArrayBuffer; import android.util.Log; /** * Mobile operator list. * @author Pixmob */ public enum MobileOperator { FREE_MOBILE, ORANGE; private static final Set<String> FREE_MOBILE_IDENTIFIERS = new HashSet<String>(2); private static final Set<String> ORANGE_IDENTIFIERS = new HashSet<String>(3); static { // MCC+MNC identifier list: // http://en.wikipedia.org/wiki/Mobile_Network_Code FREE_MOBILE_IDENTIFIERS.add("20815"); FREE_MOBILE_IDENTIFIERS.add("20816"); ORANGE_IDENTIFIERS.add("20800"); ORANGE_IDENTIFIERS.add("20801"); ORANGE_IDENTIFIERS.add("20802"); } /** * Get a {@link MobileOperator} instance from a MCC+MNC identifier. */ public static MobileOperator fromString(String mccMnc) { if (mccMnc == null) { return null; } if (ORANGE_IDENTIFIERS.contains(mccMnc)) { return ORANGE; } if (FREE_MOBILE_IDENTIFIERS.contains(mccMnc)) { return FREE_MOBILE; } if (DEBUG) { Log.v(TAG, "Unknown MCC+MNC: " + mccMnc); } return null; } public static MobileOperator fromString(CharArrayBuffer mccMnc) { if (mccMnc == null || mccMnc.sizeCopied != 5 || mccMnc.data[0] != '2' || mccMnc.data[1] != '0' || mccMnc.data[2] != '8') { return null; } if (mccMnc.data[3] == '0' && mccMnc.data[4] == '0' || mccMnc.data[3] == '0' && mccMnc.data[4] == '1' || mccMnc.data[3] == '0' && mccMnc.data[4] == '2') { return ORANGE; } if (mccMnc.data[3] == '1' && mccMnc.data[4] == '4' || mccMnc.data[3] == '1' && mccMnc.data[4] == '5') { return FREE_MOBILE; } if (DEBUG) { Log.v(TAG, "Unknown MCC+MNC: " + new String(mccMnc.data)); } return null; } public String toName(Context context) { if (FREE_MOBILE.equals(this)) { return context.getString(R.string.network_free_mobile); } if (ORANGE.equals(this)) { return context.getString(R.string.network_orange); } return context.getString(R.string.network_unknown); } }