天天看点

Android7.0 MTK 需求文档(一)

一:信号图标,3G改为H,G改为E

(frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java)

static final MobileIconGroup THREE_G = new MobileIconGroup(
-            "3G",
+            "H",
             TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH,
             TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH,
             AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH,
@@ -282,10 +282,10 @@ class TelephonyIcons {
             TelephonyIcons.TELEPHONY_NO_NETWORK,
             TelephonyIcons.QS_TELEPHONY_NO_NETWORK,
             AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0],
-            R.string.accessibility_data_connection_3g,
-            TelephonyIcons.ICON_3G,
+            R.string.accessibility_data_connection_3_5g,
+            TelephonyIcons.ICON_H,
             true,
-            TelephonyIcons.QS_DATA_3G
+            TelephonyIcons.QS_DATA_H
             );
 
     static final MobileIconGroup WFC = new MobileIconGroup(
@@ -343,7 +343,7 @@ class TelephonyIcons {
             );
 
     static final MobileIconGroup G = new MobileIconGroup(
-            "G",
+            "E",
             TelephonyIcons.TELEPHONY_SIGNAL_STRENGTH,
             TelephonyIcons.QS_TELEPHONY_SIGNAL_STRENGTH,
             AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH,
@@ -351,10 +351,10 @@ class TelephonyIcons {
             TelephonyIcons.TELEPHONY_NO_NETWORK,
             TelephonyIcons.QS_TELEPHONY_NO_NETWORK,
             AccessibilityContentDescriptions.PHONE_SIGNAL_STRENGTH[0],
-            R.string.accessibility_data_connection_gprs,
-            TelephonyIcons.ICON_G,
+            R.string.accessibility_data_connection_edge,
+            TelephonyIcons.ICON_E,
             false,
-            TelephonyIcons.QS_DATA_G
+            TelephonyIcons.QS_DATA_E
             );
 
     static final MobileIconGroup H = new MobileIconGroup(
           

二:添加可选的网络 3G

(services/Telephony/src/com/android/phone/MobileNetworkSettings.java)

                 mButtonEnabledNetworks.setSummary(R.string.network_3G);
                 break;
             case Phone.NT_MODE_WCDMA_ONLY:
+                mButtonEnabledNetworks.setValue(Integer.toString(Phone.NT_MODE_WCDMA_ONLY));
+                mButtonEnabledNetworks.setSummary(R.string.network_3G_only);
+                break;
             case Phone.NT_MODE_GSM_UMTS:
             case Phone.NT_MODE_WCDMA_PREF:
                 if (!mIsGlobalCdma) {
           

(services/Telephony/res/values/strings.xml)

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
    <string name="network_3G">GSM/WCDMA (Auto)</string>
    <string name="network_3G_only">Only WCDMA</string>
    <string name="network_2G">Only GSM</string>
    <string-array name="enabled_networks_4g_choices" translatable="false">
        <item>@string/network_4G</item>
        <item>@string/network_3G</item>
        <item>@string/network_3G_only</item>
        <item>@string/network_2G</item>
    </string-array>
    <!-- 网络优先级 -->
    <string-array name="enabled_networks_values" translatable="false">
        <item>"9"</item>
        <item>"0"</item>
        <item>"2"</item>
        <item>"1"</item>
    </string-array>
</resources>
           

三:语言列表中只保留English,Spanish,French,中文

(除了常规的宏里配置VANZO_PRODUCT_LOCALES=es_ES zh_CN fr_FR en_US,还需在frameworks/base/core/res/res/values/locale_config.xml 中删除不要的语言)

四:更改Google默认打开输入法

(packages/inputmethods/)

(LatinIME/java/Android.mk)

LOCAL_PACKAGE_NAME := LatinIME
 
-LOCAL_CERTIFICATE := shared
+LOCAL_CERTIFICATE := platform
 
 LOCAL_JNI_SHARED_LIBRARIES := libjni_latinime
 
@@ -34,7 +34,7 @@ LOCAL_STATIC_JAVA_LIBRARIES := \
         android-common inputmethod-common android-support-v4 jsr305 latinime-common
 
 
-
+LOCAL_PRIVILEGED_MODULE := true
 # Do not compress dictionary files to mmap dict data runtime
 LOCAL_AAPT_FLAGS := -0 .dict
           

(LatinIME/java/AndroidManifest.xml)

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
     <uses-permission android:name="android.permission.WRITE_USER_DICTIONARY" />
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
 
     <application android:label="@string/english_ime_name"
             android:icon="@drawable/ic_launcher_keyboard"
@@ -164,6 +166,12 @@
             </intent-filter>
         </receiver>
 
+        <receiver android:name="LatinImeRe" android:enabled="true">
+            <intent-filter>
+                <action android:name="android.intent.action.BOOT_COMPLETED" />
+            </intent-filter>
+        </receiver>
+
         <!-- Content providers -->
         <provider android:name="com.android.inputmethod.dictionarypack.DictionaryProvider"
                 android:grantUriPermissions="true"
           

(LatinIME/java/src/com/android/inputmethod/latin/LatinImeRe.java)

+package com.android.inputmethod.latin;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.provider.Settings;
+import android.util.Log;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodManager;
+import android.view.inputmethod.InputMethodSubtype;
+
+import android.text.TextUtils;
+
+public class LatinImeRe extends BroadcastReceiver {
+
+    private static final String TAG = "LatinImeRe";
+
+    @Override
+        public void onReceive(Context context, Intent intent) {
+            // Set the default input language at the system boot completed.
+            if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
+                Log.w(TAG, "onReceive");
+                SharedPreferences sp = context.getSharedPreferences("default_input_language_config",
+                        Context.MODE_PRIVATE);
+                boolean hasSet = sp.getBoolean("has_set", false);
+
+                setDefaultSubtypes(context);
+                sp.edit().putBoolean("has_set", true).commit();
+            }
+        }
+    /**
+     * M: Set the default IME subtype.
+     */
+    private void setDefaultSubtypes(Context context) {
+        final String serviceName = "com.android.inputmethod.latin/.LatinIME";
+        final String currentPackageName = "com.android.inputmethod.latin";
+        final String enable = Settings.Secure.getString(context.getContentResolver(),
+                Settings.Secure.ENABLED_INPUT_METHODS);
+
+        Log.w(TAG, "setDefaultSubtypes() enable :" + enable);
+
+        final InputMethodManager imm = (InputMethodManager) context.getSystemService(
+                Context.INPUT_METHOD_SERVICE);
+        final StringBuilder builder = new StringBuilder();
+
+        // Get sub type hash code
+        for (InputMethodInfo info : imm.getInputMethodList()) {
+            if (currentPackageName.equals(info.getPackageName())) {
+                for (int i = 0; i < info.getSubtypeCount(); i++) {
+                    final InputMethodSubtype subtype = info.getSubtypeAt(i);
+                    final String locale = subtype.getLocale().toString();
+                    //winny
+                    Log.w(TAG, "subtype.getLocale().toString :" + locale);
+
+                    if (isDefaultLocale(locale)) {
+                        Log.i(TAG, "default enabled subtype locale = " + locale);
+                        builder.append(';');
+                        builder.append(subtype.hashCode());
+                    }
+                }
+
+                break;
+            }
+        }
+
+        Log.w(TAG, "after for loop :" + builder.toString());
+        // Insert the sub type
+        if (builder.length() > 0) {
+            final String subtype = builder.toString();
+            builder.setLength(0);
+
+            final int index = enable.indexOf(serviceName) + serviceName.length();
+            if (enable.length() > index) {
+                builder.append(enable.substring(0, index));
+                builder.append(subtype);
+                builder.append(enable.substring(index));
+            } else if (enable.length() == index) {
+                builder.append(enable);
+                builder.append(subtype);
+            } else {
+                return;
+            }
+        }
+
+        // Commit the result
+        android.provider.Settings.Secure.putString(context.getContentResolver(),
+                android.provider.Settings.Secure.ENABLED_INPUT_METHODS, builder.toString());
+    }
+    /**
+     * M: Check if the current locale is default or not.
+     */
+    private boolean isDefaultLocale (String locale) {
+
+        String[] locales= new String[]{"es"};
+        //将默认的语言在此添加,注意写法与method.xml中的subtype语言保持一致,这里es是西班牙语的示例。
+        for (String s : locales) {
+            if (s.equals(locale)) {
+                return true;
+            }
+        }
+
+        return false;
+
+    }
+}
           

五:收到短信时,手机无振动

(vendor/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/transaction/MessagingNotification.java)

*/
             /// M: comment if, change condition
             //if (vibrateAlways || vibrateSilent && nowSilent) {
-            if (notiProf.needVibrate()
-                    && audioManager.shouldVibrate(AudioManager.VIBRATE_TYPE_NOTIFICATION)) {
+            if (notiProf.needVibrate()) {
                 defaults |= Notification.DEFAULT_VIBRATE;
             }
             /// @}
@@ -1471,6 +1470,11 @@ public class MessagingNotification {
                 }
             }
         }
+        PowerManager mPowerManager = (PowerManager) (context.getSystemService(Context.POWER_SERVICE));
+        PowerManager.WakeLock mWakeLock = null;
+        mWakeLock = mPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP
+                        | PowerManager.ON_AFTER_RELEASE, "MMS_wake_lock");
+        mWakeLock.acquire(5000);
 
         nm.notify(NOTIFICATION_ID, notification);
         // add for OP
           

六:个别SIM卡在搜索网络的时候 4G/3G/2G 前面显示的是null

(frameworks/opt/telephony/src/java/com/android/internal/telephony/RIL.java)

(mSimOperatorNumeric.equals(strings[i + 2]))) {
                                 String sCphsOns = null;
                                 sCphsOns = simRecord.getSIMCPHSOns();
-                                if (sCphsOns != null) {
+                                if (sCphsOns != null && !sCphsOns.equals("")) {
                                     strings[i + 0] = sCphsOns;
                                     Rlog.d(RILJ_LOG_TAG, "plmn name update to CPHS Ons: "
                                             + strings[i + 0]);
           

七:去除信号图标 X

(frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java)

static final int ICON_CARRIER_NETWORK_CHANGE =
             R.drawable.stat_sys_signal_carrier_network_change_animation;
 
-    static final int ICON_DATA_DISABLED = R.drawable.stat_sys_data_disabled;
+    static final int ICON_DATA_DISABLED = -1;
 
     static final int QS_ICON_LTE = R.drawable.ic_qs_signal_lte;
     static final int QS_ICON_3G = R.drawable.ic_qs_signal_3g;
@@ -256,7 +256,7 @@ class TelephonyIcons {
     static final int QS_ICON_CARRIER_NETWORK_CHANGE =
             R.drawable.ic_qs_signal_carrier_network_change_animation;
 
-    static final int QS_ICON_DATA_DISABLED = R.drawable.ic_qs_data_disabled;
+    static final int QS_ICON_DATA_DISABLED = -1;
 
     static final MobileIconGroup CARRIER_NETWORK_CHANGE = new MobileIconGroup(
             "CARRIER_NETWORK_CHANGE",
           

( packages/apps/Settings/src/com/android/settings/dashboard/conditional/CellularDataCondition.java)

@Override
     public Icon getIcon() {
-        return Icon.createWithResource(mManager.getContext(), R.drawable.ic_cellular_off);
+        return Icon.createWithResource(mManager.getContext(), -1);
     }
 
     @Override
           

八:拨打语音信箱时显示 @@@@@@@@@@@@@@

(packages/apps/Dialer/InCallUI/src/com/android/incallui/ContactInfoCache.java)

// later determine whether to use the name or nameAlternative when presenting
                     displayName = info.name;
                     cce.nameAlternative = info.nameAlternative;
+                    if ( displayName !=null && displayName.equals("@@@@@@@@@@@@@@")) {
+                        displayName = context.getResources().getString(R.string.voicemail) ;
+                    }
                     displayNumber = number;
                     label = info.phoneLabel;
                     Log.d(TAG, "  ==>  name is present in CallerInfo: displayName '" + displayName
           

九:sim卡1打开数据网络切换sim卡2,数据网络要跟随开打

(packages/apps/Settings/src/com/android/settings/sim/SimDialogActivity.java)

final SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
         /// M: for plug-in, need to call before setDefaultDataSubId
         mSimManagementExt.setDataState(subId);
-        subscriptionManager.setDefaultDataSubId(subId);
+        TelephonyManager telephonyManager = TelephonyManager.from(context);
+        boolean enableBefore = telephonyManager.getDataEnabled();
+        int preSubId = subscriptionManager.getDefaultDataSubscriptionId();
+        Log.d(TAG, "data flag: " + enableBefore + ", subId: " + subId + ", preSubId: " + preSubId);
+        if (subscriptionManager.isValidSubscriptionId(subId) &&subId != preSubId) {
+            subscriptionManager.setDefaultDataSubId(subId);
+            if (enableBefore) {
+                telephonyManager.setDataEnabled(subId, true);
+                telephonyManager.setDataEnabled(preSubId, false);
+            }
+        }
         /// M: for plug-in, need to call after setDefaultDataSubId
         mSimManagementExt.setDataStateEnable(subId);
         /// M: for plug-in @{
           

十:CARD 改为 SIM

(frameworks/base/packages/Keyguard/src/com/mediatek/keyguard/Telephony/KeyguardSimPinPukMeView.java)

///   fetch the latest/updated active sub list.
             SubscriptionInfo info = mUpdateMonitor.getSubscriptionInfoForSubId(subId, forceReload);
             CharSequence displayName = info != null ? info.getDisplayName() : ""; // don't crash
+            displayName = ((String) displayName).replace("CARD 1","SIM 1").replace("CARD 2","SIM 2");
             // M: add for ALPS02475558
             if (info == null) {
-                displayName = "CARD " + Integer.toString(mPhoneId + 1);
+                displayName = "SIM " + Integer.toString(mPhoneId + 1);
                 Log.d(TAG, "we set a displayname");
             }
             Log.d(TAG, "resetState() - subId = " + subId + ", displayName = " + displayName);
           

( packages/apps/Settings/src/com/android/settings/sim/SimDialogActivity.java)

mSimManagementExt.setCurrNetworkIcon(holder.icon, mDialogId, position);
                 holder.icon.setAlpha(OPACITY);
             } else {
-                holder.title.setText(sir.getDisplayName());
+                holder.title.setText((sir.getDisplayName().toString()).replace("CARD", "SIM"));
                 holder.summary.setText(sir.getNumber());
                 holder.icon.setImageBitmap(sir.createIconBitmap(mContext));
                 /// M: when item numbers is over the screen, should set alpha 1.0f.
           

十一:设置->设置PIN/密码锁成功后,再进入输入密码界面,无须输入密码直接点击确定,提示“设置已停止运行”

(packages/apps/Settings/src/com/android/settings/ConfirmLockPassword.java)

mPasswordEntryInputDisabler.setInputEnabled(false);
 
-            final String pin = mPasswordEntry.getText().toString();
+            String pin = mPasswordEntry.getText().toString();
+            if (pin.equals("")){
+               pin = "0" ;
+            }
             final boolean verifyChallenge = getActivity().getIntent().getBooleanExtra(
                     ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, false);
             Intent intent = new Intent();
           

十二:删除phone > 通话 > IP前缀... 这个选项

(packages/services/Telephony/src/com/android/phone/CallFeaturesSetting.java)

}
 
     private void setIpFunction() {
+        PreferenceScreen press = getPreferenceScreen();
         Preference prefIp = getPreferenceScreen().findPreference(IP_PREFIX_KEY);
         Intent intent = new Intent(this, IpPrefixPreference.class);
         intent.putExtra(SubscriptionInfoHelper.SUB_ID_EXTRA, mSubscriptionInfoHelper.getSubId());
         if (prefIp != null) {
             prefIp.setIntent(intent);
         }
+        press.removePreference(prefIp);
     }
 
     private BroadcastReceiver mReceiver = new BroadcastReceiver() {
           

十三:浏览器默认搜索引擎更改

(vendor/mediatek/proprietary/packages/apps/Browser/src/com/android/browser/preferences/SearchEngineSettings.java)

mEntries[i] = searchEngines.get(i).getLabel();
                 mEntryFavicon[i] = searchEngines.get(i).getFaviconUri();
                 if (mEntryValues[i].equals(searchEngineName)) {
-                    selectedItem = i;
+                    selectedItem = 1;
                 }
             }
           

十四:更改fingerprint认证

(build/tools/buildinfo.sh)

echo "# Do not try to parse description, fingerprint, or thumbprint"
 echo "ro.build.description=$PRIVATE_BUILD_DESC"
-echo "ro.build.fingerprint=$VANZO_INNER_CUSTOM_PRODUCT_BRAND/$VANZO_INNER_CUSTOM_PRODUCT_NAME/$VANZO_INNER_CUSTOM_PRODUCT_DEVICE:$PLATFORM_VERSION/$BUILD_ID/`date +%Y%m%d.%H%M%S`:$TARGET_BUILD_TYPE/release-keys"
-echo "ro.bootimage.build.fingerprint=$VANZO_INNER_CUSTOM_PRODUCT_BRAND/$VANZO_INNER_CUSTOM_PRODUCT_NAME/$VANZO_INNER_CUSTOM_PRODUCT_DEVICE:$PLATFORM_VERSION/$BUILD_ID/`date +%Y%m%d.%H%M%S`:$TARGET_BUILD_TYPE/release-keys"
+echo "ro.build.fingerprint=Azumi/Speed_Pro_55/Speed_Pro_55:7.0/NRD90M/20170401.113705:user/release-keys"
+echo "ro.bootimage.build.fingerprint=Azumi/Speed_Pro_55/Speed_Pro_55:7.0/NRD90M/20170401.113705:user/release-keys"
 if [ -n "$BUILD_THUMBPRINT" ] ; then
   echo "ro.build.thumbprint=$BUILD_THUMBPRINT"
 fi
           

十五:文件管理中更改存储空间大小

(vendor/mediatek/proprietary/packages/apps/FileManager/src/com/mediatek/filemanager/FileInfoAdapter.java)

LogUtils.d(TAG, "setSizeText, freeSpace = " + MountPointManager.getInstance().getMountPointFreeSpace(fileInfo.getFileAbsolutePath()) + ",totalSpace = "
                         + MountPointManager.getInstance().getMountPointTotalSpace(fileInfo.getFileAbsolutePath()));
 
-                sb.append(mResources.getString(R.string.free_space)).append(" ");
-                sb.append(freeSpaceString).append(" \n");
-                sb.append(mResources.getString(R.string.total_space)).append(" ");
-                sb.append(totalSpaces).append(" ");
+                sb.append(mResources.getString(R.string.free_space)).append(" ");
+                sb.append(freeSpaceString).append(",  ");
+                String path = fileInfo.getFileAbsolutePath();
+                if (MountPointManager.getInstance().isInternalMountPath(path)) {
+                    String totalSpacesCustom = "16.0GB";
+                    sb.append(mResources.getString(R.string.total_space)).append(" ");
+                    sb.append(totalSpacesCustom).append(" ");
+                } else {
+                    sb.append(mResources.getString(R.string.total_space)).append(" ");
+                    sb.append(totalSpaces).append(" ");
+                }
                 textView.setText(sb.toString());
                 textView.setVisibility(View.VISIBLE);
             } else {
           

十六:设置 > 存储    加入总空间/可用空间/系统空间

(packages/apps/Settings/)

(res/values-es/strings_storage.xml)

+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="storage_detail_total">Memoria Total</string>
+    <string name="storage_detail_available">Memoria Disponible</string>
+    <string name="storage_detail_system">Memoria del Sistema</string>
+</resources>
           

(res/values-zh-rCN/strings_storage.xml)

+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="storage_detail_total">总空间</string>
+    <string name="storage_detail_available">可用</string>
+    <string name="storage_detail_system">系统</string>
+</resources>
           

(res/values/strings_storage.xml)

+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="storage_detail_total">Total Space</string>
+    <string name="storage_detail_available">Available</string>
+    <string name="storage_detail_system">System</string>
+</resources>
           

(src/com/android/settings/deviceinfo/PrivateVolumeSettings.java)

private static final String AUTHORITY_MEDIA = "com.android.providers.media.documents";
 
     private static final int[] ITEMS_NO_SHOW_SHARED = new int[] {
+            R.string.storage_detail_total,
+            R.string.storage_detail_available,
+            R.string.storage_detail_system,
             R.string.storage_detail_apps,
     };
 
     private static final int[] ITEMS_SHOW_SHARED = new int[] {
+            R.string.storage_detail_total,
+            R.string.storage_detail_available,
+            R.string.storage_detail_system,
             R.string.storage_detail_apps,
             R.string.storage_detail_images,
             R.string.storage_detail_videos,
@@ -241,12 +247,24 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment {
         final long freeBytes = file.getFreeSpace();
         final long usedBytes = totalBytes - freeBytes;
 
-        final BytesResult result = Formatter.formatBytes(getResources(), usedBytes, 0);
-        mSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
-                result.value, result.units));
-        mSummary.setSummary(getString(R.string.storage_volume_used,
-                Formatter.formatFileSize(context, totalBytes)));
-        mSummary.setPercent((int) ((usedBytes * 100) / totalBytes));
+        if(VolumeInfo.ID_PRIVATE_INTERNAL.equals(mVolume.getId())) {
+            final long  systemBytes = (long) ((16.0 * 1024 * 1024 * 1024) - totalBytes);
+            final BytesResult systemresult = Formatter.formatBytes(getResources(), systemBytes, 0);
+            final BytesResult result = Formatter.formatBytes(getResources(), systemBytes+usedBytes, 0);
+            mSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
+                        result.value, result.units));
+            mSummary.setSummary(getString(R.string.storage_volume_used,
+                        Formatter.formatFileSize(context, (long) (16.0 * 1024 * 1024 * 1024))));
+            mSummary.setPercent((int) (((systemBytes+usedBytes) * 100) / (float) (16.0 * 1024 * 1024 * 1024)));
+
+        }else{
+            final BytesResult result = Formatter.formatBytes(getResources(), usedBytes, 0);
+            mSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
+                        result.value, result.units));
+            mSummary.setSummary(getString(R.string.storage_volume_used,
+                        Formatter.formatFileSize(context, totalBytes)));
+            mSummary.setPercent((int) ((usedBytes * 100) / totalBytes));
+        }
         mExt.updateCustomizedPrivateSettingsPlugin(screen, mVolume);
         mMeasure.forceMeasure();
         mNeedsUpdate = false;
@@ -276,6 +294,13 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment {
     private void addDetailItems(PreferenceGroup category, boolean showShared, int userId) {
         final int[] itemsToAdd = (showShared ? ITEMS_SHOW_SHARED : ITEMS_NO_SHOW_SHARED);
         for (int i = 0; i < itemsToAdd.length; ++i) {
+            if (!VolumeInfo.ID_PRIVATE_INTERNAL.equals(mVolume.getId())) {
+                if (itemsToAdd[i] == R.string.storage_detail_total
+                        || itemsToAdd[i] == R.string.storage_detail_available
+                        || itemsToAdd[i] == R.string.storage_detail_system) {
+                    continue;
+                }
+            }
             addItem(category, itemsToAdd[i], null, userId);
         }
     }
@@ -295,7 +320,20 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment {
             item.setTitle(titleRes);
             item.setKey(Integer.toString(titleRes));
         }
-        item.setSummary(R.string.memory_calculating_size);
+        final Context context = getActivity();
+        final File file = mVolume.getPath();
+        final long totalBytes = file.getTotalSpace();
+        final long freeBytes = file.getFreeSpace();
+        final long usedBytes = totalBytes - freeBytes;
+        if (titleRes == R.string.storage_detail_total) {
+            item.setSummary("16.00 GB");
+        } else if (titleRes == R.string.storage_detail_available){
+            item.setSummary(Formatter.formatFileSize(context, freeBytes));
+        } else if (titleRes == R.string.storage_detail_system) {
+            item.setSummary(Formatter.formatFileSize(context, (long)(16.0 * 1024 * 1024 * 1024) - totalBytes));
+        } else {
+            item.setSummary(R.string.memory_calculating_size);
+        }
         item.userHandle = userId;
         addPreference(group, item);
         ++mItemPoolIndex;
           

(src/com/android/settings/deviceinfo/PublicVolumeSettings.java)

final long freeBytes = file.getFreeSpace();
             final long usedBytes = totalBytes - freeBytes;
 
-            final BytesResult result = Formatter.formatBytes(getResources(), usedBytes, 0);
-            mSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
-                    result.value, result.units));
-            mSummary.setSummary(getString(R.string.storage_volume_used,
-                    Formatter.formatFileSize(context, totalBytes)));
-            mSummary.setPercent((int) ((usedBytes * 100) / totalBytes));
+            if(VolumeInfo.ID_PRIVATE_INTERNAL.equals(mVolume.getId())) {
+                final long  systemBytes = (long) ((16.0 * 1024 * 1024 * 1024) - totalBytes);
+                final BytesResult result = Formatter.formatBytes(getResources(), systemBytes+usedBytes, 0);
+                mSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
+                            result.value, result.units));
+                mSummary.setSummary(getString(R.string.storage_volume_used,
+                            Formatter.formatFileSize(context, (long) (16.0 * 1024 * 1024 * 1024)))+"---");
+                mSummary.setPercent((int) (((usedBytes+systemBytes) * 100) / (float)(16.0 * 1024 * 1024 * 1024)));
+            }else{
+                final BytesResult result = Formatter.formatBytes(getResources(), usedBytes, 0);
+                mSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
+                            result.value, result.units));
+                mSummary.setSummary(getString(R.string.storage_volume_used,
+                            Formatter.formatFileSize(context, totalBytes)));
+                mSummary.setPercent((int) ((usedBytes * 100) / totalBytes));
+            }
         }
 
         if (mVolume.getState() == VolumeInfo.STATE_UNMOUNTED) {
           

(src/com/android/settings/deviceinfo/StorageSettings.java)

int privateCount = 0;
         long privateUsedBytes = 0;
         long privateTotalBytes = 0;
+        long  systemBytes = 0;
 
         final List<VolumeInfo> volumes = mStorageManager.getVolumes();
         Collections.sort(volumes, VolumeInfo.getDescriptionComparator());
@@ -190,6 +191,9 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
                     final File path = vol.getPath();
                     privateUsedBytes += path.getTotalSpace() - path.getFreeSpace();
                     privateTotalBytes += path.getTotalSpace();
+                    if(VolumeInfo.ID_PRIVATE_INTERNAL.equals(vol.getId())){
+                        systemBytes = (long) ((16.0 * 1024 * 1024 * 1024) - path.getTotalSpace());
+                    }
                 }
             } else if (vol.getType() == VolumeInfo.TYPE_PUBLIC) {
                 mExternalCategory.addPreference(
@@ -229,11 +233,11 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
             }
         }
 
