Merge branch 'cm-13.0' of https://github.com/CyanogenMod/android_vendor_cm into replicant-6.0

This commit is contained in:
Wolfgang Wiedmeyer 2016-12-12 13:09:51 +01:00
commit 1bbac0dbd1
94 changed files with 2394 additions and 2023 deletions

View File

@ -175,13 +175,161 @@ Galaxy Note 2 (N7100):
CyanogenMod
===============
Visit http://github.com/CyanogenMod for full changelogs and git access.
Visit http://github.com/CyanogenMod for full source and git access.
Visit http://review.cyanogenmod.org for our Gerrit instance.
CHANGELOG (notable new features)
---------
### 13.0 ZNH5Y
* Common: Android 6.0.1 (Google)
* Android Security Bulletin - August 1st update
* Wi-Fi Tethering automatically turn off hotspot after X minutes of inactivity
* Profiles add notification light controls
* Do Not Disturb/Priority Mode add notification light controls
* Privacy Guard/App data usage Restrict apps to Wi-Fi or Cellular data only or block all internet access, per app
* Bluetooth Devices battery support
* Lockscreen Wallpaper picker makes its return
* Lockscreen Weather and new Weather plug in support
* Lockscreen Blur support (on a per device basis) and the ability to disable the effect
* Live Lockscreen support
* New LiveDisplay hardware enhancements and API
* Snap Camera (per device basis)
* Gello Browser (per device basis)
* Lots of translations
* Cyanogen Apps support (x86 not supported yet)
* Additional CM SDK APIs
* Security fixes galore
### 13.0 ZNH0E
* Common: Android 6.0.1 (Google)
* Android Security Bulletin - March 7th update
* Settings > Build date - Triple tap to access demo mode
* Settings > Memory - New screen to show memory usage over a selected period of time
* Protected Apps - New folder UX, fingerprint support, enhanced ability to restrict access
* New SMS/MMS application
### 12.1 YOG4PAO3
* Common: Android 5.1.1 (Google)
* Android Security Bulletin October 5th update
### 12.1 YOG4PAO2
* Common: Android 5.1.1 (Google)
* New Devices: Andromax Q (rendang), Galaxy S5 China (kltechn), Galaxy S5 Duos (klteduos), Galaxy S5 Duos China (kltechnduo)
* IMAP idle support
* SDK v1 release
* Stagefright security fixes
### 12.0
* Common: Android 5.0 (Google)
### 11.0.0 M12
* Common: Android 4.4.4 (Google)
* patches against POODLE vulnerability in SSLv3
* Multi-sim improvements throughout the OS experience
### 11.0.0 M11
* Common: Android 4.4.4 (Google)
* New Devices: Galaxy S4 Active (jactivelte), Galaxy S4 SK I-9506 (ks01lte), Galaxy S5 GSM (klte), Galaxy Tab 10.1 (picassowifi), Galaxy Player 4.0 (ypg1)
* Re-introduce Samsung Galaxy Relay 4G (apexqtmo) support
* Fix signal strength showing 2147483647 on certain devices
* Frameworks & Core Apps: CAF and other upstream updates
* Lockscreen: Do not play sounds while a phone call is active & MSIM updates
* Frameworks: Add base & MSIM APIs for SEEK (Secure Element Evaluation Kit) support
* Frameworks: Fix volume button changing two steps per click
* Frameworks: Add Screen Off action for double-tap/long-press configuration options
* Show devices connected to your WiFi (tethering) Hotspot
* Fix bug related to switch to last app action while in Recents view
* Fix Navigation Bar arrow keys in RTL locales
* Translations updates from CyanogenMod CrowdIn team
* Adjustments to Glove Mode (High Touch Sensitivity)
* APN Updates for various regions
* Camera: Add support for all available Slow Shutter speeds (hardware dependent); Improve shutter button
* Dialer/InCallUI: Fix smartcover always showing answer fragment
* LG G2: Address GPS and NFC issues
* Base support for HTC Desire 816 & HTC One Mini 2 (pending nightlies)
* Various security updates
* General bug fixes
### 11.0.0 M10
* Common: Android 4.4.4 (Google)
* New Devices: Galaxy S5 Sprint (kltespr)
* Split out Note 3 into GSM (hlte), Sprint (hltespr) and Verizon (hltevzw)
* Refactor moto_msm8960dt as 'ghost' for Moto X 2013
* Drop support for obake, toro, toroplus
* Theme Engine: Themes support for additional UI elements
* Frameworks & Core Apps: CAF and other upstream updates
* Settings: Add scramble pin feature
* Frameworks: Long press recent apps to switch to last used app
* Settings: Add soft reboot option
* Add smart cover support
* Add glove mode support
* Add bug reporter and crash log uploader
* Multisim updates
* General bug fixes
* ANT+ Support for various hardware
* Privacy Guard: Control NFC permissions
### 11.0.0 M9
* Common: Android 4.4.4 (Google)
* New Devices: Sony Xperia Z2 Tablets (castor); HTC One (m8)
* Theme Engine: Themes support for additional UI elements
* Lockscreen: Allow doubletap to sleep when using secure keyguard
* Settings: Safe Headset Volume prompt when interfering with 3rd party device (Jawbone, Square, etc)
* Settings: Center clock support
* Settings: Proximity Wake-Up support
* Settings: Spam notification filtering
* Settings Search: Additional improvements and highlighting
* Data Usage Info: Add support for CDMA devices without sim cards
* Bluetooth: Add additional A2DP profiles
* Bluetooth: Disable AVRCP 1.5 by default (fixes various car unit compatibility)
* Email: Fix saving attachments to storage for POP3 accounts
* Account for Play Services induced wake-locks
* Fix encryption on some LG Devices
* Dialer: add support for Korean and Chinese to smart-dialer
### 11.0.0 M8
* Common: Android 4.4.4 (Google)
* New Devices: Sony Xperia Z2 (sirius); Xiaomi Mi2 (aries); Oppo Find 7a/s (find7); OnePlus One (bacon)
* Common: Fix VPN issues related to 4.4.3 merge
* Common: Enable 'Heads Up' notification mode (Settings > Notifications)
* Settings: 'Interface' replaced by 'Status Bar', 'Notification Drawer', and 'Gestures'
* Settings: Moved 'Expanded Desktop' to 'Display'
* Settings: Moved all lock screen related items to 'Lock Screen' and removed duplicates from 'Security'
* Settings: Moved 'Navigation Bar' layout control to 'Buttons'
* Trebuchet: Custom Homescreen grid size
* Trebuchet: Add Protected Apps feature
* Trebuchet: Add Search Panel (Google Now) option
* WhisperPush: No longer ignores 'Blacklist'
* Futex: Protect against Towelroot
* Various small bugfixes, global and device-specific
### 11.0.0 M7
* Common: Android 4.4.2 (Google)
* New Devices: HTC One (m8); Samsung Galaxy Tab Pro 8.4 (mondrianwifi); Galaxy Note 8.0 LTE (n5120); LG G2 Docomo (l01f)
* Common: Theme Chooser UI Overhaul
* Common: Calculator app redesign (courtesy Xlythe)
* Common: Performance Profiles
* Common: Improved theming performance on low memory devices (~512MB RAM or less)
* Trebuchet: Move settings to new slide-out panel
* Trebuchet: Consolidate settings for home and drawer options
* Media: Add FFMPEG support (expanded media format support)
* Bluetooth: Improved support for new car audio systems and docks
* Various small bugfixes, global and device-specific
### 10.2.0
* Common: Android 4.3 (Google)
* Common: Privacy Guard 2.0 with AppOps
* Common: Quick Settings Ribbon (replaces Notification Power Widgets)
* Common: Hardware Tunables HAL
* Common: Settings restructure
* SMS: Voice+ (Google Voice integration)
* SMS: Middleware layer
* APN: World Phone Support (unified APN list)
* Trebuchet: Universal Icon Pack support
* Various small bugfixes, global and device-specific
### 10.1.3
* Common: CyanogenMod Account
* Common: Privacy Guard

View File

@ -9,6 +9,7 @@ CyanogenMod
Maintainers (CyanogenMod 13.0):
-----------------------------
* __Acer A700:__ pawitp
* __Alcatel Idol 3:__ c457
* __Amazon Kindle Fire 1st Edition:__ Hashcode, FuZZ__
* __Amazon Kindle Fire 2nd Edition:__ Hashcode, FuZZ__
* __Asus EeePad Transformer (TF101):__ Bumble-Bee, EnJens
@ -20,10 +21,14 @@ Maintainers (CyanogenMod 13.0):
* __Asus Zenfone 2 ZE551ML (Z00A):__ crpalmer, jrior001
* __Asus Zenfone 2 ZE550KL (Z00L):__ LuK1337, luca020400
* __Asus Zenfone 2 ZE551KL/ZD551KL (Z00T):__ LuK1337, luca020400
* __Asus ZenPad 8.0 Z380KL:__ vm03
* __B&N NookColor (encore):__ eyeballer, fattire, keyodi, krylon360, sluo (NookieDevs)
* __B&N Nook Tablet (acclaim):__ chrmhoffmann
* __BQ Aquaris E5 4G/E5 S (vegetalte):__ cmorlok, eloimuns, Kra1o5, stucki, brinlyau (bq-dev)
* __BQ Aquaris M5 (piccolo):__ cmorlok, eloimuns, Kra1o5, stucki, brinlyau (bq-dev)
* __BQ Aquaris X5 Plus (gohan):__ cmorlok, eloimuns, Kra1o5, stucki, brinlyau (bq-dev)
* __Google Android One:__ varunchitre15
* __Google Galaxy Nexus:__ bekit, Bumble-Bee, burnsra, KalimochoAz, something15525
* __Google Galaxy Nexus:__ Ziyan, musical_chairs
* __Google Nexus S:__ burnsra, KalimochoAz, klusark
* __Google Nexus 4:__ ciwrl
* __Google Nexus 5:__ ciwrl
@ -31,12 +36,12 @@ Maintainers (CyanogenMod 13.0):
* __Google Nexus 6:__ dhacker29
* __Google Nexus 6P:__ ciwrl, dhacker29, Sam Mortimer
* __Google Nexus 7:__ burnsra, fattire, Thömy, nemith, JoeyRizzoli (GSM)
* __Google Nexus 7 (2013):__ ciwrl, nardholio, zwliew
* __Google Nexus 9:__ simonsickle, ciwrl
* __Google Nexus 10:__ Tortel, ciwrl
* __Google Nexus Player:__ dhacker29, bmc08gt
* __HTC Desire 601(zara/zaracl):__ uberlaggydarwin, PatrikKT
* __HTC Desire 816:__ Grarak, v_superuser
* __HTC Desire Eye:__ uberlaggydarwin
* __HTC Droid DNA:__ crpalmer, invisiblek
* __HTC Droid Incredible 4G LTE:__ intervigil, mdmower
* __HTC Evo 4G LTE:__ kushdeck, toastcfh
@ -59,6 +64,7 @@ Maintainers (CyanogenMod 13.0):
* __LG G2 (Canada) (D803):__ arcee, Rashed97, Shelnutt2
* __LG G2 (Sprint) (LS980):__ arcee, Rashed97, Shelnutt2
* __LG G2 (Verizon) (VS980):__ arcee, Rashed97, Shelnutt2
* __LG G2 Mini:__ Quarx2k, vm03, NikitaProAndroid
* __LG G3 (AT&T) (D850):__
* __LG G3 (T-Mobile) (D851):__ bryan2894
* __LG G3 (Canada) (D852):__ cuzz1369
@ -66,8 +72,12 @@ Maintainers (CyanogenMod 13.0):
* __LG G3 (Korea) (F400):__ TheNoFace
* __LG G3 (Sprint) (LS990):__ Kasual
* __LG G3 (Verizon) (VS985):__ invisiblek
* __LG G3 Beat (D722):__ Quarx2k, vm03, NikitaProAndroid
* __LG G3 s (D724):__ Quarx2k, vm03, NikitaProAndroid
* __LG G4 (T-Mobile) (H811):__ codeworkx, genesixxbf3
* __LG G4 (International) (H815):__ codeworkx, genesixxbf3
* __LG Optimus L70:__ Quarx2k, vm03, NikitaProAndroid
* __LG Optimus L90:__ Quarx2k, vm03, NikitaProAndroid
* __LG Optimus LTE (P930) / LG Nitro HD {P935):__ arcee
* __LG Optimus LTE (SK Telecom) (SU640):__ arcee
* __LG V10 (T-Mobile) (H901):__ genesixxbf3
@ -94,6 +104,7 @@ Maintainers (CyanogenMod 13.0):
* __Motorola Xoom 3G (UMTS):__ bazar, SteadyHawkin, TDR (Team Rogue)
* __Motorola Xoom 4G LTE (Verizon):__ bazar, SteadyHawkin, TDR (Team Rogue)
* __OnePlus One:__ cyanogen, intervigil, inwotep, arcee
* __OnePlus Two:__ ciwrl, grarak, raymanfx
* __OnePlus X:__ ashwin007, MasterAwesome
* __Oppo Find 5:__ intervigil, nebkat, raymanfx
* __Oppo Find 7:__ intervigil, tdm, inwotep, mikeioannina
@ -137,28 +148,31 @@ Maintainers (CyanogenMod 13.0):
* __Samsung Galaxy S IV (Sprint) (SPH-L720):__ noobnl
* __Samsung Galaxy S IV (T-Mobile) (SGH-M919):__ dcd
* __Samsung Galaxy S IV (Verizon) (SCH-I545):__ invisiblek
* __Samsung Galaxy S IV LTE (GT-I9505):__ AntaresOne
* __Samsung Galaxy S IV LTE (GT-I9505):__ AntaresOne, invisiblek, dcd, zwliew
* __Samsung Galaxy S IV LTE-A (GT-I9506):__ solk2
* __Samsung Galaxy S IV Mini 3G (GT-I9190):__ arco
* __Samsung Galaxy S IV Mini LTE (GT-I9195):__ arco
* __Samsung Galaxy S V (AU) (SCL23):__ scoty755
* __Samsung Galaxy S V (Vodafone) (SM-G900I):__ Regi24
* __Samsung Galaxy S V LTE (SM-G900F):__ Albinoman887
* __Samsung Galaxy S V LTE (SM-G900F):__ haggertk, OzzysCmAcc
* __Samsung Galaxy Tab 7" (GSM):__ cdesai, humberos
* __Samsung Galaxy Tab 7" (CDMA):__ jt1134
* __Samsung Galaxy Tab 2 7" (GT-P31xx):__ codyf86
* __Samsung Galaxy Tab 2 10.1" (GT-P51xx):__ codyf86
* __Samsung Galaxy Tab Pro 8.4" (SM-T320):__ crpalmer
* __Samsung Galaxy Tab S2 9.7" (SM-T810):__ raymanfx, T_I
* __Samsung Galaxy Tab S2 9.7 (LTE)" (SM-T815):__ raymanfx
* __Samsung Vibrant (SGH-T959):__ FaultException
* __Sony Xperia E3 (flamingo):__ FreeXperia Team
* __Sony Xperia L (taoshan):__ olivieer, FreeXperia Team
* __Sony Xperia M (nicki):__ RonG, FreeXperia Team
* __Sony Xperia M2 (eagle):__ FreeXperia Team
* __Sony Xperia SP (huashan):__ AdrianDC
* __Sony Xperia T (mint):__ FreeXperia Team, tilal6991, uberlaggydarwin
* __Sony Xperia T (mint):__ AdrianDC, FreeXperia Team
* __Sony Xperia T2 Ultra (tianchi):__ FreeXperia Team
* __Sony Xperia T3 (seagull):__ FreeXperia Team
* __Sony Xperia V (tsubasa):__ FreeXperia Team, tilal6991, championswimmer, uberlaggydarwin
* __Sony Xperia TX (hayabusa):__ AdrianDC, FreeXperia Team
* __Sony Xperia V (tsubasa):__ AdrianDC, FreeXperia Team
* __Sony Xperia Z (yuga):__ FreeXperia Team, Turl, olivieer
* __Sony Xperia ZL (odin):__ FreeXperia Team
* __Sony Xperia ZR (dogo):__ FreeXperia Team
@ -176,6 +190,9 @@ Maintainers (CyanogenMod 13.0):
* __Sony Z Ultra GPE (togari_gpe):__ FreeXperia Team
* __Xiaomi Mi2(s) (aries):__ Michael Zimmermann
* __Xiaomi Mi3/4 (cancro):__ JoeyRizzoli
* __Xiaomi Mi5 (gemini):__ bgcngm, defer, h2o64
* __Xiaomi Redmi 3/Prime (ido):__ Anik1199
* __Xiaomi Redmi Note 3 (kenzo):__ TheStrix
* __ZTE Nubia Z9 Max (nx510j):__ dianlujitao
FreeXperia Team:

View File

@ -21,7 +21,7 @@ LOCAL_UNINSTALLABLE_MODULE := true
LOCAL_MAVEN_REPO := https://repo1.maven.org/maven2
LOCAL_MAVEN_GROUP := com.cyngn.ambient
LOCAL_MAVEN_ARTIFACT := ambientsdk
LOCAL_MAVEN_VERSION := 1.4.0
LOCAL_MAVEN_VERSION := 1.6.0-147069776-39fe2d07
LOCAL_MAVEN_PACKAGING := aar
include $(BUILD_MAVEN_PREBUILT)

View File

@ -2,11 +2,15 @@
******************************
You have tried to change the API from what has been previously approved.
STOP.
Read this:
https://github.com/CyanogenMod/cm_platform_sdk/wiki/Creating-an-API-for-the-SDK#updating--verifying-the-api
To make these errors go away, you have two choices:
1) You can add "@hide" javadoc comments to the methods, etc. listed in the
errors above.
2) You can update current.txt by executing the following command:
2) You can update current.txt (locally) by executing the following command:
make update-cm-api
^^^^^^^^^^^^^^^^^^

View File

@ -27,7 +27,7 @@ endif
$(full_target): pomfile := $(LOCAL_MAVEN_POM)
$(full_target): repo := $(LOCAL_MAVEN_REPO)
ifdef LOCAL_MAVEN_TARGET_MODULE
$(full_target): path_to_file := $(call intermediates-dir-for,JAVA_LIBRARIES,$(LOCAL_MAVEN_TARGET_MODULE),,COMMON)/javalib.jar
$(full_target): path_to_file := $(call intermediates-dir-for,JAVA_LIBRARIES,$(LOCAL_MAVEN_TARGET_MODULE),,COMMON)/javalib.aar
endif
$(full_target): repoId := $(LOCAL_MAVEN_REPO_ID)
$(full_target): classifier := $(LOCAL_MAVEN_CLASSIFIER)
@ -38,7 +38,7 @@ $(full_target): artifact_path ?= $(basename $(path_to_file))
ifdef LOCAL_MAVEN_TARGET_MODULE
$(full_target): $(LOCAL_MAVEN_TARGET_MODULE) $(path_to_file) $(artifact_path) $(ACP)
@echo -e ${CL_GRN}"Renaming generated sdk javalib jar"${CL_RST}
@echo -e ${CL_GRN}"Renaming generated sdk javalib aar"${CL_RST}
$(hide) $(ACP) $(path_to_file) $(artifact_path)
@echo -e ${CL_GRN}"Publishing to Maven"${CL_RST}
$(hide) mvn -e -X gpg:sign-and-deploy-file \

View File

@ -25,7 +25,7 @@ ifeq (,$(filter true, $(WITHOUT_CHECK_API) $(TARGET_BUILD_PDK)))
# Run the checkapi rules by default.
droidcore: checkapi-cm
# Validate against current platform sdk version api text within prebuilts
# Validate against previous release platform sdk version api text within prebuilts
cm_last_released_sdk_version := $(CM_PLATFORM_SDK_VERSION)
.PHONY: check-cm-public-api

View File

@ -18,7 +18,7 @@
# Makefile for producing cmsdk coverage reports.
# Run "make cmsdk-test-coverage" in the $ANDROID_BUILD_TOP directory.
cts_api_coverage_exe := $(HOST_OUT_EXECUTABLES)/cts-api-coverage
cmsdk_api_coverage_exe := $(HOST_OUT_EXECUTABLES)/cmsdk-api-coverage
dexdeps_exe := $(HOST_OUT_EXECUTABLES)/dexdeps
coverage_out := $(HOST_OUT)/cmsdk-api-coverage
@ -30,16 +30,17 @@ $(api_xml_description) : $(api_text_description) $(APICHECK)
$(hide) mkdir -p $(dir $@)
$(hide) $(APICHECK_COMMAND) -convert2xml $< $@
cmsdk-test-coverage-report := $(coverage_out)/test-coverage.html
cmsdk-test-coverage-report := $(coverage_out)/cmsdk-test-coverage.html
cmsdk_tests_apk := $(call intermediates-dir-for,APPS,CMPlatformTests)/package.apk
cmsdk_api_coverage_dependencies := $(cts_api_coverage_exe) $(dexdeps_exe) $(api_xml_description)
cmsettingsprovider_tests_apk := $(call intermediates-dir-for,APPS,CMSettingsProviderTests)/package.apk
cmsdk_api_coverage_dependencies := $(cmsdk_api_coverage_exe) $(dexdeps_exe) $(api_xml_description)
$(cmsdk-test-coverage-report): PRIVATE_TEST_CASES := $(cmsdk_tests_apk)
$(cmsdk-test-coverage-report): PRIVATE_CTS_API_COVERAGE_EXE := $(cts_api_coverage_exe)
$(cmsdk-test-coverage-report): PRIVATE_TEST_CASES := $(cmsdk_tests_apk) $(cmsettingsprovider_tests_apk)
$(cmsdk-test-coverage-report): PRIVATE_CMSDK_API_COVERAGE_EXE := $(cmsdk_api_coverage_exe)
$(cmsdk-test-coverage-report): PRIVATE_DEXDEPS_EXE := $(dexdeps_exe)
$(cmsdk-test-coverage-report): PRIVATE_API_XML_DESC := $(api_xml_description)
$(cmsdk-test-coverage-report): $(cmsdk_tests_apk) $(cmsdk_api_coverage_dependencies) | $(ACP)
$(cmsdk-test-coverage-report): $(cmsdk_tests_apk) $(cmsettingsprovider_tests_apk) $(cmsdk_api_coverage_dependencies) | $(ACP)
$(call generate-cm-coverage-report,"CMSDK API Coverage Report",\
$(PRIVATE_TEST_CASES),html)
@ -57,8 +58,8 @@ endif
# 3 - Format of the report
define generate-cm-coverage-report
$(hide) mkdir -p $(dir $@)
$(hide) $(PRIVATE_CTS_API_COVERAGE_EXE) -d $(PRIVATE_DEXDEPS_EXE) -a $(PRIVATE_API_XML_DESC) -f $(3) -o $@ $(2) -cm
@ echo $(1): file://$(ANDROID_BUILD_TOP)/$@
$(hide) $(PRIVATE_CMSDK_API_COVERAGE_EXE) -d $(PRIVATE_DEXDEPS_EXE) -a $(PRIVATE_API_XML_DESC) -f $(3) -o $@ $(2) -cm
@ echo $(1): file://$@
endef
# Reset temp vars