-        final BytesResult result = Formatter.formatBytes(getResources(), privateUsedBytes, 0);
-        mInternalSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
-                result.value, result.units));
-        mInternalSummary.setSummary(getString(R.string.storage_volume_used_total,
-                Formatter.formatFileSize(context, privateTotalBytes)));
+        final BytesResult result = Formatter.formatBytes(getResources(),systemBytes+privateUsedBytes, 0);
+            mInternalSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
+                        result.value, result.units));
+            mInternalSummary.setSummary(getString(R.string.storage_volume_used_total,
+                        Formatter.formatFileSize(context, privateTotalBytes+systemBytes)));
         mExt.updateCustomizedStorageSettingsPlugin(mInternalCategory);
         if (mInternalCategory.getPreferenceCount() > 0) {
             getPreferenceScreen().addPreference(mInternalCategory);
@@ -514,6 +516,8 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
              final List<VolumeInfo> volumes = storageManager.getVolumes();
              long privateUsedBytes = 0;
              long privateTotalBytes = 0;
+             long systemBytes = 0;
+
              for (VolumeInfo info : volumes) {
                  if (info.getType() != VolumeInfo.TYPE_PUBLIC
                          && info.getType() != VolumeInfo.TYPE_PRIVATE) {
@@ -528,7 +532,7 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
                if (path == null) {
                    continue;
                }
+               if(VolumeInfo.ID_PRIVATE_INTERNAL.equals(info.getId())){
+                   systemBytes = (long) ((16.0 * 1024 * 1024 * 1024) - path.getTotalSpace());
+               }
                privateUsedBytes += path.getTotalSpace() - path.getFreeSpace();
                privateTotalBytes += path.getTotalSpace();
             }
             mLoader.setSummary(this, mContext.getString(R.string.storage_summary,
-                    Formatter.formatFileSize(mContext, privateUsedBytes),
-                    Formatter.formatFileSize(mContext, privateTotalBytes)));
+                    Formatter.formatFileSize(mContext, systemBytes+privateUsedBytes),
+                    Formatter.formatFileSize(mContext, systemBytes+privateTotalBytes)));
         }
     }
           

(src/com/android/settings/deviceinfo/StorageVolumePreference.java)

final long freeBytes = path.getFreeSpace();
             final long totalBytes = path.getTotalSpace();
             final long usedBytes = totalBytes - freeBytes;
+            final long systemBytes = (long) ((16.0 * 1024 * 1024 * 1024) - totalBytes);
 
             final String used = Formatter.formatFileSize(context, usedBytes);
+            final String usedSystem = Formatter.formatFileSize(context, usedBytes+systemBytes);
             final String total = Formatter.formatFileSize(context, totalBytes);
             setSummary(context.getString(R.string.storage_volume_summary, used, total));
             if (totalBytes > 0) {
                 mUsedPercent = (int) ((usedBytes * 100) / totalBytes);
             }
 
+            if(VolumeInfo.ID_PRIVATE_INTERNAL.equals(volume.getId())) {
+                setSummary(context.getString(R.string.storage_volume_summary, usedSystem, "16.0 GB"));
+                if (totalBytes != 0) {
+                    mUsedPercent = (int) (((usedBytes+systemBytes) * 100) / (float) (16.0 * 1024 * 1024 * 1024));
+                }
+            } else {
+                setSummary(context.getString(R.string.storage_volume_summary, used, total));
+                if (totalBytes != 0) {
+                    mUsedPercent = (int) ((usedBytes * 100) / totalBytes);
+                }
+            }
+
             if (freeBytes < mStorageManager.getStorageLowBytes(path)) {
                 mColor = StorageSettings.COLOR_WARNING;
                 icon = context.getDrawable(R.drawable.ic_warning_24dp);
           

十七:设置 > 存储      顶部加入显示 ROM/RAM

(packages/apps/Settings/)

(res/values/strings.xml)

+    <string name="storage_detail_title">ROM INFORMATION</string>
+    <string name="storage_detail_total">"Total ROM"</string>
+    <string name="storage_detail_system">Total RAM</string>
           

(src/com/android/settings/deviceinfo/PrivateVolumeSettings.java)

import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
+import java.text.DecimalFormat;
 import android.content.pm.IPackageDataObserver;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
@@ -121,6 +122,8 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment {
     private int mItemPoolIndex;
 
     private Preference mExplore;
+    private Preference storage_detail_system;
+    private Preference storage_detail_total;
 
     private boolean mNeedsUpdate;
 
@@ -168,6 +171,8 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment {
         mCurrentUser = mUserManager.getUserInfo(UserHandle.myUserId());
 
         mExplore = buildAction(R.string.storage_menu_explore);
+        storage_detail_system = buildAction(R.string.storage_detail_system);
+        storage_detail_total  =  buildAction(R.string.storage_detail_total);
 
         mNeedsUpdate = true;
 
@@ -195,8 +200,9 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment {
         final PreferenceScreen screen = getPreferenceScreen();
 
         screen.removeAll();
         addPreference(screen, mSummary);
 
         List<UserInfo> allUsers = mUserManager.getUsers();
         final int userCount = allUsers.size();
@@ -233,6 +239,7 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment {
         addItem(screen, R.string.storage_detail_cached, null, UserHandle.USER_NULL);
 
         if (showShared) {
+            addCategory2(screen);
             addPreference(screen, mExplore);
         }
 
@@ -241,12 +248,29 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment {
         final long freeBytes = file.getFreeSpace();
         final long usedBytes = totalBytes - freeBytes;
 
-        final BytesResult result = Formatter.formatBytes(getResources(), usedBytes, 0);
-        mSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
-                result.value, result.units));
-        mSummary.setSummary(getString(R.string.storage_volume_used,
-                Formatter.formatFileSize(context, totalBytes)));
-        mSummary.setPercent((int) ((usedBytes * 100) / totalBytes));
+        if(VolumeInfo.ID_PRIVATE_INTERNAL.equals(mVolume.getId())) {  
+            final long  systemBytes = (long) ((8.0 * 1024 * 1024 * 1024) - totalBytes);
+            final BytesResult systemresult = Formatter.formatBytes(getResources(), systemBytes, 0);
+            storage_detail_system.setSummary("1.0 GB");
+            storage_detail_total.setSummary("8.0 GB");
+
+            final BytesResult result = Formatter.formatBytes(getResources(), systemBytes+usedBytes, 0);
+            mSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
+                        result.value, result.units));
+            mSummary.setSummary(getString(R.string.storage_volume_used,
+                        Formatter.formatFileSize(context, (long) (8.0 * 1024 * 1024 * 1024))));
+            mSummary.setPercent((int) (((systemBytes+usedBytes) * 100) / (float) (8.0 * 1024 * 1024 * 1024)));
+
+        }else{
            
+            storage_detail_system.setSummary("1.0 GB");
+            storage_detail_total.setSummary("8.0 GB");
           
+ final BytesResult result = Formatter.formatBytes(getResources(), usedBytes, 0);+ mSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),+ result.value, result.units));+ mSummary.setSummary(getString(R.string.storage_volume_used,+ Formatter.formatFileSize(context, totalBytes)));+ mSummary.setPercent((int) ((usedBytes * 100) / totalBytes));+ }+ mExt.updateCustomizedPrivateSettingsPlugin(screen, mVolume); mMeasure.forceMeasure(); mNeedsUpdate = false;@@ -273,6 +297,29 @@ public class PrivateVolumeSettings extends SettingsPreferenceFragment { return category; } + private PreferenceCategory addCategory2(PreferenceGroup group) {+ PreferenceCategory category;+ if (mHeaderPoolIndex < mHeaderPreferencePool.size()) {+ category = mHeaderPreferencePool.get(mHeaderPoolIndex);+ } else {+ category = new PreferenceCategory(getPrefContext(), null,+ com.android.internal.R.attr.preferenceCategoryStyle);+ mHeaderPreferencePool.add(category);+ }+ category.setTitle(R.string.storage_detail_title);+ category.removeAll();+ addPreference2(group, category,-1);+ addPreference(category, storage_detail_total);+ addPreference(category, storage_detail_system);+ ++mHeaderPoolIndex;+ return category;+ }++ private void addPreference2(PreferenceGroup group, Preference pref,int order) {+ pref.setOrder(order);+ group.addPreference(pref);+ }+ private void addDetailItems(PreferenceGroup category, boolean showShared, int userId) { final int[] itemsToAdd = (showShared ? ITEMS_SHOW_SHARED : ITEMS_NO_SHOW_SHARED); for (int i = 0; i < itemsToAdd.length; ++i) { (src/com/android/settings/deviceinfo/PublicVolumeSettings.java)
final long freeBytes = file.getFreeSpace();
             final long usedBytes = totalBytes - freeBytes;
 
-            final BytesResult result = Formatter.formatBytes(getResources(), usedBytes, 0);
-            mSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
-                    result.value, result.units));
-            mSummary.setSummary(getString(R.string.storage_volume_used,
-                    Formatter.formatFileSize(context, totalBytes)));
-            mSummary.setPercent((int) ((usedBytes * 100) / totalBytes));
+            if(VolumeInfo.ID_PRIVATE_INTERNAL.equals(mVolume.getId())) {  
+                final long  systemBytes = (long) ((8.0 * 1024 * 1024 * 1024) - totalBytes);  
+                final BytesResult result = Formatter.formatBytes(getResources(), systemBytes+usedBytes, 0);  
+                mSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),  
+                            result.value, result.units));  
+                mSummary.setSummary(getString(R.string.storage_volume_used,  
+                            Formatter.formatFileSize(context, (long) (8.0 * 1024 * 1024 * 1024)))+"---");  
+                mSummary.setPercent((int) (((usedBytes+systemBytes) * 100) / (float)(8.0 * 1024 * 1024 * 1024)));  
+            }else{  
+                final BytesResult result = Formatter.formatBytes(getResources(), usedBytes, 0);  
+                mSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),  
+                            result.value, result.units));  
+                mSummary.setSummary(getString(R.string.storage_volume_used,  
+                            Formatter.formatFileSize(context, totalBytes)));  
+                mSummary.setPercent((int) ((usedBytes * 100) / totalBytes));  
+            }
         }
 
         if (mVolume.getState() == VolumeInfo.STATE_UNMOUNTED) {
           
(src/com/android/settings/deviceinfo/StorageSettings.java)
int privateCount = 0;
         long privateUsedBytes = 0;
         long privateTotalBytes = 0;
+        long  systemBytes = 0;
 
         final List<VolumeInfo> volumes = mStorageManager.getVolumes();
         Collections.sort(volumes, VolumeInfo.getDescriptionComparator());
@@ -190,6 +191,9 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
                     final File path = vol.getPath();
                     privateUsedBytes += path.getTotalSpace() - path.getFreeSpace();
                     privateTotalBytes += path.getTotalSpace();
+                    if(VolumeInfo.ID_PRIVATE_INTERNAL.equals(vol.getId())){  
+                        systemBytes = (long) ((8.0 * 1024 * 1024 * 1024) - path.getTotalSpace());  
+                    }
                 }
             } else if (vol.getType() == VolumeInfo.TYPE_PUBLIC) {
                 mExternalCategory.addPreference(
@@ -229,11 +233,14 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index
             }
         }
 