View File

@ -0,0 +1,913 @@
#!/bin/bash
#
# Copyright (C) 2016 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.
#
PRODUCT_COPY_FILES_LIST=()
PRODUCT_COPY_FILES_HASHES=()
PRODUCT_PACKAGES_LIST=()
PRODUCT_PACKAGES_HASHES=()
PACKAGE_LIST=()
VENDOR_STATE=-1
VENDOR_RADIO_STATE=-1
COMMON=-1
ARCHES=
FULLY_DEODEXED=-1
TMPDIR="/tmp/extractfiles.$$"
mkdir "$TMPDIR"
#
# cleanup
#
# kill our tmpfiles with fire on exit
#
function cleanup() {
rm -rf "${TMPDIR:?}"
}
trap cleanup EXIT INT TERM ERR
#
# setup_vendor
#
# $1: device name
# $2: vendor name
# $3: CM root directory
# $4: is common device - optional, default to false
# $5: cleanup - optional, default to true
#
# Must be called before any other functions can be used. This
# sets up the internal state for a new vendor configuration.
#
function setup_vendor() {
local DEVICE="$1"
if [ -z "$DEVICE" ]; then
echo "\$DEVICE must be set before including this script!"
exit 1
fi
export VENDOR="$2"
if [ -z "$VENDOR" ]; then
echo "\$VENDOR must be set before including this script!"
exit 1
fi
export CM_ROOT="$3"
if [ ! -d "$CM_ROOT" ]; then
echo "\$CM_ROOT must be set and valid before including this script!"
exit 1
fi
export OUTDIR=vendor/"$VENDOR"/"$DEVICE"
if [ ! -d "$CM_ROOT/$OUTDIR" ]; then
mkdir -p "$CM_ROOT/$OUTDIR"
fi
export PRODUCTMK="$CM_ROOT"/"$OUTDIR"/"$DEVICE"-vendor.mk
export ANDROIDMK="$CM_ROOT"/"$OUTDIR"/Android.mk
export BOARDMK="$CM_ROOT"/"$OUTDIR"/BoardConfigVendor.mk
if [ "$4" == "true" ] || [ "$4" == "1" ]; then
COMMON=1
else
COMMON=0
fi
if [ "$5" == "true" ] || [ "$5" == "1" ]; then
VENDOR_STATE=1
VENDOR_RADIO_STATE=1
else
VENDOR_STATE=0
VENDOR_RADIO_STATE=0
fi
}
#
# target_file:
#
# $1: colon delimited list
#
# Returns destination filename without args
#
function target_file() {
local LINE="$1"
local SPLIT=(${LINE//:/ })
local COUNT=${#SPLIT[@]}
if [ "$COUNT" -gt "1" ]; then
if [[ "${SPLIT[1]}" =~ .*/.* ]]; then
printf '%s\n' "${SPLIT[1]}"
return 0
fi
fi
printf '%s\n' "${SPLIT[0]}"
}
#
# target_args:
#
# $1: colon delimited list
#
# Returns optional arguments (last value) for given target
#
function target_args() {
local LINE="$1"
local SPLIT=(${LINE//:/ })
local COUNT=${#SPLIT[@]}
if [ "$COUNT" -gt "1" ]; then
if [[ ! "${SPLIT[$COUNT-1]}" =~ .*/.* ]]; then
printf '%s\n' "${SPLIT[$COUNT-1]}"
fi
fi
}
#
# prefix_match:
#
# $1: the prefix to match on
#
# Internal function which loops thru the packages list and returns a new
# list containing the matched files with the prefix stripped away.
#
function prefix_match() {
local PREFIX="$1"
for FILE in "${PRODUCT_PACKAGES_LIST[@]}"; do
if [[ "$FILE" =~ ^"$PREFIX" ]]; then
printf '%s\n' "${FILE#$PREFIX}"
fi
done
}
#
# write_product_copy_files:
#
# Creates the PRODUCT_COPY_FILES section in the product makefile for all
# items in the list which do not start with a dash (-).
#
function write_product_copy_files() {
local COUNT=${#PRODUCT_COPY_FILES_LIST[@]}
local TARGET=
local FILE=
local LINEEND=
if [ "$COUNT" -eq "0" ]; then
return 0
fi
printf '%s\n' "PRODUCT_COPY_FILES += \\" >> "$PRODUCTMK"
for (( i=1; i<COUNT+1; i++ )); do
FILE="${PRODUCT_COPY_FILES_LIST[$i-1]}"
LINEEND=" \\"
if [ "$i" -eq "$COUNT" ]; then
LINEEND=""
fi
TARGET=$(target_file "$FILE")
printf ' %s/proprietary/%s:system/%s%s\n' \
"$OUTDIR" "$TARGET" "$TARGET" "$LINEEND" >> "$PRODUCTMK"
done
return 0
}
#
# write_packages:
#
# $1: The LOCAL_MODULE_CLASS for the given module list
# $2: "true" if this package is part of the vendor/ path
# $3: type-specific extra flags
# $4: Name of the array holding the target list
#
# Internal function which writes out the BUILD_PREBUILT stanzas
# for all modules in the list. This is called by write_product_packages
# after the modules are categorized.
#
function write_packages() {
local CLASS="$1"
local VENDOR_PKG="$2"
local EXTRA="$3"
# Yes, this is a horrible hack - we create a new array using indirection
local ARR_NAME="$4[@]"
local FILELIST=("${!ARR_NAME}")
local FILE=
local ARGS=
local BASENAME=
local EXTENSION=
local PKGNAME=
local SRC=
for P in "${FILELIST[@]}"; do
FILE=$(target_file "$P")
ARGS=$(target_args "$P")
BASENAME=$(basename "$FILE")
EXTENSION=${BASENAME##*.}
PKGNAME=${BASENAME%.*}
# Add to final package list
PACKAGE_LIST+=("$PKGNAME")
SRC="proprietary"
if [ "$VENDOR_PKG" = "true" ]; then
SRC+="/vendor"
fi
printf 'include $(CLEAR_VARS)\n'
printf 'LOCAL_MODULE := %s\n' "$PKGNAME"
printf 'LOCAL_MODULE_OWNER := %s\n' "$VENDOR"
if [ "$CLASS" = "SHARED_LIBRARIES" ]; then
if [ "$EXTRA" = "both" ]; then
printf 'LOCAL_SRC_FILES_64 := %s/lib64/%s\n' "$SRC" "$FILE"
printf 'LOCAL_SRC_FILES_32 := %s/lib/%s\n' "$SRC" "$FILE"
#if [ "$VENDOR_PKG" = "true" ]; then
# echo "LOCAL_MODULE_PATH_64 := \$(TARGET_OUT_VENDOR_SHARED_LIBRARIES)"
# echo "LOCAL_MODULE_PATH_32 := \$(2ND_TARGET_OUT_VENDOR_SHARED_LIBRARIES)"
#else
# echo "LOCAL_MODULE_PATH_64 := \$(TARGET_OUT_SHARED_LIBRARIES)"
# echo "LOCAL_MODULE_PATH_32 := \$(2ND_TARGET_OUT_SHARED_LIBRARIES)"
#fi
elif [ "$EXTRA" = "64" ]; then
printf 'LOCAL_SRC_FILES := %s/lib64/%s\n' "$SRC" "$FILE"
else
printf 'LOCAL_SRC_FILES := %s/lib/%s\n' "$SRC" "$FILE"
fi
if [ "$EXTRA" != "none" ]; then
printf 'LOCAL_MULTILIB := %s\n' "$EXTRA"
fi
elif [ "$CLASS" = "APPS" ]; then
if [ -z "$ARGS" ]; then
if [ "$EXTRA" = "priv-app" ]; then
SRC="$SRC/priv-app"
else
SRC="$SRC/app"
fi
fi
printf 'LOCAL_SRC_FILES := %s/%s\n' "$SRC" "$FILE"
local CERT=platform
if [ ! -z "$ARGS" ]; then
CERT="$ARGS"
fi
printf 'LOCAL_CERTIFICATE := %s\n' "$CERT"
elif [ "$CLASS" = "JAVA_LIBRARIES" ]; then
printf 'LOCAL_SRC_FILES := %s/framework/%s\n' "$SRC" "$FILE"
local CERT=platform
if [ ! -z "$ARGS" ]; then
CERT="$ARGS"
fi
printf 'LOCAL_CERTIFICATE := %s\n' "$CERT"
elif [ "$CLASS" = "ETC" ]; then
printf 'LOCAL_SRC_FILES := %s/etc/%s\n' "$SRC" "$FILE"
elif [ "$CLASS" = "EXECUTABLES" ]; then
if [ "$ARGS" = "rootfs" ]; then
SRC="$SRC/rootfs"
if [ "$EXTRA" = "sbin" ]; then
SRC="$SRC/sbin"
printf '%s\n' "LOCAL_MODULE_PATH := \$(TARGET_ROOT_OUT_SBIN)"
printf '%s\n' "LOCAL_UNSTRIPPED_PATH := \$(TARGET_ROOT_OUT_SBIN_UNSTRIPPED)"
fi
else
SRC="$SRC/bin"
fi
printf 'LOCAL_SRC_FILES := %s/%s\n' "$SRC" "$FILE"
unset EXTENSION
else
printf 'LOCAL_SRC_FILES := %s/%s\n' "$SRC" "$FILE"
fi
printf 'LOCAL_MODULE_TAGS := optional\n'
printf 'LOCAL_MODULE_CLASS := %s\n' "$CLASS"
if [ ! -z "$EXTENSION" ]; then
printf 'LOCAL_MODULE_SUFFIX := .%s\n' "$EXTENSION"
fi
if [ "$EXTRA" = "priv-app" ]; then
printf 'LOCAL_PRIVILEGED_MODULE := true\n'
fi
if [ "$VENDOR_PKG" = "true" ]; then
printf 'LOCAL_PROPRIETARY_MODULE := true\n'
fi
printf 'include $(BUILD_PREBUILT)\n\n'
done
}
#
# write_product_packages:
#
# This function will create BUILD_PREBUILT entries in the
# Android.mk and associated PRODUCT_PACKAGES list in the
# product makefile for all files in the blob list which
# start with a single dash (-) character.
#
function write_product_packages() {
PACKAGE_LIST=()
local COUNT=${#PRODUCT_PACKAGES_LIST[@]}
if [ "$COUNT" = "0" ]; then
return 0
fi
# Figure out what's 32-bit, what's 64-bit, and what's multilib
# I really should not be doing this in bash due to shitty array passing :(
local T_LIB32=( $(prefix_match "lib/") )
local T_LIB64=( $(prefix_match "lib64/") )
local MULTILIBS=( $(comm -12 <(printf '%s\n' "${T_LIB32[@]}") <(printf '%s\n' "${T_LIB64[@]}")) )
local LIB32=( $(comm -23 <(printf '%s\n' "${T_LIB32[@]}") <(printf '%s\n' "${MULTILIBS[@]}")) )
local LIB64=( $(comm -23 <(printf '%s\n' "${T_LIB64[@]}") <(printf '%s\n' "${MULTILIBS[@]}")) )
if [ "${#MULTILIBS[@]}" -gt "0" ]; then
write_packages "SHARED_LIBRARIES" "false" "both" "MULTILIBS" >> "$ANDROIDMK"
fi
if [ "${#LIB32[@]}" -gt "0" ]; then
write_packages "SHARED_LIBRARIES" "false" "32" "LIB32" >> "$ANDROIDMK"
fi
if [ "${#LIB64[@]}" -gt "0" ]; then
write_packages "SHARED_LIBRARIES" "false" "64" "LIB64" >> "$ANDROIDMK"
fi
local T_V_LIB32=( $(prefix_match "vendor/lib/") )
local T_V_LIB64=( $(prefix_match "vendor/lib64/") )
local V_MULTILIBS=( $(comm -12 <(printf '%s\n' "${T_V_LIB32[@]}") <(printf '%s\n' "${T_V_LIB64[@]}")) )
local V_LIB32=( $(comm -23 <(printf '%s\n' "${T_V_LIB32[@]}") <(printf '%s\n' "${V_MULTILIBS[@]}")) )
local V_LIB64=( $(comm -23 <(printf '%s\n' "${T_V_LIB64[@]}") <(printf '%s\n' "${V_MULTILIBS[@]}")) )
if [ "${#V_MULTILIBS[@]}" -gt "0" ]; then
write_packages "SHARED_LIBRARIES" "true" "both" "V_MULTILIBS" >> "$ANDROIDMK"
fi
if [ "${#V_LIB32[@]}" -gt "0" ]; then
write_packages "SHARED_LIBRARIES" "true" "32" "V_LIB32" >> "$ANDROIDMK"
fi
if [ "${#V_LIB64[@]}" -gt "0" ]; then
write_packages "SHARED_LIBRARIES" "true" "64" "V_LIB64" >> "$ANDROIDMK"
fi
# Apps
local APPS=( $(prefix_match "app/") )
if [ "${#APPS[@]}" -gt "0" ]; then
write_packages "APPS" "false" "" "APPS" >> "$ANDROIDMK"
fi
local PRIV_APPS=( $(prefix_match "priv-app/") )
if [ "${#PRIV_APPS[@]}" -gt "0" ]; then
write_packages "APPS" "false" "priv-app" "PRIV_APPS" >> "$ANDROIDMK"
fi
local V_APPS=( $(prefix_match "vendor/app/") )
if [ "${#V_APPS[@]}" -gt "0" ]; then
write_packages "APPS" "true" "" "V_APPS" >> "$ANDROIDMK"
fi
local V_PRIV_APPS=( $(prefix_match "vendor/priv-app/") )
if [ "${#V_PRIV_APPS[@]}" -gt "0" ]; then
write_packages "APPS" "true" "priv-app" "V_PRIV_APPS" >> "$ANDROIDMK"
fi
# Framework
local FRAMEWORK=( $(prefix_match "framework/") )
if [ "${#FRAMEWORK[@]}" -gt "0" ]; then
write_packages "JAVA_LIBRARIES" "false" "" "FRAMEWORK" >> "$ANDROIDMK"
fi
# Etc
local ETC=( $(prefix_match "etc/") )
if [ "${#ETC[@]}" -gt "0" ]; then
write_packages "ETC" "false" "" "ETC" >> "$ANDROIDMK"
fi
local V_ETC=( $(prefix_match "vendor/etc/") )
if [ "${#V_ETC[@]}" -gt "0" ]; then
write_packages "ETC" "false" "" "V_ETC" >> "$ANDROIDMK"
fi
# Executables
local BIN=( $(prefix_match "bin/") )
if [ "${#BIN[@]}" -gt "0" ]; then
write_packages "EXECUTABLES" "false" "" "BIN" >> "$ANDROIDMK"
fi
local V_BIN=( $(prefix_match "vendor/bin/") )
if [ "${#V_BIN[@]}" -gt "0" ]; then
write_packages "EXECUTABLES" "true" "" "V_BIN" >> "$ANDROIDMK"
fi
local SBIN=( $(prefix_match "sbin/") )
if [ "${#SBIN[@]}" -gt "0" ]; then
write_packages "EXECUTABLES" "false" "sbin" "SBIN" >> "$ANDROIDMK"
fi
# Actually write out the final PRODUCT_PACKAGES list
local PACKAGE_COUNT=${#PACKAGE_LIST[@]}
if [ "$PACKAGE_COUNT" -eq "0" ]; then
return 0
fi
printf '\n%s\n' "PRODUCT_PACKAGES += \\" >> "$PRODUCTMK"
for (( i=1; i<PACKAGE_COUNT+1; i++ )); do
local LINEEND=" \\"
if [ "$i" -eq "$PACKAGE_COUNT" ]; then
LINEEND=""
fi
printf ' %s%s\n' "${PACKAGE_LIST[$i-1]}" "$LINEEND" >> "$PRODUCTMK"
done
}
#
# write_header:
#
# $1: file which will be written to
#
# writes out the copyright header with the current year.
# note that this is not an append operation, and should
# be executed first!
#
function write_header() {
YEAR=$(date +"%Y")
[ "$COMMON" -eq 1 ] && local DEVICE="$DEVICE_COMMON"
cat << EOF > $1
# Copyright (C) $YEAR 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.
# This file is generated by device/$VENDOR/$DEVICE/setup-makefiles.sh
EOF
}
#
# write_headers:
#
# $1: devices falling under common to be added to guard - optional
#
# Calls write_header for each of the makefiles and creates
# the initial path declaration and device guard for the
# Android.mk
#
function write_headers() {
write_header "$ANDROIDMK"
cat << EOF >> "$ANDROIDMK"
LOCAL_PATH := \$(call my-dir)
EOF
if [ "$COMMON" -ne 1 ]; then
cat << EOF >> "$ANDROIDMK"
ifeq (\$(TARGET_DEVICE),$DEVICE)
EOF
else
if [ -z "$1" ]; then
echo "Argument with devices to be added to guard must be set!"
exit 1
fi
cat << EOF >> "$ANDROIDMK"
ifneq (\$(filter $1,\$(TARGET_DEVICE)),)
EOF
fi
write_header "$BOARDMK"
write_header "$PRODUCTMK"
}
#
# write_footers:
#
# Closes the inital guard and any other finalization tasks. Must
# be called as the final step.
#
function write_footers() {
cat << EOF >> "$ANDROIDMK"
endif
EOF
}
# Return success if adb is up and not in recovery
function _adb_connected {
{
if [[ "$(adb get-state)" == device &&
"$(adb shell test -e /sbin/recovery; echo $?)" == 0 ]]
then
return 0
fi
} 2>/dev/null
return 1
};
#
# parse_file_list:
#
# $1: input file
#
# Sets PRODUCT_PACKAGES and PRODUCT_COPY_FILES while parsing the input file
#
function parse_file_list() {
if [ -z "$1" ]; then
echo "An input file is expected!"
exit 1
elif [ ! -f "$1" ]; then
echo "Input file "$1" does not exist!"
exit 1
fi
PRODUCT_PACKAGES_LIST=()
PRODUCT_PACKAGES_HASHES=()
PRODUCT_COPY_FILES_LIST=()
PRODUCT_COPY_FILES_HASHES=()
while read -r line; do
if [ -z "$line" ]; then continue; fi
# If the line has a pipe delimiter, a sha1 hash should follow.
# This indicates the file should be pinned and not overwritten
# when extracting files.
local SPLIT=(${line//\|/ })
local COUNT=${#SPLIT[@]}
local SPEC=${SPLIT[0]}
local HASH="x"
if [ "$COUNT" -gt "1" ]; then
HASH=${SPLIT[1]}
fi
# if line starts with a dash, it needs to be packaged
if [[ "$SPEC" =~ ^- ]]; then
PRODUCT_PACKAGES_LIST+=("${SPEC#-}")
PRODUCT_PACKAGES_HASHES+=("$HASH")
else
PRODUCT_COPY_FILES_LIST+=("$SPEC")
PRODUCT_COPY_FILES_HASHES+=("$HASH")
fi
done < <(egrep -v '(^#|^[[:space:]]*$)' "$1" | sort | uniq)
}
#
# write_makefiles:
#
# $1: file containing the list of items to extract
#
# Calls write_product_copy_files and write_product_packages on
# the given file and appends to the Android.mk as well as
# the product makefile.
#
function write_makefiles() {
parse_file_list "$1"
write_product_copy_files
write_product_packages
}
#
# append_firmware_calls_to_makefiles:
#
# Appends to Android.mk the calls to all images present in radio folder
# (filesmap file used by releasetools to map firmware images should be kept in the device tree)
#
function append_firmware_calls_to_makefiles() {
cat << EOF >> "$ANDROIDMK"
ifeq (\$(LOCAL_PATH)/radio, \$(wildcard \$(LOCAL_PATH)/radio))
RADIO_FILES := \$(wildcard \$(LOCAL_PATH)/radio/*)
\$(foreach f, \$(notdir \$(RADIO_FILES)), \\
\$(call add-radio-file,radio/\$(f)))
\$(call add-radio-file,../../../device/$VENDOR/$DEVICE/radio/filesmap)
endif
EOF
}
#
# get_file:
#
# $1: input file
# $2: target file/folder
# $3: source of the file (can be "adb" or a local folder)
#
# Silently extracts the input file to defined target
# Returns success if file can be pulled from the device or found locally
#
function get_file() {
local SRC="$3"
if [ "$SRC" = "adb" ]; then
# try to pull
adb pull "$1" "$2" >/dev/null 2>&1 && return 0
return 1
else
# try to copy
cp "$SRC/$1" "$2" 2>/dev/null && return 0
return 1
fi
};
#
# oat2dex:
#
# $1: extracted apk|jar (to check if deodex is required)
# $2: odexed apk|jar to deodex
# $3: source of the odexed apk|jar
#
# Convert apk|jar .odex in the corresposing classes.dex
#
function oat2dex() {
local CM_TARGET="$1"
local OEM_TARGET="$2"
local SRC="$3"
local TARGET=
local OAT=
if [ -z "$BAKSMALIJAR" ] || [ -z "$SMALIJAR" ]; then
export BAKSMALIJAR="$CM_ROOT"/vendor/cm/build/tools/smali/baksmali.jar
export SMALIJAR="$CM_ROOT"/vendor/cm/build/tools/smali/smali.jar
fi
# Extract existing boot.oats to the temp folder
if [ -z "$ARCHES" ]; then
echo "Checking if system is odexed and extracting boot.oats, if applicable. This may take a while..."
for ARCH in "arm64" "arm" "x86_64" "x86"; do
if get_file "system/framework/$ARCH/boot.oat" "$TMPDIR/boot_$ARCH.oat" "$SRC"; then
ARCHES+="$ARCH "
fi
done
fi
if [ -z "$ARCHES" ]; then
FULLY_DEODEXED=1 && return 0 # system is fully deodexed, return
fi
if [ ! -f "$CM_TARGET" ]; then
return;
fi
if grep "classes.dex" "$CM_TARGET" >/dev/null; then
return 0 # target apk|jar is already odexed, return
fi
for ARCH in $ARCHES; do
BOOTOAT="$TMPDIR/boot_$ARCH.oat"
local OAT="$(dirname "$OEM_TARGET")/oat/$ARCH/$(basename "$OEM_TARGET" ."${OEM_TARGET##*.}").odex"
if get_file "$OAT" "$TMPDIR" "$SRC"; then
java -jar "$BAKSMALIJAR" -x -o "$TMPDIR/dexout" -c "$BOOTOAT" -d "$TMPDIR" "$TMPDIR/$(basename "$OAT")"
elif [[ "$CM_TARGET" =~ .jar$ ]]; then
# try to extract classes.dex from boot.oat for framework jars
java -jar "$BAKSMALIJAR" -x -o "$TMPDIR/dexout" -c "$BOOTOAT" -d "$TMPDIR" -e "/$OEM_TARGET" "$BOOTOAT"
else
continue
fi
java -jar "$SMALIJAR" "$TMPDIR/dexout" -o "$TMPDIR/classes.dex" && break
done
rm -rf "$TMPDIR/dexout"
}
#
# init_adb_connection:
#
# Starts adb server and waits for the device
#
function init_adb_connection() {
adb start-server # Prevent unexpected starting server message from adb get-state in the next line
if ! _adb_connected; then
echo "No device is online. Waiting for one..."
echo "Please connect USB and/or enable USB debugging"
until _adb_connected; do
sleep 1
done
echo "Device Found."
fi
# Retrieve IP and PORT info if we're using a TCP connection
TCPIPPORT=$(adb devices | egrep '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+[^0-9]+' \
| head -1 | awk '{print $1}')
adb root &> /dev/null
sleep 0.3
if [ -n "$TCPIPPORT" ]; then
# adb root just killed our connection
# so reconnect...
adb connect "$TCPIPPORT"
fi
adb wait-for-device &> /dev/null
sleep 0.3
}
#
# fix_xml:
#
# $1: xml file to fix
#
function fix_xml() {
local XML="$1"
local TEMP_XML="$TMPDIR/`basename "$XML"`.temp"
grep '^<?xml version' "$XML" > "$TEMP_XML"
grep -v '^<?xml version' "$XML" >> "$TEMP_XML"
mv "$TEMP_XML" "$XML"
}
#
# extract:
#
# $1: file containing the list of items to extract
# $2: path to extracted system folder, or "adb" to extract from device
#
function extract() {
if [ -z "$OUTDIR" ]; then
echo "Output dir not set!"
exit 1
fi
parse_file_list "$1"
# Allow failing, so we can try $DEST and/or $FILE
set +e
local FILELIST=( ${PRODUCT_COPY_FILES_LIST[@]} ${PRODUCT_PACKAGES_LIST[@]} )
local HASHLIST=( ${PRODUCT_COPY_FILES_HASHES[@]} ${PRODUCT_PACKAGES_HASHES[@]} )
local COUNT=${#FILELIST[@]}
local SRC="$2"
local OUTPUT_ROOT="$CM_ROOT"/"$OUTDIR"/proprietary
local OUTPUT_TMP="$TMPDIR"/"$OUTDIR"/proprietary
if [ "$SRC" = "adb" ]; then
init_adb_connection
fi
if [ "$VENDOR_STATE" -eq "0" ]; then
echo "Cleaning output directory ($OUTPUT_ROOT).."
rm -rf "${OUTPUT_TMP:?}"
mkdir -p "${OUTPUT_TMP:?}"
mv "${OUTPUT_ROOT:?}/"* "${OUTPUT_TMP:?}/"
VENDOR_STATE=1
fi
echo "Extracting $COUNT files in $1 from $SRC:"
for (( i=1; i<COUNT+1; i++ )); do
local FROM=$(target_file "${FILELIST[$i-1]}")
local ARGS=$(target_args "${FILELIST[$i-1]}")
local SPLIT=(${FILELIST[$i-1]//:/ })
local FILE="${SPLIT[0]#-}"
local OUTPUT_DIR="$OUTPUT_ROOT"
local TMP_DIR="$OUTPUT_TMP"
local TARGET=
if [ "$ARGS" = "rootfs" ]; then
TARGET="$FROM"
OUTPUT_DIR="$OUTPUT_DIR/rootfs"
TMP_DIR="$TMP_DIR/rootfs"
else
TARGET="system/$FROM"
FILE="system/$FILE"
fi
if [ "$SRC" = "adb" ]; then
printf ' - %s .. ' "/$TARGET"
else
printf ' - %s \n' "/$TARGET"
fi
local DIR=$(dirname "$FROM")
if [ ! -d "$OUTPUT_DIR/$DIR" ]; then
mkdir -p "$OUTPUT_DIR/$DIR"
fi
local DEST="$OUTPUT_DIR/$FROM"
if [ "$SRC" = "adb" ]; then
# Try CM target first
adb pull "/$TARGET" "$DEST"
# if file does not exist try OEM target
if [ "$?" != "0" ]; then
adb pull "/$FILE" "$DEST"
fi
else
# Try OEM target first
if [ -f "$SRC/$FILE" ]; then
cp "$SRC/$FILE" "$DEST"
# if file does not exist try CM target
elif [ -f "$SRC/$TARGET" ]; then
cp "$SRC/$TARGET" "$DEST"
else
printf ' !! file not found in source\n'
fi
fi
if [ "$?" == "0" ]; then
# Deodex apk|jar if that's the case
if [[ "$FULLY_DEODEXED" -ne "1" && "$DEST" =~ .(apk|jar)$ ]]; then
oat2dex "$DEST" "$FILE" "$SRC"
if [ -f "$TMPDIR/classes.dex" ]; then
zip -gjq "$DEST" "$TMPDIR/classes.dex"
rm "$TMPDIR/classes.dex"
printf ' (updated %s from odex files)\n' "/$FILE"
fi
elif [[ "$DEST" =~ .xml$ ]]; then
fix_xml "$DEST"
fi
fi
# Check pinned files
local HASH="${HASHLIST[$i-1]}"
if [ ! -z "$HASH" ] && [ "$HASH" != "x" ]; then
local KEEP=""
local TMP="$TMP_DIR/$FROM"
if [ -f "$TMP" ]; then
if [ ! -f "$DEST" ]; then
KEEP="1"
else
local DEST_HASH=$(sha1sum "$DEST" | awk '{print $1}' )
if [ "$DEST_HASH" != "$HASH" ]; then
KEEP="1"
fi
fi
if [ "$KEEP" = "1" ]; then
local TMP_HASH=$(sha1sum "$TMP" | awk '{print $1}' )
if [ "$TMP_HASH" = "$HASH" ]; then
printf ' + (keeping pinned file with hash %s)\n' "$HASH"
cp -p "$TMP" "$DEST"
fi
fi
fi
fi
if [ -f "$DEST" ]; then
local TYPE="${DIR##*/}"
if [ "$TYPE" = "bin" -o "$TYPE" = "sbin" ]; then
chmod 755 "$DEST"
else
chmod 644 "$DEST"
fi
fi
done
# Don't allow failing
set -e
}
#
# extract_firmware:
#
# $1: file containing the list of items to extract
# $2: path to extracted radio folder
#
function extract_firmware() {
if [ -z "$OUTDIR" ]; then
echo "Output dir not set!"
exit 1
fi
parse_file_list "$1"
# Don't allow failing
set -e
local FILELIST=( ${PRODUCT_COPY_FILES_LIST[@]} )
local COUNT=${#FILELIST[@]}
local SRC="$2"
local OUTPUT_DIR="$CM_ROOT"/"$OUTDIR"/radio
if [ "$VENDOR_RADIO_STATE" -eq "0" ]; then
echo "Cleaning firmware output directory ($OUTPUT_DIR).."
rm -rf "${OUTPUT_DIR:?}/"*
VENDOR_RADIO_STATE=1
fi
echo "Extracting $COUNT files in $1 from $SRC:"
for (( i=1; i<COUNT+1; i++ )); do
local FILE="${FILELIST[$i-1]}"
printf ' - %s \n' "/radio/$FILE"
if [ ! -d "$OUTPUT_DIR" ]; then
mkdir -p "$OUTPUT_DIR"
fi
cp "$SRC/$FILE" "$OUTPUT_DIR/$FILE"
chmod 644 "$OUTPUT_DIR/$FILE"
done
}

105
build/tools/smali/NOTICE Normal file
View File

@ -0,0 +1,105 @@
The majority of smali/baksmali is written and copyrighted by me (Ben Gruver)
and released under the following license:
*******************************************************************************
Copyright (c) 2010 Ben Gruver (JesusFreke)
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the author may not be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************
Unless otherwise stated in the code/commit message, any changes with the
committer of bgruv@google.com is copyrighted by Google Inc. and released
under the following license:
*******************************************************************************
Copyright 2011, Google Inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************
Various portions of the code are taken from the Android Open Source Project,
and are used in accordance with the following license:
*******************************************************************************
Copyright (C) 2007 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.
*******************************************************************************
Some parts of the smalidea plugin are based on code from the IDEA project, per the
following license
*******************************************************************************
Copyright 2000-2014 JetBrains s.r.o.
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.
*******************************************************************************

Binary file not shown.

BIN
build/tools/smali/smali.jar Normal file

Binary file not shown.

70
charger/Android.mk Normal file
View File

@ -0,0 +1,70 @@
LOCAL_PATH := $(call my-dir)
# Set healthd_density to the density bucket of the device.
healthd_density := unknown
ifneq (,$(TARGET_RECOVERY_DENSITY))
healthd_density := $(filter %dpi,$(TARGET_RECOVERY_DENSITY))
else
ifneq (,$(PRODUCT_AAPT_PREF_CONFIG))
# If PRODUCT_AAPT_PREF_CONFIG includes a dpi bucket, then use that value.
healthd_density := $(filter %dpi,$(PRODUCT_AAPT_PREF_CONFIG))
else
# Otherwise, use the default medium density.
healthd_density := mdpi
endif
endif
include $(CLEAR_VARS)
LOCAL_SRC_FILES := healthd_board_cm.cpp
LOCAL_MODULE := libhealthd.cm
LOCAL_CFLAGS := -Werror
LOCAL_C_INCLUDES := \
system/core/healthd \
bootable/recovery
ifneq ($(BACKLIGHT_PATH),)
LOCAL_CFLAGS += -DHEALTHD_BACKLIGHT_PATH=\"$(BACKLIGHT_PATH)\"
endif
ifneq ($(SECONDARY_BACKLIGHT_PATH),)
LOCAL_CFLAGS += -DHEALTHD_SECONDARY_BACKLIGHT_PATH=\"$(SECONDARY_BACKLIGHT_PATH)\"
endif
ifneq ($(HEALTHD_BACKLIGHT_LEVEL),)
LOCAL_CFLAGS += -DHEALTHD_BACKLIGHT_LEVEL=$(HEALTHD_BACKLIGHT_LEVEL)
endif
include $(BUILD_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := font_log.png
LOCAL_SRC_FILES := fonts/$(healthd_density)/font_log.png
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT)/res/images
include $(BUILD_PREBUILT)
include $(CLEAR_VARS)
define _add-charger-image
include $$(CLEAR_VARS)
LOCAL_MODULE := vendor_cm_charger_$(notdir $(1))
LOCAL_MODULE_STEM := $(notdir $(1))
_img_modules += $$(LOCAL_MODULE)
LOCAL_SRC_FILES := $1
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_CLASS := ETC
LOCAL_MODULE_PATH := $$(TARGET_ROOT_OUT)/res/images/charger
include $$(BUILD_PREBUILT)
endef
_img_modules :=
_images :=
$(foreach _img, $(call find-subdir-subdir-files, "images/$(healthd_density)", "*.png"), \
$(eval $(call _add-charger-image,$(_img))))
include $(CLEAR_VARS)
LOCAL_MODULE := cm_charger_res_images
LOCAL_MODULE_TAGS := optional
LOCAL_REQUIRED_MODULES := $(_img_modules)
LOCAL_OVERRIDES_PACKAGES := charger_res_images
include $(BUILD_PHONY_PACKAGE)
_add-charger-image :=
_img_modules :=

1
charger/fonts/560dpi Symbolic link
View File

@ -0,0 +1 @@
xxhdpi

1
charger/fonts/640dpi Symbolic link
View File

@ -0,0 +1 @@
xxxhdpi

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

View File

@ -0,0 +1,419 @@
/*
* Copyright (C) 2016 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.
*/
#include <errno.h>
#include <fcntl.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include <cutils/android_reboot.h>
#include <cutils/klog.h>
#include <cutils/misc.h>
#include <cutils/uevent.h>
#include <cutils/properties.h>
#include <pthread.h>
#include <linux/android_alarm.h>
#include <sys/timerfd.h>
#include <linux/rtc.h>
#include "healthd.h"
#include "minui/minui.h"
#define LOGE(x...) do { KLOG_ERROR("charger", x); } while (0)
#define LOGW(x...) do { KLOG_WARNING("charger", x); } while (0)
#define LOGI(x...) do { KLOG_INFO("charger", x); } while (0)
#define LOGV(x...) do { KLOG_DEBUG("charger", x); } while (0)
struct frame {
int min_capacity;
GRSurface *surface;
};
struct animation {
struct frame *frames;
int cur_frame;
int num_frames;
};
static struct animation anim = {
.frames = NULL,
.cur_frame = 0,
.num_frames = 0,
};
static bool font_inited;
static int draw_surface_centered(GRSurface* surface)
{
int w, h, x, y;
w = gr_get_width(surface);
h = gr_get_height(surface);
x = (gr_fb_width() - w) / 2 ;
y = (gr_fb_height() - h) / 2 ;
gr_blit(surface, 0, 0, w, h, x, y);
return y + h;
}
#define STR_LEN 64
static void draw_capacity(int capacity)
{
char cap_str[STR_LEN];
snprintf(cap_str, (STR_LEN - 1), "%d%%", capacity);
struct frame *f = &anim.frames[0];
int font_x, font_y;
gr_font_size(&font_x, &font_y);
int w = gr_measure(cap_str);
int h = gr_get_height(f->surface);
int x = (gr_fb_width() - w) / 2;
int y = (gr_fb_height() + h) / 2;
gr_color(255, 255, 255, 255);
gr_text(x, y + font_y / 2, cap_str, 0);
}
#ifdef QCOM_HARDWARE
enum alarm_time_type {
ALARM_TIME,
RTC_TIME,
};
/*
* shouldn't be changed after
* reading from alarm register
*/
static time_t alm_secs;
static int alarm_get_time(enum alarm_time_type time_type,
time_t *secs)
{
struct tm tm;
unsigned int cmd;
int rc, fd = -1;
if (!secs)
return -1;
fd = open("/dev/rtc0", O_RDONLY);
if (fd < 0) {
LOGE("Can't open rtc devfs node\n");
return -1;
}
switch (time_type) {
case ALARM_TIME:
cmd = RTC_ALM_READ;
break;
case RTC_TIME:
cmd = RTC_RD_TIME;
break;
default:
LOGE("Invalid time type\n");
goto err;
}
rc = ioctl(fd, cmd, &tm);
if (rc < 0) {
LOGE("Unable to get time\n");
goto err;
}
*secs = mktime(&tm) + tm.tm_gmtoff;
if (*secs < 0) {
LOGE("Invalid seconds = %ld\n", *secs);
goto err;
}
close(fd);
return 0;
err:
close(fd);
return -1;
}
#define ERR_SECS 2
static int alarm_is_alm_expired()
{
int rc;
time_t rtc_secs;
rc = alarm_get_time(RTC_TIME, &rtc_secs);
if (rc < 0)
return 0;
return (alm_secs >= rtc_secs - ERR_SECS &&
alm_secs <= rtc_secs + ERR_SECS) ? 1 : 0;
}
static int timerfd_set_reboot_time_and_wait(time_t secs)
{
int fd;
int ret = -1;
fd = timerfd_create(CLOCK_REALTIME_ALARM, 0);
if (fd < 0) {
LOGE("Can't open timerfd alarm node\n");
goto err_return;
}
struct itimerspec spec;
memset(&spec, 0, sizeof(spec));
spec.it_value.tv_sec = secs;
if (timerfd_settime(fd, 0 /* relative */, &spec, NULL)) {
LOGE("Can't set timerfd alarm\n");
goto err_close;
}
uint64_t unused;
if (read(fd, &unused, sizeof(unused)) < 0) {
LOGE("Wait alarm error\n");
goto err_close;
}
ret = 0;
err_close:
close(fd);
err_return:
return ret;
}
static int alarm_set_reboot_time_and_wait(time_t secs)
{
int rc, fd;
struct timespec ts;
fd = open("/dev/alarm", O_RDWR);
if (fd < 0) {
LOGE("Can't open alarm devfs node, trying timerfd\n");
return timerfd_set_reboot_time_and_wait(secs);
}
/* get the elapsed realtime from boot time to now */
rc = ioctl(fd, ANDROID_ALARM_GET_TIME(
ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP), &ts);
if (rc < 0) {
LOGE("Unable to get elapsed realtime\n");
goto err;
}
/* calculate the elapsed time from boot time to reboot time */
ts.tv_sec += secs;
ts.tv_nsec = 0;
rc = ioctl(fd, ANDROID_ALARM_SET(
ANDROID_ALARM_ELAPSED_REALTIME_WAKEUP), &ts);
if (rc < 0) {
LOGE("Unable to set reboot time to %ld\n", secs);
goto err;
}
do {
rc = ioctl(fd, ANDROID_ALARM_WAIT);
} while ((rc < 0 && errno == EINTR) || !alarm_is_alm_expired());
if (rc <= 0) {
LOGE("Unable to wait on alarm\n");
goto err;
}
close(fd);
return 0;
err:
if (fd >= 0)
close(fd);
return -1;
}
static void *alarm_thread(void *)
{
time_t rtc_secs, rb_secs;
int rc;
/*
* to support power off alarm, the time
* stored in alarm register at latest
* shutdown time should be some time
* earlier than the actual alarm time
* set by user
*/
rc = alarm_get_time(ALARM_TIME, &alm_secs);
LOGI("RTC Alarm %ld\n", alm_secs);
if (rc < 0 || !alm_secs)
goto err;
rc = alarm_get_time(RTC_TIME, &rtc_secs);
LOGI("RTC Clock %ld\n", rtc_secs);
if (rc < 0)
goto err;
/*
* calculate the reboot time after which
* the phone will reboot
*/
rb_secs = alm_secs - rtc_secs;
if (rb_secs <= 0)
goto err;
rc = alarm_set_reboot_time_and_wait(rb_secs);
if (rc < 0)
goto err;
LOGI("Exit from power off charging, reboot the phone!\n");
android_reboot(ANDROID_RB_RESTART, 0, 0);
err:
LOGE("Exit from alarm thread\n");
return NULL;
}
#endif
void healthd_board_init(struct healthd_config*)
{
pthread_t tid;
char value[PROP_VALUE_MAX];
int rc = 0, scale_count = 0, i;
GRSurface **scale_frames;
rc = res_create_multi_display_surface("charger/cm_battery_scale",
&scale_count, &scale_frames);
if (rc < 0) {
LOGE("%s: Unable to load battery scale image", __func__);
return;
}
anim.frames = new frame[scale_count];
anim.num_frames = scale_count;
for (i = 0; i < anim.num_frames; i++) {
anim.frames[i].surface = scale_frames[i];
anim.frames[i].min_capacity = 100/(scale_count-1) * i;
}
#ifdef QCOM_HARDWARE
property_get("ro.bootmode", value, "");
if (!strcmp("charger", value)) {
rc = pthread_create(&tid, NULL, alarm_thread, NULL);
if (rc < 0)
LOGE("Create alarm thread failed\n");
}
#endif
}
int healthd_board_battery_update(struct android::BatteryProperties*)
{
// return 0 to log periodic polled battery status to kernel log
return 1;
}
void healthd_board_mode_charger_draw_battery(
struct android::BatteryProperties *batt_prop)
{
int start_frame = 0;
int capacity = -1;
if (!font_inited) {
gr_set_font("log");
font_inited = true;
}
if (batt_prop && batt_prop->batteryLevel >= 0) {
capacity = batt_prop->batteryLevel;
}
if (anim.num_frames == 0 || capacity < 0) {
LOGE("%s: Unable to draw battery", __func__);
return;
}
// Find starting frame to display based on current capacity
for (start_frame = 1; start_frame < anim.num_frames; start_frame++) {
if (capacity < anim.frames[start_frame].min_capacity)
break;
}
// Always start from the level just below the current capacity
start_frame--;
if (anim.cur_frame < start_frame)
anim.cur_frame = start_frame;
draw_surface_centered(anim.frames[anim.cur_frame].surface);
draw_capacity(capacity);
// Move to next frame, with max possible frame at max_idx
anim.cur_frame = ((anim.cur_frame + 1) % anim.num_frames);
}
void healthd_board_mode_charger_battery_update(
struct android::BatteryProperties*)
{
}
#ifdef HEALTHD_BACKLIGHT_PATH
#ifndef HEALTHD_BACKLIGHT_LEVEL
#define HEALTHD_BACKLIGHT_LEVEL 100
#endif
void healthd_board_mode_charger_set_backlight(bool on)
{
int fd;
char buffer[10];
memset(buffer, '\0', sizeof(buffer));
fd = open(HEALTHD_BACKLIGHT_PATH, O_RDWR);
if (fd < 0) {
LOGE("Could not open backlight node : %s\n", strerror(errno));
return;
}
LOGV("Enabling backlight\n");
snprintf(buffer, sizeof(buffer), "%d\n", on ? HEALTHD_BACKLIGHT_LEVEL : 0);
if (write(fd, buffer, strlen(buffer)) < 0) {
LOGE("Could not write to backlight : %s\n", strerror(errno));
}
close(fd);
#ifdef HEALTHD_SECONDARY_BACKLIGHT_PATH
fd = open(HEALTHD_SECONDARY_BACKLIGHT_PATH, O_RDWR);
if (fd < 0) {
LOGE("Could not open second backlight node : %s\n", strerror(errno));
return;
}
LOGV("Enabling secondary backlight\n");
if (write(fd, buffer, strlen(buffer)) < 0) {
LOGE("Could not write to second backlight : %s\n", strerror(errno));
return;
}
close(fd);
#endif
}
#else
void healthd_board_mode_charger_set_backlight(bool)
{
}
#endif
void healthd_board_mode_charger_init(void)
{
}

1
charger/images/560dpi Symbolic link
View File

@ -0,0 +1 @@
xxxhdpi

1
charger/images/640dpi Symbolic link
View File

@ -0,0 +1 @@
xxxhdpi

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

4
config/BoardConfigCM.mk Normal file
View File

@ -0,0 +1,4 @@
# Charger
ifneq ($(WITH_CM_CHARGER),false)
BOARD_HAL_STATIC_LIBRARIES := libhealthd.cm
endif

View File

@ -1,7 +1,16 @@
# Permissions for cmsdk services
PRODUCT_COPY_FILES += \
vendor/replicant/config/permissions/org.cyanogenmod.appsuggest.xml:system/etc/permissions/org.cyanogenmod.appsuggest.xml \
vendor/replicant/config/permissions/org.cyanogenmod.audio.xml:system/etc/permissions/org.cyanogenmod.audio.xml \
vendor/replicant/config/permissions/org.cyanogenmod.livedisplay.xml:system/etc/permissions/org.cyanogenmod.livedisplay.xml \
vendor/replicant/config/permissions/org.cyanogenmod.livelockscreen.xml:system/etc/permissions/org.cyanogenmod.livelockscreen.xml \
vendor/replicant/config/permissions/org.cyanogenmod.partner.xml:system/etc/permissions/org.cyanogenmod.partner.xml \
vendor/replicant/config/permissions/org.cyanogenmod.performance.xml:system/etc/permissions/org.cyanogenmod.performance.xml \
vendor/replicant/config/permissions/org.cyanogenmod.profiles.xml:system/etc/permissions/org.cyanogenmod.profiles.xml \
vendor/replicant/config/permissions/org.cyanogenmod.statusbar.xml:system/etc/permissions/org.cyanogenmod.statusbar.xml \
vendor/replicant/config/permissions/org.cyanogenmod.telephony.xml:system/etc/permissions/org.cyanogenmod.telephony.xml \
vendor/replicant/config/permissions/org.cyanogenmod.theme.xml:system/etc/permissions/org.cyanogenmod.theme.xml \
vendor/replicant/config/permissions/org.cyanogenmod.livelockscreen.xml:system/etc/permissions/org.cyanogenmod.livelockscreen.xml
vendor/replicant/config/permissions/org.cyanogenmod.weather.xml:system/etc/permissions/org.cyanogenmod.weather.xml
# CM Platform Library
PRODUCT_PACKAGES += \
@ -14,6 +23,10 @@ PRODUCT_PACKAGES += \
org.cyanogenmod.hardware \
org.cyanogenmod.hardware.xml
# JNI Libraries
PRODUCT_PACKAGES += \
libcmsdk_platform_jni
ifndef CM_PLATFORM_SDK_VERSION
# This is the canonical definition of the SDK version, which defines
# the set of APIs and functionality available in the platform. It
@ -21,7 +34,7 @@ ifndef CM_PLATFORM_SDK_VERSION
# the SDK are released. It should only be incremented when the APIs for
# the new release are frozen (so that developers don't write apps against
# intermediate builds).
CM_PLATFORM_SDK_VERSION := 5
CM_PLATFORM_SDK_VERSION := 6
endif
ifndef CM_PLATFORM_REV

View File

@ -33,14 +33,6 @@ PRODUCT_BOOTANIMATION := vendor/replicant/prebuilt/common/bootanimation/$(TARGET
endif
endif
ifdef CM_NIGHTLY
PRODUCT_PROPERTY_OVERRIDES += \
ro.rommanager.developerid=cyanogenmodnightly
else
PRODUCT_PROPERTY_OVERRIDES += \
ro.rommanager.developerid=cyanogenmod
endif
PRODUCT_BUILD_PROP_OVERRIDES += BUILD_UTC_DATE=0
ifeq ($(PRODUCT_GMS_CLIENTID_BASE),)
@ -63,6 +55,11 @@ PRODUCT_PROPERTY_OVERRIDES += \
PRODUCT_PROPERTY_OVERRIDES += \
ro.build.selinux=1
# Default notification/alarm sounds
PRODUCT_PROPERTY_OVERRIDES += \
ro.config.notification_sound=Argon.ogg \
ro.config.alarm_alert=Helium.ogg
ifneq ($(TARGET_BUILD_VARIANT),user)
# Thank you, please drive thru!
PRODUCT_PROPERTY_OVERRIDES += persist.sys.dun.override=0
@ -78,13 +75,15 @@ PRODUCT_COPY_FILES += \
vendor/replicant/CHANGELOG.mkdn:system/etc/CHANGELOG-CM.txt
# Backup Tool
ifneq ($(WITH_GMS),true)
PRODUCT_COPY_FILES += \
vendor/replicant/prebuilt/common/bin/backuptool.sh:install/bin/backuptool.sh \
vendor/replicant/prebuilt/common/bin/backuptool.functions:install/bin/backuptool.functions \
vendor/replicant/prebuilt/common/bin/50-cm.sh:system/addon.d/50-cm.sh \
vendor/replicant/prebuilt/common/bin/blacklist:system/addon.d/blacklist
endif
# Backup Services whitelist
PRODUCT_COPY_FILES += \
vendor/cm/config/permissions/backup.xml:system/etc/sysconfig/backup.xml
# Signature compatibility validation
PRODUCT_COPY_FILES += \
@ -125,6 +124,9 @@ PRODUCT_COPY_FILES += \
PRODUCT_COPY_FILES += \
vendor/replicant/config/permissions/com.cyanogenmod.android.xml:system/etc/permissions/com.cyanogenmod.android.xml
# Include CM audio files
include vendor/cm/config/cm_audio.mk
# Theme engine
include vendor/replicant/config/themes_common.mk
@ -133,14 +135,18 @@ include vendor/replicant/config/cmsdk_common.mk
# Required CM packages
PRODUCT_PACKAGES += \
CMAudioService \
Development \
BluetoothExt \
Profiles
Profiles \
ThemeManagerService \
WeatherManagerService
# Optional CM packages
PRODUCT_PACKAGES += \
libemoji \
Terminal
Terminal \
LiveWallpapersPicker
# Include librsjni explicitly to workaround GMS issue
PRODUCT_PACKAGES += \
@ -156,7 +162,13 @@ PRODUCT_PACKAGES += \
Eleven \
LockClock \
CMSettingsProvider \
ExactCalculator
ExactCalculator \
LiveLockScreenService \
WeatherProvider \
DataUsageProvider \
WallpaperPicker \
SoundRecorder \
Screencast
# Exchange support
PRODUCT_PACKAGES += \
@ -177,8 +189,29 @@ PRODUCT_PACKAGES += \
oprofiled \
sqlite3 \
strace \
pigz
pigz \
7z \
lib7z \
bash \
bzip2 \
curl \
powertop \
unrar \
unzip \
vim \
wget \
zip
# Custom off-mode charger
ifneq ($(WITH_CM_CHARGER),false)
PRODUCT_PACKAGES += \
charger_res_images \
cm_charger_res_images \
font_log.png \
libhealthd.cm
endif
# ExFAT support
WITH_EXFAT ?= true
ifeq ($(WITH_EXFAT),true)
TARGET_USES_EXFAT := true
@ -266,7 +299,11 @@ ifneq ($(PRODUCT_DEFAULT_DEV_CERTIFICATE),build/target/product/security/testkey)
else
TARGET_VENDOR_RELEASE_BUILD_ID := $(TARGET_VENDOR_RELEASE_BUILD_ID)
endif
CM_DISPLAY_VERSION=$(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR)-$(TARGET_VENDOR_RELEASE_BUILD_ID)
ifeq ($(CM_VERSION_MAINTENANCE),0)
CM_DISPLAY_VERSION := $(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR)-$(TARGET_VENDOR_RELEASE_BUILD_ID)-$(CM_BUILD)
else
CM_DISPLAY_VERSION := $(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR).$(CM_VERSION_MAINTENANCE)-$(TARGET_VENDOR_RELEASE_BUILD_ID)-$(CM_BUILD)
endif
endif
endif
endif

View File

@ -1,15 +1,13 @@
# Inherit common CM stuff
$(call inherit-product, vendor/replicant/config/common.mk)
# Include CM audio files
include vendor/replicant/config/cm_audio.mk
PRODUCT_SIZE := full
ifeq ($(USE_OPENGL_RENDERER),true)
PRODUCT_PACKAGES += \
Galaxy4 \
HoloSpiralWallpaper \
LiveWallpapers \
LiveWallpapersPicker \
MagicSmokeWallpapers
endif
@ -17,20 +15,8 @@ PRODUCT_PACKAGES += \
NoiseField \
PhaseBeam \
PhotoTable \
SoundRecorder \
PhotoPhase \
Screencast
PhotoPhase
# Extra tools in CM
# Themes
PRODUCT_PACKAGES += \
7z \
lib7z \
bash \
bzip2 \
curl \
powertop \
unrar \
unzip \
vim \
wget \
zip
HexoLibre

View File

@ -8,11 +8,6 @@ PRODUCT_PACKAGES += \
# Include CM LatinIME dictionaries
PRODUCT_PACKAGE_OVERLAYS += vendor/replicant/overlay/dictionaries
# Default notification/alarm sounds
PRODUCT_PROPERTY_OVERRIDES += \
ro.config.notification_sound=Argon.ogg \
ro.config.alarm_alert=Helium.ogg
ifeq ($(TARGET_SCREEN_WIDTH) $(TARGET_SCREEN_HEIGHT),$(space))
PRODUCT_COPY_FILES += \
vendor/replicant/prebuilt/common/bootanimation/vertical-480x800.zip:system/media/bootanimation.zip

View File

@ -8,12 +8,7 @@ PRODUCT_PACKAGES += \
# Include CM LatinIME dictionaries
PRODUCT_PACKAGE_OVERLAYS += vendor/cm/overlay/dictionaries
# Default notification/alarm sounds
PRODUCT_PROPERTY_OVERRIDES += \
ro.config.notification_sound=Argon.ogg \
ro.config.alarm_alert=Helium.ogg
ifeq ($(TARGET_BOOTANIMATION_NAME),)
ifeq ($(TARGET_SCREEN_WIDTH) $(TARGET_SCREEN_HEIGHT),$(space))
PRODUCT_COPY_FILES += \
vendor/replicant/prebuilt/common/bootanimation/horizontal-1280x800.zip:system/media/bootanimation.zip
endif

View File

@ -1,11 +1,6 @@
# Inherit common CM stuff
$(call inherit-product, vendor/cm/config/common_full.mk)
# Default notification/alarm sounds
PRODUCT_PROPERTY_OVERRIDES += \
ro.config.notification_sound=Argon.ogg \
ro.config.alarm_alert=Helium.ogg
ifeq ($(TARGET_SCREEN_WIDTH) $(TARGET_SCREEN_HEIGHT),$(space))
PRODUCT_COPY_FILES += \
vendor/cm/prebuilt/common/bootanimation/800.zip:system/media/bootanimation.zip

4
config/common_mini.mk Normal file
View File

@ -0,0 +1,4 @@
# Inherit common CM stuff
$(call inherit-product, vendor/cm/config/common.mk)
PRODUCT_SIZE := mini

View File

@ -1,19 +1,10 @@
# Inherit common CM stuff
$(call inherit-product, vendor/replicant/config/common.mk)
# Include CM audio files
include vendor/replicant/config/cm_audio.mk
$(call inherit-product, vendor/replicant/config/common_mini.mk)
# Required CM packages
PRODUCT_PACKAGES += \
LatinIME
# Default notification/alarm sounds
PRODUCT_PROPERTY_OVERRIDES += \
ro.config.notification_sound=Argon.ogg \
ro.config.alarm_alert=Helium.ogg
ifeq ($(TARGET_BOOTANIMATION_NAME),)
ifeq ($(TARGET_SCREEN_WIDTH) $(TARGET_SCREEN_HEIGHT),$(space))
PRODUCT_COPY_FILES += \
vendor/replicant/prebuilt/common/bootanimation/vertical-320x480.zip:system/media/bootanimation.zip
endif

View File

@ -1,19 +1,11 @@
# Inherit common CM stuff
$(call inherit-product, vendor/replicant/config/common.mk)
# Include CM audio files
include vendor/replicant/config/cm_audio.mk
$(call inherit-product, vendor/replicant/config/common_mini.mk)
# Required CM packages
PRODUCT_PACKAGES += \
LatinIME
# Default notification/alarm sounds
PRODUCT_PROPERTY_OVERRIDES += \
ro.config.notification_sound=Argon.ogg \
ro.config.alarm_alert=Helium.ogg
ifeq ($(TARGET_BOOTANIMATION_NAME),)
ifeq ($(TARGET_SCREEN_WIDTH) $(TARGET_SCREEN_HEIGHT),$(space))
PRODUCT_COPY_FILES += \
vendor/replicant/prebuilt/common/bootanimation/horizontal-1024x600.zip:system/media/bootanimation.zip
endif

View File

@ -1,13 +1,5 @@
# Inherit common CM stuff
$(call inherit-product, vendor/cm/config/common.mk)
# Include CM audio files
include vendor/cm/config/cm_audio.mk
# Default notification/alarm sounds
PRODUCT_PROPERTY_OVERRIDES += \
ro.config.notification_sound=Argon.ogg \
ro.config.alarm_alert=Helium.ogg
$(call inherit-product, vendor/cm/config/common_mini.mk)
ifeq ($(TARGET_SCREEN_WIDTH) $(TARGET_SCREEN_HEIGHT),$(space))
PRODUCT_COPY_FILES += \

View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 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.
-->
<config>
<!-- Whitelist of what components are permitted as backup data transports. The
'service' attribute here is a flattened ComponentName string. -->
<backup-transport-whitelisted-service
service="android/com.android.internal.backup.LocalTransportService" />
<backup-transport-whitelisted-service
service="com.google.android.gms/.backup.BackupTransportService" />
<backup-transport-whitelisted-service
service="com.google.android.gms/.backup.component.D2dTransportService" />
</config>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 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.
-->
<permissions>
<!-- The feature listed here coincides with the AppSuggestManagerService declared as
part of the external cm service init in SystemServer. If this xml isn't present
on the device, the service will not be published as a binder service!
-->
<feature name="org.cyanogenmod.appsuggest" />
</permissions>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 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.
-->
<permissions>
<!-- The feature listed here coincides with the PerformanceManagerService declared as
part of the external cm service init in SystemServer. If this xml isn't present
on the device, the service will not be published as a binder service!
-->
<feature name="org.cyanogenmod.audio" />
</permissions>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 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.
-->
<permissions>
<!-- The feature listed here coincides with the PerformanceManagerService declared as
part of the external cm service init in SystemServer. If this xml isn't present
on the device, the service will not be published as a binder service!
-->
<feature name="org.cyanogenmod.livedisplay" />
</permissions>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 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.
-->
<permissions>
<!-- The feature listed here coincides with the PartnerInterfaceService declared as
part of the external cm service init in SystemServer. If this xml isn't present
on the device, the service will not be published as a binder service!
-->
<feature name="org.cyanogenmod.partner" />
</permissions>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 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.
-->
<permissions>
<!-- The feature listed here coincides with the PerformanceManagerService declared as
part of the external cm service init in SystemServer. If this xml isn't present
on the device, the service will not be published as a binder service!
-->
<feature name="org.cyanogenmod.performance" />
</permissions>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 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.
-->
<permissions>
<!-- The feature listed here coincides with the ProfileManagerService declared as
part of the external cm service init in SystemServer. If this xml isn't present
on the device, the service will not be published as a binder service!
-->
<feature name="org.cyanogenmod.profiles" />
</permissions>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 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.
-->
<permissions>
<!-- The feature listed here coincides with the CMStatusBarManagerService declared as
part of the external cm service init in SystemServer. If this xml isn't present
on the device, the service will not be published as a binder service!
-->
<feature name="org.cyanogenmod.statusbar" />
</permissions>

View File

@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 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.
-->
<permissions>
<!-- The feature listed here coincides with the CMTelephonyManagerService declared as
part of the external cm service init in SystemServer. If this xml isn't present
on the device, the service will not be published as a binder service!
-->
<feature name="org.cyanogenmod.telephony" />
</permissions>

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 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.
-->
<permissions>
<feature name="org.cyanogenmod.weather" />
</permissions>

View File

@ -2,10 +2,6 @@
PRODUCT_COPY_FILES += \
vendor/replicant/prebuilt/common/etc/apns-conf.xml:system/etc/apns-conf.xml
# Selective SPN list for operator number who has the problem.
PRODUCT_COPY_FILES += \
vendor/replicant/prebuilt/common/etc/selective-spn-conf.xml:system/etc/selective-spn-conf.xml
# Telephony packages
PRODUCT_PACKAGES += \
messaging \

51
gello/Android.mk Normal file
View File

@ -0,0 +1,51 @@
#
# Copyright (C) 2016 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.
#
LOCAL_PATH := $(call my-dir)
SOURCE_GELLO_PATH := $(LOCAL_PATH)/../../../external/gello-build
include $(CLEAR_VARS)
LOCAL_MODULE := Gello
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := $(DEFAULT_SYSTEM_DEV_CERTIFICATE)
LOCAL_OVERRIDES_PACKAGES := Browser
ifeq ($(WITH_GELLO_SOURCE),true)
# Build from source
ifeq ($(LOCAL_GELLO),true)
BUILD_GELLO := $(info $(shell bash $(SOURCE_GELLO_PATH)/gello_build.sh --local 1>&2))
else
BUILD_GELLO := $(info $(shell bash $(SOURCE_GELLO_PATH)/gello_build.sh 1>&2))
endif
LOCAL_SRC_FILES := ../../../external/gello-build/Gello.apk
include $(BUILD_PREBUILT)
else
LOCAL_DEX_PREOPT := false
LOCAL_MODULE_TAGS := optional
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_MAVEN_REPO := https://maven.cyanogenmod.org/artifactory/gello_prebuilds
LOCAL_MAVEN_GROUP := org.cyanogenmod
LOCAL_MAVEN_VERSION := 40
LOCAL_MAVEN_ARTIFACT := gello
LOCAL_MAVEN_PACKAGING := apk
include $(BUILD_MAVEN_PREBUILT)
endif

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2016 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.
-->
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string-array name="config_enabledPreinstalledCarrierApps" translatable="false">
<item>com.cyanogen.ambient.core</item>
<item>com.cyanogen.ambient.updater</item>
<item>com.cyngn.devicemanager</item>
<item>com.cyngn.discovery</item>
</string-array>
</resources>

View File

@ -53,4 +53,10 @@
<item>bugreport</item>
<item>users</item>
</string-array>
<!-- Enable lockscreen rotation by default -->
<bool name="config_enableLockScreenRotation">true</bool>
<!-- Whether to persist the notification for when a usb drive device is plugged in -->
<bool name="config_persistUsbDriveNotification">true</bool>
</resources>

View File

@ -16,5 +16,8 @@
<resources>
<!-- Help URL, Tap & pay [DO NOT TRANSLATE] -->
<string name="help_url_nfc_payment" translatable="false">https://support.google.com/wallet/answer/1347934</string>
<!-- Help URL, Fingerprint [DO NOT TRANSLATE] -->
<string name="help_url_fingerprint" translatable="false">https://support.google.com</string>
</resources>

View File

@ -18,12 +18,10 @@
<!-- Class name for the default in-call UI Service [DO NOT TRANSLATE] -->
<string-array name="incall_default_classes" translatable="false">
<item>com.android.dialer/com.android.incallui.InCallServiceImpl</item>
<item>com.cyngn.dialer/com.android.incallui.InCallServiceImpl</item>
</string-array>
<!-- Class name for the default main dialer activity [DO NOT TRANSLATE] -->
<string-array name="dialer_default_classes" translatable="false">
<item>com.android.dialer/com.android.dialer.DialtactsActivity</item>
<item>com.cyngn.dialer/com.android.dialer.DialtactsActivity</item>
</string-array>
</resources>

View File

@ -17,6 +17,5 @@
<resources>
<string-array name="dialer_default_classes" translatable="false">
<item>com.android.dialer/com.android.dialer.DialtactsActivity</item>
<item>com.cyngn.dialer/com.android.dialer.DialtactsActivity</item>
</string-array>
</resources>

View File

@ -70,13 +70,15 @@
<apn carrier="中国电信WAP设置" mcc="204" mnc="04" apn="ctwap" user="ctwap@mycdma.cn" password="vnet.mobi" proxy="10.0.0.200" port="80" mmsproxy="10.0.0.200" mmsport="80" mmsc="http://mmsc.vnet.mobi" authtype="3" type="default,supl,dun,mms" />
<apn carrier="Ziggo Mobiel" mcc="204" mnc="04" apn="ziggo.dataxs.mobi" authtype="1" type="default,supl" />
<apn carrier="Hollandsnieuwe" mcc="204" mnc="04" apn="data.dataxs.mobi" proxy="" port="" user="" password="" mmsc="" authtype="1" type="default,supl" />
<apn carrier="Truphone" mcc="204" mnc="04" apn="truphone.com" type="default,dun" mvno_match_data="204043914" mvno_type="imsi" />
<apn carrier="Truphone" mcc="204" mnc="04" apn="truphone.com" type="default,dun" mvno_match_data="20404794" mvno_type="imsi" />
<apn carrier="KPN 4G LTE" mcc="204" mnc="08" apn="KPN4G.nl" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" type="default,supl,mms" />
<apn carrier="KPN GPRS" mcc="204" mnc="08" apn="internet" user="kpn" password="gprs" type="default,supl" />
<apn carrier="KPN Mobiel Internet" mcc="204" mnc="08" apn="portalmmm.nl" proxy="" port="" user="" password="" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" type="*" spn="KPN" />
<apn carrier="Hi Mobiel Internet" mcc="204" mnc="08" apn="portalmmm.nl" proxy="" port="" user="" password="" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" type="*" spn="HI" />
<apn carrier="Simyo Mobiel Internet" mcc="204" mnc="08" apn="portalmmm.nl" proxy="" port="" user="" password="" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" authtype="1" type="default,supl,mms" />
<apn carrier="Ortel Internet" mcc="204" mnc="08" apn="portalmmm.nl" proxy="" port="" user="" password="" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" authtype="1" type="default,supl,mms" />
<apn carrier="Yufone Internet" mcc="204" mnc="08" apn="portalmmm.nl" proxy="" port="" user="" password="" type="default" />
<apn carrier="Youfone Internet" mcc="204" mnc="08" apn="portalmmm.nl" proxy="" port="" user="" password="" type="default" />
<apn carrier="Lebara Internet" mcc="204" mnc="08" apn="multimedia.lebara.nl" proxy="" port="" user="" password="" mmsc="http://mp.mobiel.kpn/mmsc" mmsproxy="10.10.100.20" mmsport="5080" authtype="1" type="default,supl,mms" />
<apn carrier="AH Mobiel Internet" mcc="204" mnc="08" apn="multimedia.ah.nl" proxy="" port="" user="" password="" mmsc="http://mms" mmsproxy="193.113.200.195" mmsport="8080" type="*" spn="AH Mobiel" />
<apn carrier="MVNO NL" mcc="204" mnc="08" apn="internet.mvno.mobi" user="mvno" password="mvno" authtype="1" type="default,supl" mvno_match_data="204080950" mvno_type="imsi" />
@ -283,9 +285,8 @@
<apn carrier="INTERNET GPRS" mcc="214" mnc="06" apn="airtelnet.es" proxy="" port="" user="vodafone" password="vodafone" mmsc="" type="default,supl" />
<apn carrier="TeleCable Internet" mcc="214" mnc="06" apn="internet.telecable.es" proxy="" port="" user="telecable" password="telecable" mmsc="" mvno_type="spn" mvno_match_data="Telecable" type="default,supl" />
<apn carrier="TeleCable MMS" mcc="214" mnc="06" apn="mms.telecable.es" proxy="" port="" user="telecable" password="telecable" mmsc="http://mms.telecable.es/mms/" mmsproxy="212.89.0.84" mmsport="8080" mvno_type="spn" mvno_match_data="Telecable" type="mms" />
<apn carrier="Movistar" mcc="214" mnc="07" apn="telefonica.es" proxy="" port="" mmsc="" user="telefonica" password="telefonica" type="default,supl" />
<apn carrier="Conexión compartida" mcc="214" mnc="07" apn="movistar.es" user="MOVISTAR" password="MOVISTAR" type="dun,default" />
<apn carrier="Movistar MMS" mcc="214" mnc="07" apn="telefonica.es" proxy="" port="" user="telefonica" password="telefonica" mmsc="http://mms.movistar.com" mmsproxy="10.138.255.5" mmsport="8080" type="mms" />
<apn carrier="Movistar" mcc="214" mnc="07" apn="telefonica.es" proxy="10.138.255.133" port="8080" user="telefonica" password="telefonica" mmsc="http://mms.movistar.com" mmsproxy="10.138.255.5" mmsport="8080" authtype="1" type="default,mms,supl" />
<apn carrier="Conexión Compartida" mcc="214" mnc="07" apn="movistar.es" user="MOVISTAR" password="MOVISTAR" authtype="1" type="dun" />
<apn carrier="Jazztel MMS" mcc="214" mnc="07" apn="jazzmms" proxy="" port="" user="" password="" mmsc="http://jazztelmms.com/servlets/mms" mmsproxy="37.132.0.10" mmsport="8080" mvno_type="spn" mvno_match_data="JAZZTEL" type="mms" />
<apn carrier="Jazztel" mcc="214" mnc="07" apn="jazzinternet" proxy="" port="" user="" password="" mmsc="" mvno_type="spn" mvno_match_data="JAZZTEL" type="default,supl" />
<apn carrier="Euskaltel" mcc="214" mnc="08" apn="internet.euskaltel.mobi" user="CLIENTE" password="EUSKALTEL" type="default,supl" />
@ -368,8 +369,8 @@
<apn carrier="iTIM" mcc="222" mnc="01" apn="unico.tim.it" proxy="213.230.130.89" port="80" user="" password="" mmsc="http://mms.tim.it/servlets/mms" mmsproxy="213.230.130.89" mmsport="80" type="mms" />
<apn carrier="Tiscali INTERNET" mcc="222" mnc="01" apn="tiscalimobileinternet" type="default,supl" />
<apn carrier="Tiscali MMS" mcc="222" mnc="01" apn="tiscalimobilemms" mmsc="http://mms.tiscali.mobi/servlets/mms" mmsproxy="213.230.130.89" mmsport="80" type="mms" />
<apn carrier="WEB COOP" mcc="222" mnc="01" apn="web.coopvoce.it" proxy="" port="" user="" password="" mmsc="" mvno_type="spn" mvno_match_data="COOP" type="default,supl" />
<apn carrier="COOP MMS" mcc="222" mnc="01" apn="mms.coopvoce.it" proxy="" port="" user="" password="" mmsc="http://mms.coop.it/servlets/mms" mmsproxy="213.230.130.89" mmsport="80" mvno_type="spn" mvno_match_data="COOP" authtype="1" type="mms" />
<apn carrier="COOPVOCE WEB" mcc="222" mnc="01" apn="web.coopvoce.it" proxy="" port="" user="" password="" mmsc="" mvno_type="spn" mvno_match_data="Coop Mobile" type="default,supl" />
<apn carrier="COOPVOCE MMS" mcc="222" mnc="01" apn="mms.coopvoce.it" proxy="" port="" user="" password="" mmsc="http://mms.coop.it/servlets/mms" mmsproxy="213.230.130.89" mmsport="80" mvno_type="spn" mvno_match_data="Coop Mobile" authtype="1" type="mms" />
<apn carrier="Iusacell Internet" mcc="222" mnc="010" apn="web.iusacellgsm.mx" user="iusacellgsm" password="iusacellgsm" authtype="0" type="default,supl" />
<apn carrier="Internet Modem" mcc="222" mnc="010" apn="modem.iusacellgsm.mx" user="iusacellgsm" password="iusacellgsm" type="dun" />
<apn carrier="Iusacell MMS" mcc="222" mnc="010" apn="mms.iusacellgsm.mx" mmsc="http://mms.iusacell3g.com/" user="mmsiusacellgsm" password="mmsiusacellgsm" type="mms" />
@ -896,7 +897,7 @@
<apn carrier="GSMAland wap" mcc="244" mnc="14" apn="internet" proxy="194.110.177.70" port="8080" user="" password="" mmsc="" type="default,supl" />
<apn carrier="GSMAland mms" mcc="244" mnc="14" apn="mms" proxy="" port="" user="" password="" mmsc="http://mms.amt.aland.fi" mmsproxy="194.110.177.70" mmsport="8080" type="mms" />
<apn carrier="Saunalahti Wap" mcc="244" mnc="21" apn="wap.saunalahti.fi" proxy="" port="" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Saunalahti Internet" mcc="244" mnc="21" apn="internet.saunalahti.fi" proxy="" port="" user="" password="" mmsc="" authtype="1" type="default,supl" />
<apn carrier="Saunalahti Internet" mcc="244" mnc="21" apn="internet.saunalahti" proxy="" port="" user="" password="" mmsc="" authtype="1" type="default,supl" />
<apn carrier="Saunalahti MMS" mcc="244" mnc="21" apn="mms.saunalahti.fi" proxy="" port="" user="" password="" mmsc="http://mms.saunalahti.fi:8002/" mmsproxy="62.142.4.197" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Sonera Internet" mcc="244" mnc="91" apn="internet" proxy="" port="" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Sonera MMS" mcc="244" mnc="91" apn="wap.sonera.net" proxy="" port="" user="" password="" mmsc="http://mms.sonera.fi:8002" mmsproxy="195.156.25.33" mmsport="80" type="mms" />
@ -908,7 +909,7 @@
<apn carrier="Bite LT Internet" mcc="246" mnc="02" apn="banga" proxy="" port="" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Bite MMS" mcc="246" mnc="02" apn="mms" proxy="" port="" user="mms@mms" password="mms" mmsc="http://mmsc" mmsproxy="192.168.150.2" mmsport="8080" type="mms" />
<apn carrier="Bite" mcc="246" mnc="02" apn="wap" proxy="" port="" user="" password="" server="213.226.131.133" mmsc="" type="default,supl" />
<apn carrier="Tele2 Internet LT" mcc="246" mnc="03" apn="internet.tele2.lt" proxy="130.244.196.90" port="8080" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Tele2 Internet LT" mcc="246" mnc="03" apn="internet.tele2.lt" proxy="" port="" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Tele2 LT" mcc="246" mnc="03" apn="internet.vodafone.net" proxy="" port="" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Tele2 MMS LT" mcc="246" mnc="03" apn="mms.tele2.lt" proxy="" port="" user="" password="" mmsc="http://mmsc.tele2.lt/" mmsproxy="193.12.40.29" mmsport="8080" type="mms" />
<apn carrier="Tele2 LT MMS" mcc="246" mnc="03" apn="wap.tele2.lt" proxy="" port="" user="" password="" mmsc="http://mmsc.tele2.lt" mmsproxy="193.12.40.29" mmsport="8080" type="mms" />
@ -1078,18 +1079,9 @@
<apn carrier="Lebara Internet" mcc="262" mnc="01" apn="internet.t-d1.de" proxy="" port="" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Callmobile Internet" mcc="262" mnc="01" apn="internet.t-d1.de" proxy="193.254.160.002" port="9201" user="T-Mobile" password="wap" mmsc="" authtype="1" type="default,supl" />
<apn carrier="callmobile.de" mcc="262" mnc="01" apn="internet.t-mobile" proxy="" port="" user="t-mobile" password="tm" mmsc="http://mms.t-mobile.de/servlets/mms" mmsproxy="172.28.23.131" mmsport="8008" mvno_type="spn" mvno_match_data="callmobile.de" type="default,supl,mms" />
<apn carrier="VF DE live!" mcc="262" mnc="02" apn="wap.vodafone.de" proxy="139.007.029.001" port="80" type="default,supl" />
<apn carrier="VF DE live! Secure" mcc="262" mnc="02" apn="wap.vodafone.de" proxy="139.007.029.001" port="9203" type="default,supl" />
<apn carrier="VF DE Event" mcc="262" mnc="02" apn="event.vodafone.de" type="default,supl" />
<apn carrier="VF DE Web" mcc="262" mnc="02" apn="web.vodafone.de" proxy="" port="" type="default,supl" />
<apn carrier="VF DE MMS" mcc="262" mnc="02" apn="event.vodafone.de" proxy="" port="" mmsproxy="139.007.029.017" mmsport="80" mmsc="http://139.7.24.1/servlets/mms" user="" password="" type="mms" />
<apn carrier="Vodafone DE-MMS" mcc="262" mnc="02" apn="event.vodafone.de" mmsc="http://139.7.24.1/servlets/mms" mmsproxy="139.7.29.17" mmsport="80" type="mms" />
<apn carrier="Vodafone DE" mcc="262" mnc="02" apn="web.vodafone.de" type="default,supl" />
<apn carrier="Vodafone DE-IMS" mcc="262" mnc="02" apn="ims" type="ims" protocol="IPV4V6" />
<apn carrier="otelo web" mcc="262" mnc="02" apn="data.otelo.de" user="" password="" type="default,supl" />
<apn carrier="klarmobil MMS" mcc="262" mnc="02" apn="event.vodafone.de" proxy="" port="" user="" password="" mmsc="http://139.7.24.1/servlets/mms" mmsproxy="139.7.29.17" mmsport="80" mvno_type="spn" mvno_match_data="klarmobil" type="mms" />
<apn carrier="klarmobil" mcc="262" mnc="02" apn="web.vodafone.de" proxy="" port="" user="" password="" mmsc="" mvno_type="spn" mvno_match_data="klarmobil" type="default,supl" />
<apn carrier="Fonic" mcc="262" mnc="02" apn="pinternet.interkom.de" proxy="" port="" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Otelo MMS" mcc="262" mnc="02" apn="event.otelo.de" proxy="" port="" user="" password="" mmsc="http://139.7.24.1/servlets/mms" mmsproxy="139.7.29.17" mmsport="80" mvno_type="spn" mvno_match_data="O.tel.o" type="mms" />
<apn carrier="Otelo Internet" mcc="262" mnc="02" apn="data.otelo.de" proxy="" port="" user="" password="" mmsc="" mvno_type="spn" mvno_match_data="O.tel.o" type="default,supl" />
<apn carrier="Open Market: E-Plus Web" mcc="262" mnc="03" apn="internet.eplus.de" user="eplus" password="internet" authtype="3" type="default,supl" />
@ -1105,13 +1097,6 @@
<apn carrier="Aldi Talk Internet" mcc="262" mnc="03" apn="internet.eplus.de" proxy="" port="" user="" password="" mmsc="" mvno_type="spn" mvno_match_data="Aldi Talk" type="default,supl" />
<apn carrier="Simyo MMS" mcc="262" mnc="03" apn="mms.eplus.de" proxy="" port="" user="simyo" password="simyo" mmsc="http://mms/eplus/" mmsproxy="212.23.97.153" mmsport="5080" mvno_type="spn" mvno_match_data="Simyo" type="mms" />
<apn carrier="Simyo Internet" mcc="262" mnc="03" apn="internet.eplus.de" proxy="" port="" user="simyo" password="simyo" mmsc="" mvno_type="spn" mvno_match_data="Simyo" type="default,supl" />
<apn carrier="VF DE live!" mcc="262" mnc="04" apn="wap.vodafone.de" proxy="139.007.029.001" port="80" type="default,supl" />
<apn carrier="VF DE live! Secure" mcc="262" mnc="04" apn="wap.vodafone.de" proxy="139.007.029.001" port="9203" type="default,supl" />
<apn carrier="VF DE Event" mcc="262" mnc="04" apn="event.vodafone.de" type="default,supl" />
<apn carrier="VF DE Web" mcc="262" mnc="04" apn="web.vodafone.de" proxy="" port="" type="default,supl" />
<apn carrier="VF DE MMS" mcc="262" mnc="04" apn="event.vodafone.de" proxy="" port="" mmsproxy="139.007.029.017" mmsport="80" mmsc="http://139.7.24.1/servlets/mms" user="" password="" type="mms" />
<apn carrier="Vodafone DE-MMS" mcc="262" mnc="04" apn="event.vodafone.de" mmsc="http://139.7.24.1/servlets/mms" mmsproxy="139.7.29.17" mmsport="80" type="mms" />
<apn carrier="Vodafone DE" mcc="262" mnc="04" apn="web.vodafone.de" type="default,supl" />
<apn carrier="E-Plus Web GPRS" mcc="262" mnc="05" apn="internet.eplus.de" proxy="" port="" user="eplus" password="internet" mmsc="" type="default,supl" />
<apn carrier="E-Plus MMS" mcc="262" mnc="05" apn="mms.eplus.de" proxy="" port="" user="mms" password="eplus" mmsc="http://mms/eplus/" mmsproxy="212.23.97.153" mmsport="5080" type="mms" />
<apn carrier="T-Mobile Internet" mcc="262" mnc="06" apn="internet.t-mobile" user="t-mobile" password="tm" mmsc="http://mms.t-mobile.de/servlets/mms" mmsproxy="172.28.23.131" mmsport="8008" type="default,supl,mms" />
@ -1145,16 +1130,10 @@
<apn carrier="Alice MMS" mcc="262" mnc="08" apn="internet.partner1" proxy="" port="" mmsproxy="82.113.100.41" mmsport="8080" mmsc="http://10.81.0.7:8002" user="" password="" type="mms" spn="Alice Mobile" />
<apn carrier="o2" mcc="262" mnc="08" apn="internet" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.5" mmsport="8080" type="default,supl,mms" />
<apn carrier="O2" mcc="262" mnc="08" apn="internet" proxy="" port="" user="" password="" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.5" mmsport="8080" type="default,supl,mms" />
<apn carrier="VF DE live!" mcc="262" mnc="09" apn="wap.vodafone.de" proxy="139.007.029.001" port="80" type="default,supl" />
<apn carrier="VF DE live! Secure" mcc="262" mnc="09" apn="wap.vodafone.de" proxy="139.007.029.001" port="9203" type="default,supl" />
<apn carrier="VF DE Event" mcc="262" mnc="09" apn="event.vodafone.de" type="default,supl" />
<apn carrier="VF DE Web" mcc="262" mnc="09" apn="web.vodafone.de" proxy="" port="" type="default,supl" />
<apn carrier="VF DE MMS" mcc="262" mnc="09" apn="event.vodafone.de" proxy="" port="" mmsproxy="139.007.029.017" mmsport="80" mmsc="http://139.7.24.1/servlets/mms" user="" password="" type="mms" />
<apn carrier="Vodafone DE-MMS" mcc="262" mnc="09" apn="event.vodafone.de" mmsc="http://139.7.24.1/servlets/mms" mmsproxy="139.7.29.17" mmsport="80" type="mms" />
<apn carrier="Vodafone DE" mcc="262" mnc="09" apn="web.vodafone.de" type="default,supl" />
<apn carrier="Vodafone DE Web" mcc="262" mnc="02" apn="web.vodafone.de" proxy="" port="" type="default,supl" />
<apn carrier="Vodafone DE MMS" mcc="262" mnc="02" apn="event.vodafone.de" proxy="" port="" mmsproxy="139.007.029.017" mmsport="80" mmsc="http://139.7.24.1/servlets/mms" user="" password="" type="mms" />
<apn carrier="Vodafone DE-IMS" mcc="262" mnc="02" apn="ims" type="ims" protocol="IPV4V6" />
<apn carrier="T-Mobile DE" mcc="262" mnc="09" apn="internet.t-mobile" proxy="" port="" user="t-mobile" password="tm" mmsc="http://mms.t-mobile.de/servlets/mms" mmsproxy="172.28.23.131" mmsport="8008" type="default,supl,mms" />
<apn carrier="Vodafone DE-MMS" mcc="262" mnc="09" apn="event.vodafone.de" proxy="" port="" user="" password="" mmsc="http://139.7.24.1/servlets/mms" mmsproxy="139.7.29.17" mmsport="80" type="mms" />
<apn carrier="Vodafone DE" mcc="262" mnc="09" apn="web.vodafone.de" proxy="" port="" user="" password="" mmsc="" type="default,supl" />
<apn carrier="o2 Internet" mcc="262" mnc="11" apn="internet" user="" password="" type="default,supl" />
<apn carrier="o2 Internet prepaid" mcc="262" mnc="11" apn="pinternet.interkom.de" user="" password="" type="default,supl" />
<apn carrier="o2 MMS" mcc="262" mnc="11" apn="internet" proxy="" port="" mmsproxy="82.113.100.5" mmsport="8080" mmsc="http://10.81.0.7:8002" user="" password="" type="mms" />
@ -1165,6 +1144,7 @@
<apn carrier="Alice Web" mcc="262" mnc="11" apn="internet.partner1" user="" password="" type="default,supl" />
<apn carrier="Alice MMS" mcc="262" mnc="11" apn="internet.partner1" proxy="" port="" mmsproxy="82.113.100.41" mmsport="8080" mmsc="http://10.81.0.7:8002" user="" password="" type="mms" spn="Alice Mobile" />
<apn carrier="O2" mcc="262" mnc="11" apn="internet" proxy="" port="" user="" password="" mmsc="http://10.81.0.7:8002" mmsproxy="82.113.100.5" mmsport="8080" type="default,supl,mms" />
<apn carrier="Truphone" mcc="262" mnc="42" apn="truphone.com" type="default,dun" />
<apn carrier="Lycamobile DE" mcc="262" mnc="43" apn="data.lycamobile.de" proxy="" port="" user="lmde" password="plus" mmsc="" mvno_type="spn" mvno_match_data="Lycamobile" type="default,supl" />
<apn carrier="Vodafone Net2" mcc="268" mnc="01" apn="net2.vodafone.pt" proxy="iproxy.vodafone.pt" port="80" mmsproxy="iproxy.vodafone.pt" mmsport="80" mmsc="http://mms.vodafone.pt/servlets/mms" user="vodafone" password="vodafone" authtype="3" type="default,mms" />
<apn carrier="Vodafone PT Internet" mcc="268" mnc="01" apn="net2.vodafone.pt" proxy="iproxy.vodafone.pt" port="80" mmsc="http://mms.vodafone.pt/servlets/mms" mmsproxy="iproxy.vodafone.pt" mmsport="80" type="default,supl,mms" />
@ -1257,10 +1237,10 @@
<apn carrier="Turkcell MMS" mcc="286" mnc="01" apn="mms" proxy="" port="" mmsproxy="212.252.169.217" mmsport="8080" mmsc="http://mms.turkcell.com.tr/servlets/mms" user="mms" password="mms" type="mms" />
<apn carrier="Turkcell" mcc="286" mnc="01" apn="internet" proxy="" port="" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Turkcell MMS" mcc="286" mnc="01" apn="mms" proxy="" port="" user="mms" password="mms" mmsc="http://mms.turkcell.com.tr/servlets/mms" mmsproxy="212.252.169.217" mmsport="9201" type="mms" />
<apn carrier="Vodafone TR" mcc="286" mnc="02" apn="internet" proxy="" port="" user="vodafone" password="vodafone" mmsc="" type="default,supl" protocol="IPV4V6" />
<apn carrier="Vodafone Live" mcc="286" mnc="02" apn="vflive" proxy="212.65.136.226" port="9401" mmsc="" user="vodafone" password="vodafone" authtype="3" type="default,supl" />
<apn carrier="MMS GPRS" mcc="286" mnc="02" apn="mms" proxy="" port="" mmsc="http://217.31.233.18:6001/MM1Servlet" user="vodafone" password="vodafone" authtype="3" type="mms" />
<apn carrier="Vodafone TR" mcc="286" mnc="02" apn="internet" proxy="" port="" user="vodafone" password="vodafone" mmsc="" type="default,supl" />
<apn carrier="Vodafone TR MMS" mcc="286" mnc="02" apn="mms" proxy="" port="" user="vodafone" password="vodafone" mmsc="http://217.31.233.18:6001/MM1Servlet" mmsproxy="217.31.233.18" mmsport="9401" type="mms" />
<apn carrier="MMS GPRS" mcc="286" mnc="02" apn="mms" proxy="" port="" mmsc="http://217.31.233.18:6001/MM1Servlet" user="vodafone" password="vodafone" authtype="3" type="mms" />
<apn carrier="AVEA" mcc="286" mnc="03" apn="internet" proxy="" port="" user="wap" password="wap" mmsc="" type="default,supl" />
<apn carrier="AVEA MMS" mcc="286" mnc="03" apn="mms" proxy="" port="" user="mms" password="mms" mmsc="http://mms.avea.com.tr/servlets/mms" mmsproxy="213.161.151.201" mmsport="8080" type="mms" />
<apn carrier="Tele MMS" mcc="290" mnc="01" apn="internet" proxy="" port="" user="" password="" mmsc="http://mms.tele.gl/mms/wapenc" mmsproxy="10.112.222.37" mmsport="8080" type="mms" />
@ -1273,8 +1253,8 @@
<apn carrier="T-2 Mms" mcc="293" mnc="64" apn="mms.t-2.net" proxy="" port="" user="" password="" mmsc="http://www.mms.t-2.net:8002" mmsproxy="172.20.18.137" mmsport="8080" type="mms" />
<apn carrier="Tusmobil Internet" mcc="293" mnc="70" apn="internet.tusmobil.si" proxy="" port="" user="tusmobil" password="internet" mmsc="" type="default,supl" />
<apn carrier="Tusmobil MMS" mcc="293" mnc="70" apn="mms.tusmobil.si" proxy="" port="" user="tusmobil" password="mms" mmsc="http://mms.tusmobil.si:8002" mmsproxy="91.185.221.85" mmsport="8080" type="mms" />
<apn carrier="T-Mobile MK" mcc="294" mnc="01" apn="internet" proxy="" port="" user="internet" password="t-mobile" mmsc="" type="default,supl" />
<apn carrier="T-Mobile MK MMS" mcc="294" mnc="01" apn="mms" proxy="" port="" user="mms" password="mms" mmsc="http://mms.t-mobile.com.mk" mmsproxy="62.162.155.227" mmsport="8080" type="mms" />
<apn carrier="T-Mobile MK" mcc="294" mnc="01" apn="internet" proxy="" port="" user="internet" password="t-mobile" mmsc="" authtype="3" type="default,supl" />
<apn carrier="T-Mobile MK MMS" mcc="294" mnc="01" apn="mms" proxy="" port="" user="mms" password="mms" mmsc="http://mms.t-mobile.com.mk" mmsproxy="62.162.155.227" mmsport="8080" authtype="3" type="mms" />
<apn carrier="Vip internet" mcc="294" mnc="03" apn="vipoperator" proxy="78.40.0.1" port="8080" mmsc="" user="vipoperator" password="vipoperator" type="default,supl" />
<apn carrier="Vip mms" mcc="294" mnc="03" apn="vipoperator.mms" proxy="" port="" mmsproxy="78.40.0.1" mmsport="8080" mmsc="http://mmsc.vipoperator.com.mk" user="" password="" type="mms" />
<apn carrier="Telenor MNE internet" mcc="297" mnc="01" apn="internet" proxy="192.168.246.005" port="8080" mmsc="" user="gprs" password="gprs" type="default,supl" />
@ -1375,6 +1355,7 @@
<apn carrier="metropcs" mcc="310" mnc="027" apn="wap.metropcs.net" proxy="" port="" user="MDN@mymetropcs.com" password="metropcs" server="http://mms.metropcs.net/servlets/mmsc" mmsc="http://mms.metropcs.net/mmsc" mmsproxy="" mmsport="3128" type="default,supl,mms" />
<apn carrier="myBlue Pix" mcc="310" mnc="030" apn="mmswap.centennialwireless.com" proxy="" port="" user="" password="" mmsc="http://mms.myblue.com/servlets/mms" mmsproxy="63.99.231.135" mmsport="8080" type="mms" />
<apn carrier="Internet" mcc="310" mnc="030" apn="private.centennialwireless.com" proxy="" port="" user="privuser" password="priv" mmsc="" type="default,supl" />
<apn carrier="Truphone" mcc="310" mnc="030" apn="truphone.com" type="default,dun" />
<apn carrier="CorrMMS" mcc="310" mnc="080" apn="corrmms" proxy="" port="" user="" password="" mmsc="http://mms.iot1.com/corr/mms.php" mmsproxy="66.255.55.23" mmsport="80" type="mms" />
<apn carrier="Internet" mcc="310" mnc="090" apn="isp" type="default,supl" />
<apn carrier="MMS" mcc="310" mnc="090" apn="mms" mmsc="http://mms.edgemobile.net/mmsc" mmsproxy="12.108.12.13" mmsport="3128" type="mms" />
@ -1417,7 +1398,6 @@
<apn carrier="Cricket AIO" mcc="310" mnc="150" apn="ndo" mmsc="http://mmsc.aiowireless.net" mmsproxy="proxy.aiowireless.net" mmsport="80" type="default,mms,fota,hipri,supl" />
<apn carrier="ATT WAP" mcc="310" mnc="170" apn="wap.cingular" proxy="wireless.cingular.com" port="80" mmsc="http://mmsc.cingular.com" mmsproxy="wireless.cingular.com" mmsport="80" type="default,mms" />
<apn carrier="ATT Broadband" mcc="310" mnc="170" apn="Broadband" type="default,supl" />
<apn carrier="ATT Nextgenphone" mcc="310" mnc="170" apn="nxtgenphone" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="default,mms,supl,fota,hipri" protocol="IPV4V6" roaming_protocol="IPV4V6" mtu="1410" />
<apn carrier="DataConnect" mcc="310" mnc="170" apn="isp.cingular" proxy="" port="" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Cingular MMS" mcc="310" mnc="170" apn="wap.cingular" proxy="" port="" user="WAP@CINGULARGPRS.COM" password="CINGULAR1" mmsc="http://mmsc.cingular.com" mmsproxy="66.209.11.32" mmsport="8080" type="mms" />
<apn carrier="ATT WAP" mcc="310" mnc="180" apn="wap.cingular" proxy="wireless.cingular.com" port="80" mmsc="http://mmsc.cingular.com" mmsproxy="wireless.cingular.com" mmsport="80" type="default,mms" />
@ -1430,10 +1410,9 @@
<apn carrier="T-Mobile MMS" mcc="310" mnc="260" apn="TMUS" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="mms" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Project Fi - T" mcc="310" mnc="260" apn="h2g2" type="ia" protocol="IPV4V6" roaming_protocol="IPV4V6" mvno_match_data="31026097" mvno_type="IMSI" />
<apn carrier="Project Fi - T" mcc="310" mnc="260" apn="h2g2" user="none" server="*" password="none" mmsc="http://mmsc1.g-mms.com/mms/wapenc" protocol="IPV6" roaming_protocol="IP" mvno_match_data="31026097" mvno_type="IMSI" />
<apn carrier="T-Mobile IMS" mcc="310" mnc="260" apn="ims" type="ims" protocol="IPV6" />
<apn carrier="MetroPCS LTE" mcc="310" mnc="260" apn="fast.metropcs.com" user="" password="" authtype="0" proxy="" port="" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,mms,supl" />
<apn carrier="MetroPCS LTE IPv6" mcc="310" mnc="260" apn="fast.metropcs.com" user="" password="" authtype="0" proxy="" port="" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" type="default,mms,supl" protocol="IPV6" />
<apn carrier="MetroPCS" mcc="310" mnc="260" apn="fast.t-mobile.com" port="" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" mvno_type="gid" mvno_match_data="6d38" type="default,mms,supl" />
<apn carrier="T-Mobile IMS" mcc="310" mnc="260" apn="ims" type="ims" modem_cognitive="true" protocol="IPV6" />
<apn carrier="MetroPCS 260" mcc="310" mnc="260" apn="fast.metropcs.com" protocol="IPV4V6" roaming_protocol="IPV4V6" mvno_match_data="6D" mvno_type="gid" type="ia" />
<apn carrier="MetroPCS 260" mcc="310" mnc="260" apn="fast.metropcs.com" mmsc="http://metropcs.mmsmvno.com/mms/wapenc" protocol="IPV6" roaming_protocol="IP" mvno_match_data="6D" mvno_type="gid" type="default,supl,mms" />
<apn carrier="Net10" mcc="310" mnc="260" apn="wap.tracfone" port="8080" mmsc="http://mms.tracfone.com" type="default,mms,supl" />
<apn carrier="Family Mobile" mcc="310" mnc="260" apn="web.omwtoday.com" port="" mmsc="http://wirelessfour.mmsmvno.com/mms/wapenc" mvno_type="gid" mvno_match_data="4d4b" type="default,mms,supl" />
<apn carrier="I-Wireless" mcc="310" mnc="260" apn="i2.iwireless.com" proxy="" port="" user="" password="" mmsc="http://mmsc.iwireless.datonair.net:6672" type="default,supl,mms" />
@ -1462,6 +1441,7 @@
<apn carrier="StraightTalk T-Mobile" mcc="310" mnc="260" apn="wap.tracfone" proxy="" port="8080" user="" password="" mmsc="http://mmsc.tracfone.com" type="default,supl,mms" />
<apn carrier="nep.data" mcc="310" mnc="290" apn="nep.data" proxy="" port="" type="default,supl" authtype="0" />
<apn carrier="nep.mms" mcc="310" mnc="290" apn="nep.mms" mmsc="http://mmsgprs.com" mmsproxy="" mmsport="80" type="mms" authtype="0" />
<apn carrier="Truphone" mcc="310" mnc="300" apn="truphone.com" type="default,dun" />
<apn carrier="CellOne NEAZ" mcc="310" mnc="320" apn="isp.cellularoneaz.net" type="default,supl" authtype="0" />
<apn carrier="CellOne NEAZ MMS" mcc="310" mnc="320" apn="wap.c1csky.net" mmsc="http://mmsc.c1neaz.csky.us:6672" mmsproxy="209.4.229.94" mmsport="9401" type="mms" authtype="0" />
<apn carrier="Westlink Internet" mcc="310" mnc="340" apn="internet.westlink" type="default,supl" authtype="0" />
@ -1484,9 +1464,11 @@
<apn carrier="Consumer Cellular 3G" mcc="310" mnc="410" apn="att.mvno" proxy="66.209.11.32" port="80" mmsc="http://mmsc.cingular.com" mmsproxy="66.209.11.32" mmsport="80" type="default,mms,supl,agps,fota" />
<apn carrier="Consumer Cellular LTE" mcc="310" mnc="410" apn="ccdata" proxy="" port="" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="default,mms,agps,supl,fota" />
<apn carrier="Good 2Go Mobile" mcc="310" mnc="410" apn="att.mvno" proxy="proxy.mvno.att.ztarmobile.com" port="80" mmsc="http://mmsc.cingular.com" mmsproxy="proxy.mvno.att.ztarmobile.com" mmsport="80" type="default,mms,supl,hipri" />
<apn carrier="ATT IMS" mcc="310" mnc="410" apn="ims" type="ims" modem_cognitive="true" protocol="IPV4V6" />
<apn carrier="ATT Nextgenphone" mcc="310" mnc="410" apn="nxtgenphone" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="default,mms,supl,fota,hipri" protocol="IPV4V6" roaming_protocol="IPV4V6" mtu="1410" />
<apn carrier="ATT Phone" mcc="310" mnc="410" apn="phone" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="default,mms,supl,fota,hipri" protocol="IPV4V6" roaming_protocol="IPV4V6" mtu="1410" />
<apn carrier="ATT" mcc="310" mnc="410" apn="wap.cingular" proxy="" port="" user="WAP@CINGULARGPRS.COM" password="" mmsc="http://mmsc.cingular.com" mmsproxy="wireless.cingular.com" mmsport="80" type="default,supl,mms" />
<apn carrier="ATT LTE" mcc="310" mnc="410" apn="pta" proxy="" port="" user="" password="" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="default,supl,mms" />
<apn carrier="ATT Phone" mcc="310" mnc="410" apn="phone" mmsc="http://mmsc.mobile.att.net" mmsproxy="proxy.mobile.att.net" mmsport="80" type="default,supl,mms,hipri" />
<apn carrier="ATT Broadband" mcc="310" mnc="410" apn="broadband" user="" password="" mmsc="" type="default,supl" />
<apn carrier="ATT Activation" mcc="310" mnc="410" apn="lwaactivate" user="" password="" mmsc="" protocol="IP" />
<apn carrier="StraightTalk ATT" mcc="310" mnc="410" apn="tfdata" port="80" mmsc="http://mms-tf.net" mmsproxy="mms3.tracfone.com" mmsport="80" type="default,supl,mms" />
@ -1533,6 +1515,10 @@
<apn carrier="Cellular One Smartphone" mcc="310" mnc="570" apn="internet" type="default,supl" authtype="0" />
<apn carrier="Cellular One MMS" mcc="310" mnc="570" apn="clearsky" mmsc="http://mmsc.mtpcs.csky.us:6672/" mmsproxy="209.4.229.229" mmsport="9201" type="mms" authtype="0" />
<apn carrier="ChinookMMS" mcc="310" mnc="570" apn="wapgw.chinookwireless.net" proxy="" port="" user="" password="" mmsc="http://mms.cellonenation.net/mms/" mmsproxy="204.181.155.195" mmsport="8080" type="mms" />
<apn carrier="Inland Cellular" mcc="310" mnc="580" apn="internet.inland.com" type="default,mms" authtype="3" mmsc="http://mms.inland3g.com/inland/mms.php" />
<apn carrier="Inland Cellular FOTA" mcc="310" mnc="580" apn="ota.inland.com" type="fota" bearer="14" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="Inland Cellular LTE" mcc="310" mnc="580" apn="internet.inland.com" type="default,mms,supl" bearer="14" protocol="IPV4V6" roaming_protocol="IPV4V6" mmsc="http://mms.inland3g.com/inland/mms.php" />
<apn carrier="Inland Cellular Tether" mcc="310" mnc="580" apn="modem.inland.com" type="dun" bearer="14" protocol="IPV4V6" roaming_protocol="IPV4V6" mmsc="http://mms.inland3g.com/inland/mms.php" />
<apn carrier="CellularOne MMS" mcc="310" mnc="590" apn="cellular1wap" proxy="" port="" user="" password="" mmsc="http://mmsc" mmsproxy="172.23.1.252" mmsport="8799" type="mms" />
<apn carrier="EpicINT" mcc="310" mnc="610" apn="internet.epictouch" proxy="" port="" user="" password="" mmsc="" type="default,supl" />
<apn carrier="EpicMMS" mcc="310" mnc="610" apn="mms.epictouch" proxy="" port="" user="" password="" mmsc="http://mmsc.westlinkcom.com/servlets/mms" mmsproxy="63.99.231.135" mmsport="8080" type="mms" />
@ -1643,6 +1629,7 @@
<apn carrier="Verizon" mcc="311" mnc="480" apn="VZWIMS" type="ims,ia" protocol="IPV4V6" roaming_protocol="IPV4V6" bearer_bitmask="1|2|3|9|10|11|13|14|15" profile_id="2" modem_cognitive="true" max_conns="1023" max_conns_time="300" />
<!-- bearer 1, 2, 3, 9, 10, 11, 13, 14, 15 -->
<apn carrier="Verizon" mcc="311" mnc="480" apn="VZWAPP" type="cbs,mms" mmsc="http://mms.vzwreseller.com/servlets/mms" protocol="IPV4V6" roaming_protocol="IPV4V6" bearer_bitmask="1|2|3|9|10|11|13|14|15" profile_id="4" modem_cognitive="true" max_conns="1023" max_conns_time="300" />
<apn carrier="StraightTalk Verizon" mcc="311" mnc="480" apn="TRACFONE.VZWENTP" type="default,dun,supl" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="Verizon Internet" mcc="311" mnc="482" apn="VZWINTERNET" type="default,dun,mms" mmsc="http://mms.vtext.com/servlets/mms" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="Verizon FOTA" mcc="311" mnc="482" apn="VZWADMIN" type="fota" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="Verizon IMS" mcc="311" mnc="482" apn="VZWIMS" type="ims" protocol="IPV4V6" roaming_protocol="IPV4V6" />
@ -1887,39 +1874,84 @@
<apn carrier="Kcell" mcc="401" mnc="02" apn="internet" proxy="" port="" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Kcell MMS" mcc="401" mnc="02" apn="mms" proxy="" port="" user="" password="" mmsc="http://mms.kcell.kz/post" mmsproxy="195.47.255.7" mmsport="8080" type="mms" />
<apn carrier="Kcell WAP" mcc="401" mnc="02" apn="wap" proxy="195.47.255.7" port="8080" mmsc="" user="" password="" type="default,supl" />
<apn carrier="MTS WAP" mcc="404" mnc="0" apn="WAP" user="wap@wap.mtsindia.in" password="MTS" authtype="3" type="default,supl" />
<apn carrier="MTS MMS" mcc="404" mnc="0" apn="MMS" user="mms@mms.mtsindia.in" password="MTS" authtype="3" type="mms" />
<apn carrier="MTS MODEM" mcc="404" mnc="0" apn="Modem" user="internet@internet.mtsindia.in" password="MTS" authtype="3" type="default,supl" />
<apn carrier="Vodafone" mcc="404" mnc="1" apn="portalnmms" proxy="10.10.1.100" port="9401" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="default,supl,mms" />
<apn carrier="Vodafone IN MMS" mcc="404" mnc="1" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
<apn carrier="Vodafone IN" mcc="404" mnc="1" apn="www" type="default,supl" />
<apn carrier="MTS WAP" mcc="404" mnc="00" apn="WAP" user="wap@wap.mtsindia.in" password="MTS" authtype="3" type="default,supl" />
<apn carrier="MTS MMS" mcc="404" mnc="00" apn="MMS" user="mms@mms.mtsindia.in" password="MTS" authtype="3" type="mms" />
<apn carrier="MTS MODEM" mcc="404" mnc="00" apn="Modem" user="internet@internet.mtsindia.in" password="MTS" authtype="3" type="default,supl" />
<apn carrier="Vodafone" mcc="404" mnc="01" apn="portalnmms" proxy="10.10.1.100" port="9401" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="default,supl,mms" />
<apn carrier="Vodafone IN MMS" mcc="404" mnc="01" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
<apn carrier="Vodafone IN" mcc="404" mnc="01" apn="www" type="default,supl" />
<apn carrier="RCOM" mcc="404" mnc="13" apn="rcomnet" type="default,supl" />
<apn carrier="Airtel GPRS" mcc="404" mnc="2" apn="airtelgprs.com" type="default,supl" />
<apn carrier="Airtel Live" mcc="404" mnc="2" apn="airtelfun.com" proxy="100.1.200.99" port="8080" type="default,supl" />
<apn carrier="Airtel MMS" mcc="404" mnc="2" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" authtype="1" type="mms" />
<apn carrier="Airtel GPRS" mcc="404" mnc="3" apn="airtelgprs.com" type="default,supl" />
<apn carrier="Airtel Live" mcc="404" mnc="3" apn="airtelfun.com" proxy="100.1.200.99" port="8080" type="default,supl" />
<apn carrier="Airtel MMS" mcc="404" mnc="3" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" authtype="1" type="mms" />
<apn carrier="IDEA Internet" mcc="404" mnc="4" apn="internet" type="default,supl" />
<apn carrier="IDEA Wap" mcc="404" mnc="4" apn="imis" proxy="10.4.42.15" port="8080" type="default,supl" />
<apn carrier="IDEA MMS" mcc="404" mnc="4" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
<apn carrier="IDEA Mobile" mcc="404" mnc="4" apn="mobile" type="default,supl" />
<apn carrier="Vodafone" mcc="404" mnc="5" apn="portalnmms" proxy="10.10.1.100" port="9401" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="default,supl,mms" />
<apn carrier="Vodafone IN MMS" mcc="404" mnc="5" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
<apn carrier="Vodafone IN" mcc="404" mnc="5" apn="www" type="default,supl" />
<apn carrier="Airtel GPRS" mcc="404" mnc="6" apn="airtelgprs.com" type="default,supl" />
<apn carrier="Airtel Live" mcc="404" mnc="6" apn="airtelfun.com" proxy="100.1.200.99" port="8080" type="default,supl" />
<apn carrier="Airtel MMS" mcc="404" mnc="6" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" />
<apn carrier="IDEA Internet" mcc="404" mnc="7" apn="internet" type="default,supl" />
<apn carrier="IDEA Wap" mcc="404" mnc="7" apn="imis" proxy="10.4.42.15" port="8080" type="default,supl" />
<apn carrier="IDEA MMS" mcc="404" mnc="7" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
<apn carrier="IDEA Mobile" mcc="404" mnc="7" apn="mobile" type="default,supl" />
<apn carrier="NetConnect" mcc="404" mnc="9" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="404" mnc="9" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="404" mnc="9" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance RTel MMS" mcc="404" mnc="9" apn="MMS" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms" />
<apn carrier="Reliance RTel" mcc="404" mnc="9" apn="SMARTNET" type="default,supl" />
<apn carrier="Reliance WAP" mcc="404" mnc="9" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Airtel GPRS" mcc="404" mnc="02" apn="airtelgprs.com" type="default,supl" />
<apn carrier="Airtel Live" mcc="404" mnc="02" apn="airtelfun.com" proxy="100.1.200.99" port="8080" type="default,supl" />
<apn carrier="Airtel MMS" mcc="404" mnc="02" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" authtype="1" type="mms" />
<apn carrier="Airtel GPRS" mcc="404" mnc="03" apn="airtelgprs.com" type="default,supl" />
<apn carrier="Airtel Live" mcc="404" mnc="03" apn="airtelfun.com" proxy="100.1.200.99" port="8080" type="default,supl" />
<apn carrier="Airtel MMS" mcc="404" mnc="03" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" authtype="1" type="mms" />
<apn carrier="IDEA Internet" mcc="404" mnc="04" apn="internet" type="default,supl" />
<apn carrier="IDEA Wap" mcc="404" mnc="04" apn="imis" proxy="10.4.42.15" port="8080" type="default,supl" />
<apn carrier="IDEA MMS" mcc="404" mnc="04" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
<apn carrier="IDEA Mobile" mcc="404" mnc="04" apn="mobile" type="default,supl" />
<apn carrier="Vodafone" mcc="404" mnc="05" apn="portalnmms" proxy="10.10.1.100" port="9401" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="default,supl,mms" />
<apn carrier="Vodafone IN MMS" mcc="404" mnc="05" apn="portalnmms" mmsc="http://mms1.live.vodafone.in/mms/" mmsproxy="10.10.1.100" mmsport="9401" type="mms" />
<apn carrier="Vodafone IN" mcc="404" mnc="05" apn="www" type="default,supl" />
<apn carrier="Airtel GPRS" mcc="404" mnc="06" apn="airtelgprs.com" type="default,supl" />
<apn carrier="Airtel Live" mcc="404" mnc="06" apn="airtelfun.com" proxy="100.1.200.99" port="8080" type="default,supl" />
<apn carrier="Airtel MMS" mcc="404" mnc="06" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" />
<apn carrier="IDEA Internet" mcc="404" mnc="07" apn="internet" type="default,supl" />
<apn carrier="IDEA Wap" mcc="404" mnc="07" apn="imis" proxy="10.4.42.15" port="8080" type="default,supl" />
<apn carrier="IDEA MMS" mcc="404" mnc="07" apn="mmsc" mmsc="http://10.4.42.21:8002" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
<apn carrier="IDEA Mobile" mcc="404" mnc="07" apn="mobile" type="default,supl" />
<apn carrier="NetConnect" mcc="404" mnc="09" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="404" mnc="09" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Reliance Jio" apn="jionet" type="default,supl" roaming_protocol="IPV4V6" />
<apn carrier="Jio Internet" mcc="405" mnc="840" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="840" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="854" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="854" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="855" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="855" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="856" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="856" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="857" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="857" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="858" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="858" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="859" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="859" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="860" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="860" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="861" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="861" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="862" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="862" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="863" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="863" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="864" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="864" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="865" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="865" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="866" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="866" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="867" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="867" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="868" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="868" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="869" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="869" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="870" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="870" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="871" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="871" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="872" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="872" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="873" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="873" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Jio Internet" mcc="405" mnc="874" apn="jionet" type="default,supl" carrier_enabled="true" protocol="IPV4V6" roaming_protocol="IPV4V6" />
<apn carrier="IMS" mcc="405" mnc="874" apn="ims" type="ims" protocol="IPV4V6" roaming_protocol="IP" />
<apn carrier="Smart MMS" mcc="404" mnc="09" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance RTel MMS" mcc="404" mnc="09" apn="MMS" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.7" mmsport="8080" type="mms" />
<apn carrier="Reliance RTel" mcc="404" mnc="09" apn="SMARTNET" type="default,supl" />
<apn carrier="Reliance WAP" mcc="404" mnc="09" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Airtel GPRS" mcc="404" mnc="10" apn="airtelgprs.com" type="default,supl" />
<apn carrier="Airtel Live" mcc="404" mnc="10" apn="airtelfun.com" proxy="100.1.200.99" port="8080" type="default,supl" />
<apn carrier="Airtel MMS" mcc="404" mnc="10" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" />
@ -2244,10 +2276,10 @@
<apn carrier="Airtel GPRS" mcc="404" mnc="98" apn="airtelgprs.com" type="default,supl" />
<apn carrier="Airtel Live" mcc="404" mnc="98" apn="airtelfun.com" proxy="100.1.200.99" port="8080" type="default,supl" />
<apn carrier="Airtel MMS" mcc="404" mnc="98" apn="airtelmms.com" mmsc="http://100.1.201.171:10021/mmsc" mmsproxy="100.1.201.172" mmsport="8799" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="1" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="1" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="1" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="1" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="01" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="01" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="01" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="01" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="TATA DOCOMO INTERNET" mcc="405" mnc="25" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
<apn carrier="TATA GPRS" mcc="405" mnc="25" apn="Tata.Docomo.Dive.in" proxy="10.124.94.7" port="8080" type="default,supl" />
<apn carrier="Tata MMS" mcc="405" mnc="25" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
@ -2276,10 +2308,10 @@
<apn carrier="Tata Docomo 3G" mcc="405" mnc="29" apn="tatadocomo3g" type="default,supl" />
<apn carrier="TA TA DoCoMo" mcc="405" mnc="29" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
<apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="29" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="3" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="3" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="3" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="3" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://mms.rcom.co.in/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="03" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="03" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="03" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="03" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://mms.rcom.co.in/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="TATA DOCOMO INTERNET" mcc="405" mnc="30" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
<apn carrier="TATA GPRS" mcc="405" mnc="30" apn="Tata.Docomo.Dive.in" proxy="10.124.94.7" port="8080" type="default,supl" />
<apn carrier="Tata MMS" mcc="405" mnc="30" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
@ -2340,9 +2372,9 @@
<apn carrier="Tata Docomo 3G" mcc="405" mnc="39" apn="tatadocomo3g" type="default,supl" />
<apn carrier="TA TA DoCoMo" mcc="405" mnc="39" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
<apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="39" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="4" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="4" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="4" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="04" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="04" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="04" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="TATA DOCOMO INTERNET" mcc="405" mnc="40" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
<apn carrier="TATA GPRS" mcc="405" mnc="40" apn="Tata.Docomo.Dive.in" proxy="10.124.94.7" port="8080" type="default,supl" />
<apn carrier="Tata MMS" mcc="405" mnc="40" apn="Tata.Docomo.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
@ -2391,29 +2423,29 @@
<apn carrier="Tata Docomo 3G" mcc="405" mnc="47" apn="tatadocomo3g" type="default,supl" />
<apn carrier="TA TA DoCoMo" mcc="405" mnc="47" apn="TATA.DOCOMO.INTERNET" type="default,supl" />
<apn carrier="TA TA DoCoMo MMS" mcc="405" mnc="47" apn="TATA.DOCOMO.MMS" mmsc="http://mmsc/" mmsproxy="10.124.26.94" mmsport="8799" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="5" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="5" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="5" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="5" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://mms.rcom.co.in/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="6" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="6" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="6" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="6" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://mms.rcom.co.in/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="7" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="7" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="7" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="7" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://mms.rcom.co.in/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="8" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="8" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="8" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="8" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://mms.rcom.co.in/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="05" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="05" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="05" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="05" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://mms.rcom.co.in/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="06" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="06" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="06" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="06" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://mms.rcom.co.in/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="07" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="07" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="07" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="07" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://mms.rcom.co.in/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="08" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="08" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="08" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="08" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://mms.rcom.co.in/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="MTS WAP" mcc="405" mnc="89" apn="WAP" user="wap@wap.mtsindia.in" password="MTS" authtype="3" type="default,supl" />
<apn carrier="MTS MMS" mcc="405" mnc="89" apn="MMS" user="mms@mms.mtsindia.in" password="MTS" authtype="3" type="mms" />
<apn carrier="MTS MODEM" mcc="405" mnc="89" apn="Modem" user="internet@internet.mtsindia.in" password="MTS" authtype="3" type="default,supl" />
<apn carrier="NetConnect" mcc="405" mnc="9" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="9" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="9" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="9" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://mms.rcom.co.in/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="09" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="09" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="09" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="Reliance MMS" mcc="405" mnc="09" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://mms.rcom.co.in/mms" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
<apn carrier="NetConnect" mcc="405" mnc="10" apn="rcomnet" type="default,supl" />
<apn carrier="Reliance GPRS" mcc="405" mnc="10" apn="rcomwap" proxy="10.239.221.5" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="405" mnc="10" apn="rcommms" proxy="10.239.221.5" port="8080" mmsc="http://10.239.221.47/mms/" mmsproxy="10.239.221.5" mmsport="8080" type="mms" />
@ -2667,68 +2699,6 @@
<apn carrier="IDEA Mobile" mcc="405" mnc="853" apn="mobile" type="default,supl" />
<apn carrier="IDEA" mcc="405" mnc="853" apn="internet" type="default,supl" />
<apn carrier="IDEA MMS" mcc="405" mnc="853" apn="mmsc" mmsc="http://10.4.42.21:8002/" mmsproxy="10.4.42.15" mmsport="8080" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="854" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="854" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="854" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="855" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="855" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="855" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="856" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="856" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="856" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="857" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="857" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="857" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="858" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="858" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="858" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="859" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="859" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="859" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="860" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="860" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="860" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="861" apn="www" type="default,supl" />
<apn carrier="Loop Internet" mcc="405" mnc="862" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="862" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="862" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="863" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="863" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="863" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="864" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="864" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="864" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="865" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="865" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="865" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="866" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="866" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="866" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="867" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="867" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="867" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="868" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="868" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="868" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="869" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="869" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="869" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="870" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="870" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="870" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="LOOP GPRS" mcc="405" mnc="871" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="871" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="871" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="871" apn="www" type="default,supl" />
<apn carrier="Loop Internet" mcc="405" mnc="872" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="872" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="872" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="873" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="873" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="873" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Loop Internet" mcc="405" mnc="874" apn="www" type="default,supl" />
<apn carrier="LOOP WAP" mcc="405" mnc="874" apn="mizone" proxy="10.0.0.10" port="9401" user="Mobile phone number" password="bplmmsc" authtype="1" type="default,supl" />
<apn carrier="BPL MMS" mcc="405" mnc="874" apn="mizone" user="Mobile phone number" password="bplmmsc" mmsc="http://mms.bplmobile.com:8080" mmsproxy="10.0.0.10" mmsport="8080" authtype="1" type="mms" />
<apn carrier="Uninor" mcc="405" mnc="875" apn="Uninor" proxy="10.58.10.58" port="8080" type="default,supl" />
<apn carrier="Uninor Internet" mcc="405" mnc="875" apn="Uninor" type="default,supl" />
<apn carrier="Uninor" mcc="405" mnc="876" apn="Uninor" proxy="10.58.10.58" port="8080" type="default,supl" />
@ -2910,14 +2880,12 @@
<apn carrier="Golan Telecom" mcc="425" mnc="08" apn="internet.golantelecom.net.il" authtype="0" type="default,supl" />
<apn carrier="Golan Telecom MMS" mcc="425" mnc="08" apn="mms.golantelecom.net.il" mmsc="http://mmsc.golantelecom.co.il" mmsproxy="10.224.228.81" mmsport="80" authtype="0" type="mms" />
<apn carrier="YouPhone 3G" mcc="425" mnc="14" apn="data.youphone.co.il" mmsc="http://192.168.220.15/servlets/mms" mmsport="80" type="default,supl,mms" />
<apn carrier="Internet" mcc="426" mnc="01" apn="internet.batelco.com" type="default,supl" />
<apn carrier="batelco WAP" mcc="426" mnc="01" apn="wap.batelco.com" proxy="192.168.1.2" port="80" user="wap" password="wap" type="default,supl" />
<apn carrier="batelco MMS" mcc="426" mnc="01" apn="mms.batelco.com" proxy="" port="" mmsproxy="192.168.1.2" mmsport="80" mmsc="http://192.168.36.10/servlets/mms" type="mms" />
<apn carrier="BATELCO BH" mcc="426" mnc="01" apn="internet.batelco.com" user="internet" password="internet" type="default,supl" />
<apn carrier="BATELCO BH MMS" mcc="426" mnc="01" apn="mms.batelco.com" user="wap" password="wap" mmsc="http://192.168.36.10/servlets/mms" mmsproxy="192.168.1.2" mmsport="80" type="mms" />
<apn carrier="Zain Wap" mcc="426" mnc="02" apn="wap" proxy="172.18.85.34" port="8080" mmsc="" user="wap" password="wap" type="default,supl" />
<apn carrier="Zain Internet" mcc="426" mnc="02" apn="internet" user="internet" password="internet" type="default,supl" />
<apn carrier="Zain MMS" mcc="426" mnc="02" apn="mms" proxy="" port="" mmsproxy="172.18.85.34" mmsport="8080" mmsc="http:// 172.18.83.129" user="mms" password="mms" type="mms" />
<apn carrier="Batelco Internet" mcc="426" mnc="01" apn="internet.batelco.com" type="default,supl" />
<apn carrier="Batelco WAP" mcc="426" mnc="01" apn="wap.batelco.com" user="wap" password="wap" authtype="0" proxy="192.168.1.2" port="80" type="default,supl" />
<apn carrier="Batelco MMS" mcc="426" mnc="01" apn="mms.batelco.com" user="mms" password="mms" authtype="0" mmsc="http://192.168.36.10/servlets/mms" mmsproxy="192.168.1.2" mmsport="80" type="mms" />
<apn carrier="Zain BH WAP" mcc="426" mnc="02" apn="wap" user="wap" password="wap" authtype="0" proxy="172.18.85.33" port="80" type="default,supl" />
<apn carrier="Zain BH Internet" mcc="426" mnc="02" apn="internet" user="internet" password="internet" authtype="0" type="default,supl" />
<apn carrier="Zain BH MMS" mcc="426" mnc="02" apn="mms" user="mms" password="mms" authtype="0" mmsc="http://172.18.83.129:80/" mmsproxy="172.18.85.34" mmsport="80" type="mms" />
<apn carrier="MTC Vodafone BH" mcc="426" mnc="02" apn="internet" user="internet" password="internet" type="default,supl" />
<apn carrier="MTC Vodafone BH MMS" mcc="426" mnc="02" apn="mms" user="mms" password="mms" mmsc="http://172.18.83.129" mmsproxy="172.18.85.34" mmsport="9201" type="mms" />
<apn carrier="VIVA GPRS" mcc="426" mnc="04" apn="viva.bh" type="default,supl" />
@ -2947,7 +2915,7 @@
<apn carrier="Ncell WAP" mcc="429" mnc="02" apn="web" proxy="192.168.19.15" port="8080" type="default,supl" />
<apn carrier="MCI-GPRS" mcc="432" mnc="11" apn="mcinet" proxy="192.168.194.73" port="8080" type="default,supl" />
<apn carrier="MCI-MMS" mcc="432" mnc="11" apn="mcinet" mmsproxy="192.168.193.134" mmsport="38090" mmsc="http://mci.ir" type="mms" />
<apn carrier="Irancell-GPRS" mcc="432" mnc="35" apn="mtnirancell" proxy="10.131.26.138" port="8080" type="default,supl" />
<apn carrier="Irancell-Internet" mcc="432" mnc="35" apn="mtnirancell" type="default,supl" />
<apn carrier="Irancell-MMS" mcc="432" mnc="35" apn="mtnirancell" mmsproxy="10.131.26.138" mmsport="8080" mmsc="http://mms:8002" type="mms" />
<apn carrier="Beeline UZ" mcc="434" mnc="04" apn="internet.beeline.uz" user="beeline" password="beeline" type="default,supl" />
<apn carrier="Beeline UZ MMS" mcc="434" mnc="04" apn="mms.beeline.uz" user="beeline" password="beeline" mmsc="http://mms" mmsproxy="172.30.30.166" mmsport="8080" type="mms" />
@ -3049,9 +3017,9 @@
<apn carrier="Beeline MMS" mcc="452" mnc="07" apn="mms" proxy="" port="" mmsproxy="10.16.70.199" mmsport="8080" mmsc="http://mms" user="mms" password="mms" authtype="1" type="mms" />
<apn carrier="BeeLine VN" mcc="452" mnc="07" apn="internet" type="default,supl" />
<apn carrier="Beeline VN MMS" mcc="452" mnc="07" apn="MMS" user="mms" password="mms" mmsc="http://mms" mmsproxy="10.16.70.199" mmsport="8080" type="mms" />
<apn carrier="VIETNAMOBILE MMS" mcc="452" mnc="5" apn="mms" proxy="" port="" user="" password="" mmsc="http://10.10.128.58/servlets/mms" mmsproxy="10.10.128.44" mmsport="8080" type="mms" />
<apn carrier="VIETNAMOBILE" mcc="452" mnc="5" apn="wap" proxy="10.10.128.44" port="8080" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Beeline VN MMS" mcc="452" mnc="7" apn="MMS" proxy="" port="" user="mms" password="mms" mmsc="http://mms" mmsproxy="10.16.70.199" mmsport="8080" type="mms" />
<apn carrier="VIETNAMOBILE MMS" mcc="452" mnc="05" apn="mms" proxy="" port="" user="" password="" mmsc="http://10.10.128.58/servlets/mms" mmsproxy="10.10.128.44" mmsport="8080" type="mms" />
<apn carrier="VIETNAMOBILE" mcc="452" mnc="05" apn="wap" proxy="10.10.128.44" port="8080" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Beeline VN MMS" mcc="452" mnc="07" apn="MMS" proxy="" port="" user="mms" password="mms" mmsc="http://mms" mmsproxy="10.16.70.199" mmsport="8080" type="mms" />
<apn carrier="csl" mcc="454" mnc="00" apn="mobile" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,mms,hipri" authtype="3" mvno_match_data="01020000" mvno_type="gid" />
<apn carrier="csl Tethering" mcc="454" mnc="00" apn="lte.internet" type="dun" mvno_match_data="01020000" mvno_type="gid" />
<apn carrier="csl" mcc="454" mnc="00" apn="mobile" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" authtype="3" type="default,mms,hipri" />
@ -3093,6 +3061,7 @@
<apn carrier="SmarTone" mcc="454" mnc="06" apn="SmarTone" mmsc="http://mms.smartone.com/server" mmsproxy="10.9.9.9" mmsport="8080" authtype="3" type="default,supl,mms" />
<apn carrier="3gnet" mcc="454" mnc="07" apn="3gnet" type="default,supl" />
<apn carrier="3gwap" mcc="454" mnc="07" apn="3gwap" proxy="10.0.0.172" port="80" type="default,supl" />
<apn carrier="Truphone" mcc="454" mnc="08" apn="truphone.com" type="default,dun" />
<apn carrier="SCT" mcc="454" mnc="09" apn="cmnet" type="default" />
<apn carrier="csl" mcc="454" mnc="10" apn="hkcsl" mmsc="http://192.168.58.171:8002" mmsproxy="192.168.59.51" mmsport="8080" type="default,mms,hipri" authtype="3" />
<apn carrier="csl Tethering" mcc="454" mnc="10" apn="internet" type="dun" />
@ -3314,6 +3283,7 @@
<apn carrier="Apex Telecom" mcc="505" mnc="02" apn="splns357" user="" password="" mmsc="" type="default,supl" />
<apn carrier="Boost MMS" mcc="505" mnc="02" apn="mms" user="" password="" proxy="61.88.190.10" port="8070" mmsc="http://mmsc.optus.com.au:8002/" mmsproxy="61.88.190.10" mmsport="8070" type="mms" authtype="3"/>
<apn carrier="Boost Mobile" mcc="505" mnc="02" apn="yesinternet" user="" password="" proxy="" port="" mmsc="" type="default,supl" authtype="3"/>
<apn carrier="Truphone" mcc="505" mnc="02" apn="truphone.com" type="default,dun" mvno_match_data="50502100" mvno_type="imsi" />
<apn carrier="Vodafone Live!" mcc="505" mnc="03" apn="live.vodafone.com" proxy="10.202.2.60" port="8080" mmsc="" user="" password="" type="default,supl" />
<apn carrier="Vodafone PXT" mcc="505" mnc="03" apn="live.vodafone.com" proxy="" port="" mmsproxy="10.202.2.60" mmsport="8080" mmsc="http://pxt.vodafone.net.au/pxtsend" user="" password="" type="mms" />
<apn carrier="Vodafone AU" mcc="505" mnc="03" apn="live.vodafone.com" user="*" password="*" server="*" mmsc="http://pxt.vodafone.net.au/pxtsend" mmsproxy="10.202.2.60" mmsport="8080" type="mms,default,supl" />
@ -3325,6 +3295,7 @@
<apn carrier="3Internet" mcc="505" mnc="12" apn="3netaccess" type="default,supl" />
<apn carrier="3" mcc="505" mnc="12" apn="3services" mmsc="http://mmsc.three.net.au:10021/mmsc" mmsproxy="10.176.57.25" mmsport="8799" type="default,supl,mms" />
<apn carrier="Lycamobile AU" mcc="505" mnc="19" apn="data.lycamobile.com.au" user="lmau" password="plus" type="default,supl" />
<apn carrier="Truphone" mcc="505" mnc="38" apn="truphone.com" type="default,supl" />
<apn carrier="Telstra MMS" mcc="505" mnc="71" apn="Telstra.mms" mmsc="http://mmsc.telstra.com:8002" mmsproxy="10.1.1.180" mmsport="80" type="mms" />
<apn carrier="Telstra Internet" mcc="505" mnc="71" apn="Telstra.wap" type="default,supl" />
<apn carrier="Telstra MMS" mcc="505" mnc="72" apn="Telstra.mms" mmsc="http://mmsc.telstra.com:8002" mmsproxy="10.1.1.180" mmsport="80" type="mms" />
@ -3346,8 +3317,8 @@
<apn carrier="Smartfren4G" mcc="510" mnc="09" apn="Smartfren4G" user="smartfren" password="smartfren" authtype="3" type="default,supl" protocol="IPV4V6" />
<apn carrier="Smartfren MMS" mcc="510" mnc="09" apn="smartfren" user="smartfren" password="smartfren" mmsc="http://10.17.93.103:8080" mmsproxy="10.17.27.250" mmsport="8080" authtype="3" type="mms" protocol="IPV4V6" />
<apn carrier="Smartfren IMS" mcc="510" mnc="09" apn="IMS" type="ims" />
<apn carrier="AXIS" mcc="510" mnc="8" apn="AXIS" proxy="" port="" user="axis" password="123456" mmsc="" type="default,supl" />
<apn carrier="AXIS MMS" mcc="510" mnc="8" apn="AXISmms" proxy="" port="" user="axis" password="123456" mmsc="http://mmsc.AXIS" mmsproxy="10.8.3.8" mmsport="8080" type="mms" />
<apn carrier="AXIS" mcc="510" mnc="08" apn="AXIS" proxy="" port="" user="axis" password="123456" mmsc="" type="default,supl" />
<apn carrier="AXIS MMS" mcc="510" mnc="08" apn="AXISmms" proxy="" port="" user="axis" password="123456" mmsc="http://mmsc.AXIS" mmsproxy="10.8.3.8" mmsport="8080" type="mms" />
<apn carrier="TSEL BROADBAND" mcc="510" mnc="10" apn="internet" proxy="" port="" user="wap" password="wap123" authtype="1" type="default,supl" />
<apn carrier="TSEL TIMEBASED" mcc="510" mnc="10" apn="flash" proxy="" port="" user="wap" password="wap123" authtype="1" type="default,supl" />
<apn carrier="TSEL MMS" mcc="510" mnc="10" apn="mms" mmsproxy="10.1.89.150" mmsport="8000" mmsc="http://mms.telkomsel.com" user="wap" password="wap123" authtype="1" type="mms" />
@ -3374,9 +3345,15 @@
<apn carrier="myGlobe Connect" mcc="515" mnc="02" apn="www.globe.com.ph" proxy="203.177.042.214" port="8080" type="default,supl" />
<apn carrier="MyGlobe Stream" mcc="515" mnc="02" apn="real.globe.com.ph" type="default,supl" />
<apn carrier="myGlobe MMS" mcc="515" mnc="02" apn="mms.globe.com.ph" mmsc="http://192.40.100.22:10021/mmsc" mmsproxy="203.177.42.214" mmsport="8080" type="mms" />
<apn carrier="Smart GPRS" mcc="515" mnc="03" apn="Smart1" proxy="10.102.61.46" port="8080" type="default,supl" />
<apn carrier="Smart Internet" mcc="515" mnc="03" apn="internet" proxy="10.102.61.46" port="8080" type="default,supl" />
<apn carrier="Smart MMS" mcc="515" mnc="03" apn="mms" mmsc="http://10.102.61.238:8002" mmsproxy="10.102.61.46" mmsport="8080" type="mms" />
<apn carrier="SMART Internet postpaid" mcc="515" mnc="03" apn="internet" authtype="1" type="default" />
<apn carrier="SMART HTTP postpaid" mcc="515" mnc="03" apn="smart1" proxy="10.102.61.46" port="9201" user="smartwap" password="smartwap" authtype="1" type="default" />
<apn carrier="SMART(3G) Internet postpaid" mcc="515" mnc="03" apn="internet" type="default,supl"/>
<apn carrier="SMART(3G) MMS postpaid" mcc="515" mnc="03" apn="mms" mmsc="http://10.102.61.238:8002" mmsproxy="10.102.61.46" mmsport="8080" type="mms" />
<apn carrier="SMART(3G) Internet prepaid" mcc="515" mnc="03" apn="internet" type="default,supl" />
<apn carrier="SMART(3G) HTTP prepaid" mcc="515" mnc="03" apn="smart1" proxy="10.102.61.46" port="80" user="smartwap" password="smartwap" authtype="1" type="default" />
<apn carrier="SMART(3G) MMS prepaid" mcc="515" mnc="03" apn="mms" user="smartwap" password="smartwap" mmsc="http://10.102.61.238:8002" mmsproxy="10.102.61.46" mmsport="8080" authtype="1" type="mms" />
<apn carrier="SMART MMS postpaid" mcc="515" mnc="03" apn="mms" user="smartwap" password="smartwap" mmsc="http://10.102.61.238:8002" mmsproxy="10.102.61.46" mmsport="9201" authtype="1" type="mms" />
<apn carrier="SMART(3G) HTTP postpaid" mcc="515" mnc="03" apn="smart1" proxy="10.102.61.46" port="9201" authtype="1" type="default" />
<apn carrier="Sun Internet" mcc="515" mnc="05" apn="minternet" type="default,supl" />
<apn carrier="Sun Streaming" mcc="515" mnc="05" apn="minternet" type="default,supl" />
<apn carrier="SUN WAP GPRS" mcc="515" mnc="05" apn="wap" proxy="202.138.159.078" port="8080" type="default,supl" />
@ -3629,7 +3606,6 @@
<apn carrier="Vodacom ZA" mcc="655" mnc="01" apn="internet" type="default,supl" />
<apn carrier="Vodacom ZA MMS" mcc="655" mnc="01" apn="mms.vodacom.net" mmsc="http://mmsc.vodacom4me.co.za/" mmsproxy="196.6.128.13" mmsport="8080" type="mms" />
<apn carrier="LTE.Vodacom" mcc="655" mnc="01" apn="lte.vodacom.za" type="default,supl" />
<apn carrier="Vlive!" mcc="655" mnc="01" apn="vlive" proxy="196.6.128.12" port="8080" type="default,supl" />
<apn carrier="8ta internet" mcc="655" mnc="02" apn="internet" type="default,supl" />
<apn carrier="8ta mms" mcc="655" mnc="02" apn="mms" mmsc="http://mms.8ta.com:38090/was" mmsproxy="41.151.254.162" mmsport="8080" type="mms" />
<apn carrier="CELL C INTERNET" mcc="655" mnc="07" apn="internet" proxy="" port="8080" mmsproxy="196.31.116.250" mmsport="8080" mmsc="http://mms.cmobile.co.za" type="*" />
@ -3826,7 +3802,7 @@
<apn carrier="Internet Movil" mcc="730" mnc="01" apn="imovil.entelpcs.cl" user="entelpcs" password="entelpcs" type="default,supl" />
<apn carrier="Entel PCS" mcc="730" mnc="01" apn="bam.entelpcs.cl" user="entelpcs" password="entelpcs" proxy="10.99.0.10" port="8080" type="default,supl" />
<apn carrier="Entel MMS" mcc="730" mnc="01" apn="mms.entelpcs.cl" proxy="" port="" mmsproxy="10.99.0.10" mmsport="8080" mmsc="http://mmsc.entelpcs.cl" user="entelpcs" password="entelmms" type="mms" />
<apn carrier="APLICACIONES" mcc="730" mnc="02" apn="wap.tmovil.cl" user="wap" password="wap" type="default,supl" />
<apn carrier="Movistar INTERNET" mcc="730" mnc="02" apn="wap.tmovil.cl" user="wap" password="wap" type="default,supl" />
<apn carrier="Movistar MMS" mcc="730" mnc="02" apn="mms.tmovil.cl" proxy="" port="" mmsproxy="172.17.8.10" mmsport="8080" mmsc="http://mms.movistar.cl" user="mms" password="mms" type="mms" />
<apn carrier="Movistar CL" mcc="730" mnc="02" apn="web.tmovil.cl" user="web" password="web" type="default,supl" />
<apn carrier="Movistar CL MMS" mcc="730" mnc="02" apn="mms.tmovil.cl" user="mms" password="mms" mmsc="http://mms.tmovil.cl" mmsproxy="172.017.008.011" mmsport="9201" type="mms" />

View File

@ -29,6 +29,10 @@ on post-fs-data
# Run sysinit
start sysinit
# Change permissions on fsck log so it can be added to the dropbox
chown root log /dev/fscklogs/log
chmod 0640 /dev/fscklogs/log
on boot
# interactive governor
chown system system /sys/devices/system/cpu/cpufreq/interactive/timer_rate
@ -102,6 +106,18 @@ on boot
chmod 0664 /sys/block/mmcblk0/queue/scheduler
restorecon /sys/block/mmcblk0/queue/scheduler
chown system system /sys/block/sda/queue/scheduler
chmod 0664 /sys/block/sda/queue/scheduler
restorecon /sys/block/sda/queue/scheduler
chown system system /sys/block/sde/queue/scheduler
chmod 0664 /sys/block/sde/queue/scheduler
restorecon /sys/block/sde/queue/scheduler
chown system system /sys/block/dm-0/queue/scheduler
chmod 0664 /sys/block/dm-0/queue/scheduler
restorecon /sys/block/dm-0/queue/scheduler
chown system system /dev/cpuctl/cpu.notify_on_migrate
chmod 0664 /dev/cpuctl/cpu.notify_on_migrate
@ -114,6 +130,12 @@ on boot
chmod 0660 /sys/devices/virtual/graphics/fb0/rgb
chown system system /sys/devices/virtual/graphics/fb0/sre
chmod 0660 /sys/devices/virtual/graphics/fb0/sre
chown system system /sys/devices/virtual/graphics/fb0/color_enhance
chmod 0660 /sys/devices/virtual/graphics/fb0/color_enhance
# Vibrator intensity control
chown system system /sys/class/timed_output/vibrator/vtg_level
chmod 0644 /sys/class/timed_output/vibrator/vtg_level
# Define TCP delayed ack settings for WiFi & LTE
chown system system /sys/kernel/ipv4/tcp_delack_seg
@ -165,6 +187,10 @@ on property:persist.radio.noril=1
# Configure IO scheduler
on property:sys.io.scheduler=*
write /sys/block/mmcblk0/queue/scheduler ${sys.io.scheduler}
write /sys/block/mmcblk1/queue/scheduler ${sys.io.scheduler}
write /sys/block/sda/queue/scheduler ${sys.io.scheduler}
write /sys/block/sde/queue/scheduler ${sys.io.scheduler}
write /sys/block/dm-0/queue/scheduler ${sys.io.scheduler}
on property:persist.sys.io.scheduler=*
setprop sys.io.scheduler ${persist.sys.io.scheduler}
@ -172,8 +198,16 @@ on property:persist.sys.io.scheduler=*
# Set slice_idle to 0 for CFQ
on property:sys.io.scheduler=cfq
write /sys/block/mmcblk0/queue/iosched/slice_idle 0
write /sys/block/mmcblk1/queue/iosched/slice_idle 0
write /sys/block/sda/queue/iosched/slice_idle 0
write /sys/block/sde/queue/iosched/slice_idle 0
write /sys/block/dm-0/queue/iosched/slice_idle 0
# Set slice_idle to 0 for BFQ
on property:sys.io.scheduler=bfq
write /sys/block/mmcblk0/queue/iosched/slice_idle 0
write /sys/block/mmcblk1/queue/iosched/slice_idle 0
write /sys/block/sda/queue/iosched/slice_idle 0
write /sys/block/sde/queue/iosched/slice_idle 0
write /sys/block/dm-0/queue/iosched/slice_idle 0

File diff suppressed because it is too large Load Diff

View File

@ -4,5 +4,5 @@ allow appdomain sdcard_posix:dir r_dir_perms;
allow appdomain sdcard_posix:file rw_file_perms;
# Themed resources (i.e. composed icons)
allow appdomain theme_data_file:dir r_dir_perms;
allow appdomain theme_data_file:file r_file_perms;
allow appdomain themeservice_app_data_file:dir r_dir_perms;
allow appdomain themeservice_app_data_file:file r_file_perms;

View File

@ -1,5 +1,5 @@
# Themed resources (bootanimation)
allow bootanim theme_data_file:dir search;
allow bootanim theme_data_file:file r_file_perms;
allow bootanim themeservice_app_data_file:dir search;
allow bootanim themeservice_app_data_file:file r_file_perms;
allow bootanim self:process execmem;
allow bootanim ashmem_device:chr_file execute;

View File

@ -1 +1 @@
allow drmserver theme_data_file:file r_file_perms;
allow drmserver themeservice_app_data_file:file r_file_perms;

View File

@ -4,7 +4,7 @@ allow file_type rootfs:filesystem associate;
type auditd_log, file_type, data_file_type;
# Themes
type theme_data_file, file_type, data_file_type;
type themeservice_app_data_file, file_type, data_file_type;
# Performance settings
type sysfs_devices_system_iosched, file_type, sysfs_type;

View File

@ -7,7 +7,7 @@
/data/misc/audit(/.*)? u:object_r:auditd_log:s0
# Themes
/data/system/theme(/.*)? u:object_r:theme_data_file:s0
/data/system/theme(/.*)? u:object_r:themeservice_app_data_file:s0
/system/bin/sysinit u:object_r:sysinit_exec:s0
@ -24,8 +24,8 @@
#############################
# performance-related sysfs files (CM)
/sys/devices/system/cpu.*/cpufreq(/.*)? -- u:object_r:sysfs_devices_system_cpu:s0
/sys/block/mmcblk.*/queue/scheduler -- u:object_r:sysfs_devices_system_iosched:s0
/sys/devices/system/cpu.*/cpufreq(/.*)? u:object_r:sysfs_devices_system_cpu:s0
/sys/block/mmcblk.*/queue/scheduler u:object_r:sysfs_devices_system_iosched:s0
/data/hostapd(/.*)? u:object_r:wifi_data_file:s0
@ -47,7 +47,11 @@
/sys/devices/virtual/graphics/fb0/cabc u:object_r:livedisplay_sysfs:s0
/sys/devices/virtual/graphics/fb0/rgb u:object_r:livedisplay_sysfs:s0
/sys/devices/virtual/graphics/fb0/sre u:object_r:livedisplay_sysfs:s0
/sys/devices/virtual/graphics/fb0/color_enhance u:object_r:livedisplay_sysfs:s0
# fsck
/system/bin/fsck\.ntfs u:object_r:fsck_exec:s0
/system/bin/fsck\.exfat u:object_r:fsck_exec:s0
# bash
/system/xbin/bash u:object_r:shell_exec:s0

View File

@ -1,3 +1,8 @@
# Allow querying of asec size on SD card
allow installd sdcard_external:dir { search };
allow installd sdcard_external:file { getattr };
# Required for installd to create theme service's /data/data directory
allow installd themeservice_app_data_file:dir { create_dir_perms relabelfrom relabelto };
allow installd themeservice_app_data_file:lnk_file { create_file_perms relabelfrom relabelto };
allow installd themeservice_app_data_file:{ file sock_file fifo_file } { getattr unlink rename relabelfrom relabelto setattr };

3
sepolicy/kernel.te Normal file
View File

@ -0,0 +1,3 @@
# used by sdcardfs to read package list
allow kernel system_data_file:file open;
allow kernel media_rw_data_file:file rw_file_perms;

View File

@ -1,3 +1,6 @@
# Themed resources (i.e. composed icons)
allow mediaserver theme_data_file:dir r_dir_perms;
allow mediaserver theme_data_file:file r_file_perms;
allow mediaserver themeservice_app_data_file:dir r_dir_perms;
allow mediaserver themeservice_app_data_file:file r_file_perms;
# For camera
allow mediaserver media_rw_data_file:file write;

View File

@ -5,3 +5,10 @@ allow platform_app sdcard_posix:file create_file_perms;
# Allow Gallery3D to crop user images
allow platform_app system_app_data_file:file rw_file_perms;
# Allow Gallery3D to execute render scripts
allow platform_app app_data_file:file execute;
# Allow batterymanager and batteryproperties services to be found
allow platform_app battery_service:service_manager find;
allow platform_app healthd_service:service_manager find;

View File

@ -0,0 +1,13 @@
# For prefetcher to read themes
allow dumpstate dalvikcache_data_file:dir r_dir_perms;
allow dumpstate dalvikcache_data_file:file r_file_perms;
allow dumpstate resourcecache_data_file:dir r_dir_perms;
allow dumpstate resourcecache_data_file:file r_file_perms;
allow dumpstate fuse:dir r_dir_perms;
allow dumpstate fuse:file r_file_perms;
allow dumpstate themeservice_app_data_file:dir r_dir_perms;
allow dumpstate themeservice_app_data_file:file r_file_perms;
allow dumpstate media_rw_data_file:dir search;
allow dumpstate sdcardfs:file getattr;
allow dumpstate sdcardfs:dir search;

View File

@ -0,0 +1,3 @@
# Storage of default mode by native API
allow system_server display_misc_file:dir rw_dir_perms;
allow system_server display_misc_file:file create_file_perms;

View File

@ -0,0 +1,2 @@
persist.dbg u:object_r:radio_prop:s0
persist.data u:object_r:radio_prop:s0

View File

@ -19,6 +19,7 @@ allow recovery rootfs:file link;
allow recovery rootfs:dir { write create rmdir add_name remove_name };
# Read storage files and directories
allow recovery tmpfs:dir mounton;
allow recovery media_rw_data_file:dir r_dir_perms;
allow recovery media_rw_data_file:file r_file_perms;
allow recovery vfat:dir r_dir_perms;

View File

@ -1,3 +1,4 @@
user=_app seinfo=platform name=com.cyanogenmod.filemanager domain=untrusted_app type=app_data_file
user=theme_man domain=system_app type=system_data_file
user=_app seinfo=cmupdater name=com.cyanogenmod.updater domain=system_app type=system_app_data_file
user=_app seinfo=themeservice name=org.cyanogenmod.themeservice domain=themeservice_app type=themeservice_app_data_file

View File

@ -11,3 +11,7 @@ type cm_app_suggest_service, system_api_service, system_server_service, service_
type cm_performance_service, system_api_service, system_server_service, service_manager_type;
type cm_themes_service, system_api_service, system_server_service, service_manager_type;
type cm_iconcache_service, system_api_service, system_server_service, service_manager_type;
type cm_livelockscreen_service, system_api_service, system_server_service, service_manager_type;
type cm_weather_service, system_api_service, system_server_service, service_manager_type;
type cm_livedisplay_service, system_api_service, system_server_service, service_manager_type;
type cm_audio_service, system_api_service, system_server_service, service_manager_type;

View File

@ -11,3 +11,7 @@ cmappsuggest u:object_r:cm_app_suggest_service:s0
cmperformance u:object_r:cm_performance_service:s0
cmthemes u:object_r:cm_themes_service:s0
cmiconcache u:object_r:cm_iconcache_service:s0
cmlivelockscreen u:object_r:cm_livelockscreen_service:s0
cmweather u:object_r:cm_weather_service:s0
cmlivedisplay u:object_r:cm_livedisplay_service:s0
cmaudio u:object_r:cm_audio_service:s0

View File

@ -7,7 +7,7 @@ allow system_server dhcp_data_file:dir r_dir_perms;
allow system_server dhcp_data_file:file r_file_perms;
# Themes
allow system_server theme_data_file:dir create_dir_perms;
allow system_server theme_data_file:file create_file_perms;
allow system_server themeservice_app_data_file:dir create_dir_perms;
allow system_server themeservice_app_data_file:file create_file_perms;
allow system_server resourcecache_data_file:dir create_dir_perms;
allow system_server resourcecache_data_file:file create_file_perms;

View File

@ -7,3 +7,9 @@ allow system_server persist_property_file:dir rw_dir_perms;
allow system_server persist_property_file:file { create_file_perms unlink };
allow system_server storage_stub_file:dir { getattr };
allow system_server media_rw_data_file:dir r_dir_perms;
# Allow system_server to relabel newly created theme directory for
# use by the proxied theme service
allow system_server themeservice_app_data_file:dir relabelto;

View File

@ -0,0 +1,19 @@
# Add themeservice_app to appdomain
type themeservice_app, domain;
app_domain(themeservice_app)
# Theme manager service
allow themeservice_app activity_service:service_manager find;
allow themeservice_app cm_status_bar_service:service_manager find;
allow themeservice_app cm_themes_service:dir search;
allow themeservice_app connectivity_service:service_manager find;
allow themeservice_app display_service:service_manager find;
allow themeservice_app mount_service:service_manager find;
allow themeservice_app notification_service:service_manager find;
allow themeservice_app system_app_data_file:dir search;
allow themeservice_app user_service:service_manager find;
allow themeservice_app wallpaper_service:service_manager find;
# Allow full access to themeservice_app_data_file
allow themeservice_app themeservice_app_data_file:dir create_dir_perms;
allow themeservice_app themeservice_app_data_file:file create_file_perms;

View File

@ -2,3 +2,8 @@ r_dir_file(uncrypt, media_rw_data_file)
allow uncrypt recovery_cache_file:dir create_dir_perms;
allow uncrypt recovery_cache_file:file create_file_perms;
allow uncrypt recovery_cache_file:fifo_file rw_file_perms;
allow uncrypt storage_file:dir r_dir_perms;
allow uncrypt storage_stub_file:dir r_dir_perms;
allow uncrypt fuse:dir r_dir_perms;
allow uncrypt fuse:file r_file_perms;

View File

@ -14,6 +14,7 @@ allow vold self:capability { setgid setuid };
recovery_only(`
allow vold rootfs:dir { add_name write };
allow vold rootfs:file execute_no_trans;
allow vold vold_tmpfs:file link;
')
# External storage

View File

@ -1,5 +1,5 @@
allow zygote theme_data_file:file r_file_perms;
allow zygote theme_data_file:dir r_dir_perms;
allow zygote themeservice_app_data_file:file r_file_perms;
allow zygote themeservice_app_data_file:dir r_dir_perms;
# ps command may do this
allow untrusted_app zygote:process getsched;