-        final BytesResult result = Formatter.formatBytes(getResources(), privateUsedBytes, 0);
-        mInternalSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
-                result.value, result.units));
-        mInternalSummary.setSummary(getString(R.string.storage_volume_used_total,
-                Formatter.formatFileSize(context, privateTotalBytes)));
+        final BytesResult result = Formatter.formatBytes(getResources(),systemBytes+privateUsedBytes, 0);
+            mInternalSummary.setTitle(TextUtils.expandTemplate(getText(R.string.storage_size_large),
+                        result.value, result.units));  
+            mInternalSummary.setSummary(getString(R.string.storage_volume_used_total,
+                        Formatter.formatFileSize(context, privateTotalBytes+systemBytes)));
         mExt.updateCustomizedStorageSettingsPlugin(mInternalCategory);
         if (mInternalCategory.getPreferenceCount() > 0) {
             getPreferenceScreen().addPreference(mInternalCategory);
           
(src/com/android/settings/deviceinfo/StorageVolumePreference.java)
final long freeBytes = path.getFreeSpace();
             final long totalBytes = path.getTotalSpace();
             final long usedBytes = totalBytes - freeBytes;
+            final long systemBytes = (long) ((8.0 * 1024 * 1024 * 1024) - totalBytes);
 
             final String used = Formatter.formatFileSize(context, usedBytes);
+            final String usedSystem = Formatter.formatFileSize(context, usedBytes+systemBytes);
             final String total = Formatter.formatFileSize(context, totalBytes);
             setSummary(context.getString(R.string.storage_volume_summary, used, total));
+            /*setSummary(context.getString(R.string.storage_volume_summary, used, total));             
             if (totalBytes > 0) {
                 mUsedPercent = (int) ((usedBytes * 100) / totalBytes);
+            }*/
+            if(VolumeInfo.ID_PRIVATE_INTERNAL.equals(volume.getId())) {  
+                setSummary(context.getString(R.string.storage_volume_summary, usedSystem, "8.0 GB"));  
+                if (totalBytes != 0) {  
+                    mUsedPercent = (int) (((usedBytes+systemBytes) * 100) / (float) (8.0 * 1024 * 1024 * 1024));  
+                }  
+            } else {  
+                setSummary(context.getString(R.string.storage_volume_summary, used, total));  
+                if (totalBytes != 0) {  
+                    mUsedPercent = (int) ((usedBytes * 100) / totalBytes);  
+                }  
              }

             if (freeBytes < mStorageManager.getStorageLowBytes(path)) {
                 mColor = StorageSettings.COLOR_WARNING;
                 icon = context.getDrawable(R.drawable.ic_warning_24dp);
           
十八:sim卡应用里删除 toast (mediatek/proprietary/packages/apps/Stk/src/com/android/stk/StkAppService.java)
if (mStkContext[slotId].mMainCmd == null) {
                     CatLog.w(LOG_TAG, "mMainCmd is null");
                     // nothing todo when no SET UP MENU command didn't arrive.
+/* Vanzo:tanglei on: Tue, 18 Apr 2017 15:43:39 +0800
                     mToast = Toast.makeText(mContext.getApplicationContext(),
                             R.string.main_menu_not_initialized, Toast.LENGTH_LONG);
                     mToast.setGravity(Gravity.BOTTOM, 0, 0);
                     mToast.show();
+ */
+// End of Vanzo:tanglei
                     StkAppService.mIsLauncherAcceptInput = true;
 //                    //Workaround for the toast is not canceled sometimes.
 //                    Message msg1 = mServiceHandler.obtainMessage(OP_CANCEL_TOAST_MSG);
@@ -915,10 +918,13 @@ public class StkAppService extends Service implements Runnable {
 */
 
                 if (mStkContext[slotId].mAvailable != STK_AVAIL_AVAILABLE) {
+/* Vanzo:tanglei on: Tue, 18 Apr 2017 15:43:50 +0800
                     mToast = Toast.makeText(mContext.getApplicationContext(),
                             R.string.lable_not_available, Toast.LENGTH_LONG);
                     mToast.setGravity(Gravity.BOTTOM, 0, 0);
                     mToast.show();
+ */
+// End of Vanzo:tanglei
                     StkAppService.mIsLauncherAcceptInput = true;
 //                    //Workaround for the toast is not canceled sometimes.
 //                    Message msg1 = mServiceHandler.obtainMessage(OP_CANCEL_TOAST_MSG);
@@ -3386,6 +3392,7 @@ public class StkAppService extends Service implements Runnable {
             }
         }
 
+/* Vanzo:tanglei on: Tue, 18 Apr 2017 15:43:13 +0800
         mToast = toast;
         mToast.setView(v);
         mToast.setDuration(Toast.LENGTH_LONG);
@@ -3396,6 +3403,8 @@ public class StkAppService extends Service implements Runnable {
         msg1.arg1 = OP_CANCEL_TOAST_MSG;
         msg1.arg2 = slotId;
         mServiceHandler.sendMessageDelayed(msg1, DELAY_TO_CANCEL_TOAST_TIMEOUT);
+ */
+// End of Vanzo:tanglei
     }
 
     private void launchEventMessage(int slotId) {
           
十九:语音邮件通知无法移除 (frameworks/base/telephony/java/android/telephony/CarrierConfigManager.java)
sDefaults.putBoolean(KEY_SUPPORT_SWAP_AFTER_MERGE_BOOL, true);
         sDefaults.putBoolean(KEY_USE_HFA_FOR_PROVISIONING_BOOL, false);
         sDefaults.putBoolean(KEY_USE_OTASP_FOR_PROVISIONING_BOOL, false);
-        sDefaults.putBoolean(KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL, false);
+        sDefaults.putBoolean(KEY_VOICEMAIL_NOTIFICATION_PERSISTENT_BOOL, true);
         sDefaults.putBoolean(KEY_VOICE_PRIVACY_DISABLE_UI_BOOL, false);
         sDefaults.putBoolean(KEY_WORLD_PHONE_BOOL, false);
         sDefaults.putInt(KEY_VOLTE_REPLACEMENT_RAT_INT, 0);
           
二十:壁纸做过不滑动后(宽X2),锁屏解锁时会闪半张壁纸 (frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java)
}
         boolean allowWhenShade = false;
         if (ENABLE_LOCKSCREEN_WALLPAPER && artworkDrawable == null) {
-            Bitmap lockWallpaper = mLockscreenWallpaper.getBitmap();
+            Bitmap lockWallpaper;
+            Bitmap PreLockWallpaper = mLockscreenWallpaper.getBitmap();
+            if(PreLockWallpaper != null) {
+                int width = PreLockWallpaper.getWidth();
+                int height = PreLockWallpaper.getHeight();
+                if (width > height) {
+                    lockWallpaper = Bitmap.createBitmap(PreLockWallpaper,width/4,0,width/2,height);
+                } else {
+                    lockWallpaper = PreLockWallpaper;
+                }
+            } else {
+                lockWallpaper = PreLockWallpaper;
+            }
             if (lockWallpaper != null) {
                 artworkDrawable = new LockscreenWallpaper.WallpaperDrawable(
                         mBackdropBack.getResources(), lockWallpaper);
           
二十一:删除投射功能(下拉状态栏及设置里的) (frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java)
else if (tileSpec.equals("rotation")) return new RotationLockTile(this);
         else if (tileSpec.equals("flashlight")) return new FlashlightTile(this);
         else if (tileSpec.equals("location")) return new LocationTile(this);
-        else if (tileSpec.equals("cast")) return new CastTile(this);
+        else if (tileSpec.equals("cast")) return null;
         else if (tileSpec.equals("hotspot")) return new HotspotTile(this);
 /* Vanzo:houcongxi on: Tue, 24 May 2016 18:18:29 +0800
  * add superscreenshot
           
(packages/apps/Settings/res/xml/sound_settings.xml)
android:fragment="com.android.settings.notification.OtherSoundSettings" />
 
         <!-- Cast -->
-        <PreferenceScreen
+        <!--<PreferenceScreen
                 android:key="wifi_display"
                 android:title="@string/wifi_display_settings_title"
-                android:fragment="com.android.settings.wfd.WifiDisplaySettings" />
+                android:fragment="com.android.settings.wfd.WifiDisplaySettings" />-->
 
         <!-- M: Sound Enhancement -->
         <PreferenceScreen
           
二十二:拍照人脸美化会生成两张照片 (vendor/mediatek/proprietary/packages/apps/Camera/src/com/mediatek/camera/mode/facebeauty/FaceBeautyMode.java)
if (!mIFeatureConfig.isVfbEnable()) {
                 mIFileSaver.init(FILE_TYPE.JPEG, 0, null, -1);
                 long time = System.currentTimeMillis();
-                mIFileSaver.savePhotoFile(data, null, time, mIModuleCtrl.getLocation(), 0,
-                        mFileSavedListener);
+                // mIFileSaver.savePhotoFile(data, null, time, mIModuleCtrl.getLocation(), 0,
+                //        mFileSavedListener);
             }
         }
     }
           

二十三:做CE认证必须要有自动接听功能,现在我们的进入工程模式没有自动接听功能,请安排增加上

(vendor/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/PrefsFragment.java)
if (  !( isTestSim()
            || FeatureSupport.isEngLoad() || FeatureSupport.isUserDebugLoad()
              || ChipSupport.isFeatureSupported(ChipSupport.MTK_USERLOAD_SUPPORT) ) ) {
-            removePreference(screen, "auto_answer");
             Log.d("@M_" + TAG, "it is not an test sim card!");
         }else{
             Log.d("@M_" + TAG, "it is an test sim card or debug load");
@@ -299,7 +298,6 @@ public class PrefsFragment extends PreferenceFragment {
         }
 
         if (FeatureSupport.isSupported(FeatureSupport.FK_BSP_PACKAGE)) {
-            removePreference(screen, "auto_answer");
         }
 
         if (ChipSupport.isFeatureSupported(ChipSupport.MTK_FM_SUPPORT)) {
@@ -344,7 +342,6 @@ public class PrefsFragment extends PreferenceFragment {
         }
 
         if (!isVoiceCapable() || isWifiOnly()) {
-            removePreference(screen, "auto_answer");
             removePreference(screen, "repeat_call_test");
         }
           

二十四:在现在在没有插入耳机的情况也能进入FM测试项进行,且进入FM测试项没有出现提示:请插入耳机

(vendor/mediatek/proprietary/packages/apps/FMRadio/src/com/android/fmradio/TestFM.java)
import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
-
+import android.widget.Toast;
 import com.android.fmradio.FmService.ServiceBinder;
 
 import java.io.IOException;
@@ -49,6 +49,8 @@ public class TestFM extends Activity implements OnClickListener {
 
     private boolean mIsSearch = false;
 
+    private AudioManager audoManager; 
+
     private Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
@@ -66,6 +68,13 @@ public class TestFM extends Activity implements OnClickListener {
         mSuccess = (Button) findViewById(R.id.success);
         mFail = (Button) findViewById(R.id.fail);
         mSearch = (Button) findViewById(R.id.search);
+        audoManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
+        boolean isHeadsetOn = audoManager.isWiredHeadsetOn();
+        if (!isHeadsetOn){
+            Toast.makeText(this,
+                    R.string.fm_no_headset_text,
+                    Toast.LENGTH_SHORT).show();
+        }
         mSuccess.setOnClickListener(this);
         mSuccess.setEnabled(false);
         mFail.setOnClickListener(this);
@@ -73,7 +82,9 @@ public class TestFM extends Activity implements OnClickListener {
             @Override
             public void onClick(View v) {
                 if (!mIsSearch) {
+                   if(isHeadsetOn){
                     mSuccess.setEnabled(true);
+                    }
                     mIsSearch = true;
                     new Thread() {
                         public void run() {