一:图库中的照片全屏显示

(packages/apps/Gallery2/)

第一种:

diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.javaindex 0592bf4..e2667d3 100755--- a/src/com/android/gallery3d/app/PhotoPage.java+++ b/src/com/android/gallery3d/app/PhotoPage.java@@ -39,6 +39,9 @@ import android.content.pm.ResolveInfo; import android.content.res.Configuration; import android.graphics.Rect; import android.net.Uri;+import android.view.WindowManager;+import android.view.Window;+import android.graphics.Color; import android.nfc.NfcAdapter; import android.nfc.NfcAdapter.CreateBeamUrisCallback; import android.nfc.NfcEvent;@@ -1237,6 +1240,9 @@ public abstract class PhotoPage extends ActivityState implements         if (mShowBars) return;         mShowBars = true;         mOrientationManager.unlockOrientation();+        Window win = mActivity.getWindow();+        win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);+        win.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);         mActionBar.show();         mActivity.getGLRoot().setLightsOutMode(false);         /// M: [FEATURE.MODIFY] automatic layer visibility change @{@@ -1260,7 +1266,21 @@ public abstract class PhotoPage extends ActivityState implements         if (!mShowBars) return;         mShowBars = false;         mActionBar.hide();-        mActivity.getGLRoot().setLightsOutMode(true);+        Window win = mActivity.getWindow();+        win.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);+        int flags = (View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN+ +                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION+ +                    | View.SYSTEM_UI_FLAG_FULLSCREEN+ +                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY+ +                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);+ +        win.getDecorView().setSystemUiVisibility(flags);+        win.setNavigationBarColor(Color.TRANSPARENT);+        //mActivity.getGLRoot().setLightsOutMode(true);         mHandler.removeMessages(MSG_HIDE_BARS);         refreshBottomControlsWhenReady();     }@@ -2168,6 +2188,9 @@ public abstract class PhotoPage extends ActivityState implements             mSensorManager.registerListener(this, proxmitySensor, SensorManager.SENSOR_DELAY_NORMAL);         } // End of Vanzo:hanshengpeng+        Window win = mActivity.getWindow();+        win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);+        win.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);         if (mMuteVideo != null) {             mMuteVideo.setMuteHasPaused(false);             mMuteVideo.needPlayMuteVideo();@@ -2252,6 +2275,9 @@ public abstract class PhotoPage extends ActivityState implements             mScreenNailSet = null;             mScreenNailItem = null;         }+        Window win = mActivity.getWindow();+        win.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);+        win.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);         mActivity.getGLRoot().setOrientationSource(null);         if (mBottomControls != null) mBottomControls.cleanup(); 

第二种:

diff --git a/src/com/android/gallery3d/app/PhotoPage.java b/src/com/android/gallery3d/app/PhotoPage.javaindex 0df2170..9b522cd 100755--- a/src/com/android/gallery3d/app/PhotoPage.java+++ b/src/com/android/gallery3d/app/PhotoPage.java@@ -116,6 +116,9 @@ import com.mediatek.galleryframework.base.BottomControlLayer; import com.mediatek.galleryframework.base.PhotoPageBottomViewControls; import com.mediatek.galleryframework.base.LayerManager; import com.mediatek.galleryframework.base.MediaData;+import android.view.WindowManager;+import android.view.Window;+import android.graphics.Color; /* Vanzo:hanshengpeng on: Sun, 24 Jan 2016 14:44:43 +0800  */ import android.os.SystemProperties;@@ -1183,6 +1186,8 @@ public abstract class PhotoPage extends ActivityState implements         if (mShowBars) return;         mShowBars = true;         mOrientationManager.unlockOrientation();+        Window win = mActivity.getWindow();+        win.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);         mActionBar.show();         mActivity.getGLRoot().setLightsOutMode(false);         /// M: [FEATURE.MODIFY] automatic layer visibility change @{@@ -1206,6 +1211,9 @@ public abstract class PhotoPage extends ActivityState implements         if (!mShowBars) return;         mShowBars = false;         mActionBar.hide();+        Window win = mActivity.getWindow();+        win.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);+        win.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);         mActivity.getGLRoot().setLightsOutMode(true);         mHandler.removeMessages(MSG_HIDE_BARS);         refreshBottomControlsWhenReady();@@ -2165,6 +2173,7 @@ public abstract class PhotoPage extends ActivityState implements             mScreenNailSet = null;             mScreenNailItem = null;         }+         mActivity.getGLRoot().setOrientationSource(null);         if (mBottomControls != null) mBottomControls.cleanup(); 


二:默认壁纸不自动生成到壁纸列表中

(packages/apps/Launcher3/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java

diff --git a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.javaindex e299302..5ac7b2b 100755--- a/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java+++ b/WallpaperPicker/src/com/android/launcher3/WallpaperPickerActivity.java@@ -1059,11 +1059,15 @@ public class WallpaperPickerActivity extends WallpaperCropActivity {          if (partner == null || !partner.hideDefaultWallpaper()) {             // Add an entry for the default wallpaper (stored in system resources)+/*+ * TODO: replace this line with your comment             WallpaperTileInfo defaultWallpaperInfo = Utilities.ATLEAST_KITKAT                     ? getDefaultWallpaper() : getPreKKDefaultWallpaperInfo();             if (defaultWallpaperInfo != null) {                 bundled.add(0, defaultWallpaperInfo);             }+ */+// End of Vanzo:yujianpeng         }         return bundled;     }


三:wifi默认关闭

(packages/apps/Launcher3/)

diff --git a/AndroidManifest.xml b/AndroidManifest.xmlindex df22272..8929289 100755--- a/AndroidManifest.xml+++ b/AndroidManifest.xml@@ -70,6 +70,8 @@               +    +                    diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.javaindex 9366659..7c30d9d 100644--- a/src/com/android/launcher3/Launcher.java+++ b/src/com/android/launcher3/Launcher.java@@ -146,6 +146,9 @@ import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import com.android.featureoption.FeatureOption;+import android.net.NetworkInfo;+import android.net.wifi.WifiManager;+import android.net.ConnectivityManager; // End of Vanzo:hanshengpeng  /**@@ -5163,6 +5166,18 @@ public class Launcher extends Activity         editor.apply();     } +    private void closeWifiGps() {+        // Intent sh = new Intent("com.android.settings.location.CLOSE");+        //sendBroadcast(sh);+        final WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);+        ConnectivityManager con = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);+        NetworkInfo netWork = con.getNetworkInfo(ConnectivityManager.TYPE_WIFI);+        if (wifiManager == null || netWork.isConnected()) {+            return;+        }+        wifiManager.setWifiEnabled(false);+    }+     @Thunk void showFirstRunClings() {         // The two first run cling paths are mutually exclusive, if the launcher is preinstalled         // on the device, then we always show the first run cling experience (or if there is no@@ -5175,6 +5190,7 @@ public class Launcher extends Activity             } else {                 launcherClings.showLongPressCling(true);             }+            closeWifiGps();         }     } 


四:手机插入SD卡时,默认存储器为SD卡

(packages/apps/Settings/)

diff --git a/AndroidManifest.xml b/AndroidManifest.xmlindex c8b252a..bed2c41 100644--- a/AndroidManifest.xml+++ b/AndroidManifest.xml@@ -3173,6 +3173,12 @@ add fp control               -+    +        +            +            +            +        +          diff --git a/src/com/android/settings/UsbBroadCastReceiver.java b/src/com/android/settings/UsbBroadCastReceiver.javanew file mode 100644index 0000000..b578167--- /dev/null+++ b/src/com/android/settings/UsbBroadCastReceiver.java@@ -0,0 +1,26 @@+package com.android.settings;++import android.content.BroadcastReceiver;+import android.content.Context;+import android.content.Intent;+import android.provider.Settings;+import android.util.Log;+import android.os.storage.IMountService;+import com.mediatek.storage.StorageManagerEx;++public class UsbBroadCastReceiver extends BroadcastReceiver {+    String TAG = "UsbBroadCastReceiver";+    String ExternalStoragePath = StorageManagerEx.getExternalStoragePath();+++    public void onReceive(Context context, Intent intent) {++        Log.i(TAG,"receive change request");+        if (Intent.ACTION_MEDIA_MOUNTED.equals(intent.getAction())) {+            StorageManagerEx.setDefaultPath(ExternalStoragePath);+        }+    }++}


五:GPS默认节电模式

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

diff --git a/src/com/android/settings/location/LocationSettings.java b/src/com/android/settings/location/LocationSettings.javaindex 3b71e79..3324c4d 100644--- a/src/com/android/settings/location/LocationSettings.java+++ b/src/com/android/settings/location/LocationSettings.java@@ -385,7 +385,7 @@ public class LocationSettings extends LocationSettingsBase     @Override     public void onSwitchChanged(Switch switchView, boolean isChecked) {         if (isChecked) {-            setLocationMode(android.provider.Settings.Secure.LOCATION_MODE_HIGH_ACCURACY);+            setLocationMode(android.provider.Settings.Secure.LOCATION_MODE_BATTERY_SAVING);         } else {             setLocationMode(android.provider.Settings.Secure.LOCATION_MODE_OFF);         }


六:更改在线壁纸名称

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

diff --git a/src/com/android/settings/WallpaperTypeSettings.java b/src/com/android/settings/WallpaperTypeSettings.javaindex 9046bfb..138167c 100644--- a/src/com/android/settings/WallpaperTypeSettings.java+++ b/src/com/android/settings/WallpaperTypeSettings.java@@ -31,6 +31,8 @@ import com.android.settings.search.SearchIndexableRaw;  import java.util.ArrayList; import java.util.List;+import java.util.Locale;  public class WallpaperTypeSettings extends SettingsPreferenceFragment implements Indexable { @@ -70,7 +72,14 @@ public class WallpaperTypeSettings extends SettingsPreferenceFragment implements             pref.setIntent(prefIntent);             CharSequence label = info.loadLabel(pm);             if (label == null) label = info.activityInfo.packageName;-            pref.setTitle(label);+            String locale = Locale.getDefault().getLanguage();+            if("es".equals(locale )&&label.equals("Online Wallpaper")){ +                pref.setTitle("Fondo de pantalla en línea");+            }else{+                pref.setTitle(label);+            }             parent.addPreference(pref);         }     }


七:相机默认防闪做到60

(vendor/mediatek/proprietary/packages/apps/Camera/res/values/arrays.xml)

diff --git a/mediatek/proprietary/packages/apps/Camera/res/values/arrays.xml b/mediatek/proprietary/packages/apps/Camera/res/values/arrays.xmlindex 607f6a0..a01f714 100755--- a/mediatek/proprietary/packages/apps/Camera/res/values/arrays.xml+++ b/mediatek/proprietary/packages/apps/Camera/res/values/arrays.xml@@ -684,6 +684,7 @@ add 16M 16_9               +        60hz         auto         off         50hz


八:文件管理改变可用空间到4.16G和总容量8G

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

diff --git a/mediatek/proprietary/packages/apps/FileManager/src/com/mediatek/filemanager/FileInfoAdapter.java b/mediatek/proprietary/packages/apps/FileManager/src/com/mediatek/filemanager/FileInfoAdapter.javaindex 47b8813..ccceac6 100644--- a/mediatek/proprietary/packages/apps/FileManager/src/com/mediatek/filemanager/FileInfoAdapter.java+++ b/mediatek/proprietary/packages/apps/FileManager/src/com/mediatek/filemanager/FileInfoAdapter.java@@ -47,7 +47,7 @@ import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.mediatek.filemanager.service.FileManagerService; import com.mediatek.filemanager.utils.FileUtils; import com.mediatek.filemanager.utils.LogUtils;@@ -319,8 +319,10 @@ public class FileInfoAdapter extends BaseAdapter {         if (fileInfo.isDirectory()) {             if (MountPointManager.getInstance().isMountPoint(fileInfo.getFileAbsolutePath())) {                 StringBuilder sb = new StringBuilder();-                String freeSpaceString = FileUtils.sizeToString(MountPointManager.getInstance().getMountPointFreeSpace(fileInfo.getFileAbsolutePath()));-                String totalSpaces = FileUtils.sizeToString(MountPointManager.getInstance().getMountPointTotalSpace(fileInfo.getFileAbsolutePath()));+                //String freeSpaceString = FileUtils.sizeToString(MountPointManager.getInstance().getMountPointFreeSpace(fileInfo.getFileAbsolutePath()));+                String freeSpaceString = "4.16 GB";+                //String totalSpaces = FileUtils.sizeToString(MountPointManager.getInstance().getMountPointTotalSpace(fileInfo.getFileAbsolutePath()));+                String totalSpaces = "8.00 GB";                 LogUtils.d(TAG, "setSizeText, file name = " + fileInfo.getFileName()                         + ",file path = " + fileInfo.getFileAbsolutePath());                 LogUtils.d(TAG, "setSizeText, freeSpace = " + MountPointManager.getInstance().getMountPointFreeSpace(fileInfo.getFileAbsolutePath()) + ",totalSpace = "


九:添加内存信息

(vendor/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/DeviceInfoSettings.java

diff --git a/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/DeviceInfoSettings.java b/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/DeviceInfoSettings.javaindex 4a1252a..ffdfd0d 100755--- a/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/DeviceInfoSettings.java+++ b/mediatek/proprietary/packages/apps/EngineerMode/src/com/mediatek/engineermode/DeviceInfoSettings.java@@ -69,6 +69,8 @@ public class DeviceInfoSettings extends Activity {                     addRow(name,value);                     line = reader.readLine();                 }+                   addRow("RAM:","KINGSTON 1GB");+                   addRow("ROM:","KINGSTON 8GB");             }              reader.close();


十:默认浏览器--------本地浏览器设为默认浏览,打开链接(消费提示音等)不会弹出选择浏览器提示框,默认搜索引擎----Google

(frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java)

diff --git a/base/services/core/java/com/android/server/pm/PackageManagerService.java b/base/services/core/java/com/android/server/pm/PackageManagerService.javaindex bf86b54..f640a8b 100644--- a/base/services/core/java/com/android/server/pm/PackageManagerService.java+++ b/base/services/core/java/com/android/server/pm/PackageManagerService.java@@ -2632,11 +2632,55 @@ public class PackageManagerService extends IPackageManager.Stub {         // are all flushed.  Not really needed, but keeps things nice and         // tidy.         Runtime.getRuntime().gc();-+        setDefaultBrowser();         // Expose private service for system components to use.         LocalServices.addService(PackageManagerInternal.class, new PackageManagerInternalImpl());     } +    private final void setDefaultBrowser(){+        Log.d("debug_default","setDefaultBrowser is called.");+        if(!isFirstBoot()) {+            Log.d("debug_default","not first boot, return");+            return;+        }    +        String str1 = "android.intent.category.DEFAULT";+        String str2 = "android.intent.category.BROWSABLE";+        String str3 = "android.intent.action.VIEW";+        //intent filter+        IntentFilter filter = new IntentFilter(str3);+        filter.addCategory(str1);+        filter.addCategory(str2);+        filter.addDataScheme("http");+        //intent+        Intent intent = new Intent(str3);+        intent.addCategory(str2);+        intent.addCategory(str1);+        Uri uri = Uri.parse("http://");+        intent.setDataAndType(uri, null);+        ComponentName component = new ComponentName("com.android.browser","com.android.browser.BrowserActivity");+        List resolveInfoList = queryIntentActivities(intent,intent.getType(),PackageManager.GET_INTENT_FILTERS, 0);+        int size = resolveInfoList.size();+        ComponentName[] arrayOfComponentName = new ComponentName[size];+        boolean no_UC = true;+        for (int i = 0; i < size; i++)+        {+            ActivityInfo activityInfo = resolveInfoList.get(i).activityInfo;+            String packageName = activityInfo.packageName;+            String className = activityInfo.name;+            if (packageName.equals("com.android.browser")) no_UC = false;+            ComponentName componentName = new ComponentName(packageName, className);+            arrayOfComponentName[i] = componentName;+        }+        if (no_UC){+            Log.d("debug_default","no uc package");+            return;+        }else{+            Log.d("debug_default","uc package is in, set it as Preferred.");+        }+        addPreferredActivity2(filter,IntentFilter.MATCH_CATEGORY_SCHEME, arrayOfComponentName,component);+        Log.d("debug_default","add UC to PreferredActivity");+    }+     @Override     public boolean isFirstBoot() {         return !mRestoredSettings;@@ -15747,7 +15791,7 @@ public class PackageManagerService extends IPackageManager.Stub {         synchronized (mPackages) {             filter.dump(new LogPrinter(Log.INFO, TAG), "  ");             mSettings.editPreferredActivitiesLPw(0).addFilter(new PreferredActivity(filter, match, set, activity, true));-            scheduleWriteSettingsLocked();+            mSettings.writePackageRestrictionsLPr(0);         }     } // End of


十一:浏览器正下载时,点击取消或者中止下载,需要弹出警告:Are you sure to delete it?/¿estás seguro para eliminarlo?

(frameworks/)

diff --git a/base/packages/DocumentsUI/res/values-en-rUS/strings.xml b/base/packages/DocumentsUI/res/values-en-rUS/strings.xmlindex 1170162..e4c52af 100755--- a/base/packages/DocumentsUI/res/values-en-rUS/strings.xml+++ b/base/packages/DocumentsUI/res/values-en-rUS/strings.xml@@ -103,4 +103,8 @@     Hide SD card     Show file size     Hide file size-\ No newline at end of file+    "Tips"+    "Are you sure to delete it?"+    "yes"+    "no"+diff --git a/base/packages/DocumentsUI/res/values-es-rUS/strings.xml b/base/packages/DocumentsUI/res/values-es-rUS/strings.xmlindex 12a62ea..932d5bb 100644--- a/base/packages/DocumentsUI/res/values-es-rUS/strings.xml+++ b/base/packages/DocumentsUI/res/values-es-rUS/strings.xml@@ -16,6 +16,10 @@  +    "Consejos"+    "¿estás seguro para eliminarlo?"+    "si"+    "no"     "Documentos"     "Abrir desde"     "Guardar en"diff --git a/base/packages/DocumentsUI/res/values-zh-rCN/strings.xml b/base/packages/DocumentsUI/res/values-zh-rCN/strings.xmlindex 643921c..8b6bff2 100644--- a/base/packages/DocumentsUI/res/values-zh-rCN/strings.xml+++ b/base/packages/DocumentsUI/res/values-zh-rCN/strings.xml@@ -16,6 +16,10 @@  +    "提示"+    "您确定要删除吗?"+    "删除"+    "取消"     "文档"     "打开文件"     "保存文件"diff --git a/base/packages/DocumentsUI/res/values/strings.xml b/base/packages/DocumentsUI/res/values/strings.xmlindex 23c61fa..fcfa7ab 100755--- a/base/packages/DocumentsUI/res/values/strings.xml+++ b/base/packages/DocumentsUI/res/values/strings.xml@@ -137,4 +137,8 @@     Retry          These files weren\'t copied: %1$s+    Tips+    Are you sure to delete it?+    yes+    no diff --git a/base/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java b/base/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.javaindex 9ae6e29..540f459 100755--- a/base/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java+++ b/base/packages/DocumentsUI/src/com/android/documentsui/DirectoryFragment.java@@ -36,6 +36,7 @@ import static com.android.documentsui.model.DocumentInfo.getCursorString; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningTaskInfo;+import android.app.AlertDialog; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction;@@ -45,6 +46,7 @@ import android.content.ContentProviderClient; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context;+import android.content.DialogInterface; import android.content.Intent; import android.content.Loader; import android.content.res.Resources;@@ -107,6 +109,7 @@ import com.mediatek.common.documentsui.IDocumentsUIExtension; /// M: Add to support drm import com.mediatek.drm.OmaDrmStore; import com.mediatek.drm.OmaDrmUtils;+import android.widget.Toast;  /**  * Display the documents inside a single directory.@@ -633,10 +636,12 @@ public class DirectoryFragment extends Fragment {             return true;         } +        private ArrayList docs;         @Override         public boolean onActionItemClicked(ActionMode mode, MenuItem item) {             final SparseBooleanArray checked = mCurrentView.getCheckedItemPositions();-            final ArrayList docs = Lists.newArrayList();+            //final ArrayList docs = Lists.newArrayList();+            docs = Lists.newArrayList();             final int size = checked.size();             final int id = item.getItemId();             for (int i = 0; i < size; i++) {@@ -685,10 +690,11 @@ public class DirectoryFragment extends Fragment {              } else if (id == R.id.menu_delete) {                 /// M: remove state @{-                final State state = getDisplayState(DirectoryFragment.this);-                state.dirState.remove(mStateKey);+             //  final State state = getDisplayState(DirectoryFragment.this);+              //  state.dirState.remove(mStateKey);                 /// @}-                onDeleteDocuments(docs);+                deleteDialog();+            //  onDeleteDocuments(docs);                 mode.finish();                 return true; @@ -709,7 +715,24 @@ public class DirectoryFragment extends Fragment {                 return false;             }         }-+        private void deleteDialog(){+        new AlertDialog.Builder(getActivity())+        .setTitle(R.string.custom_tips)+        .setMessage(R.string.message)+        .setPositiveButton(R.string.confirm,+        new DialogInterface.OnClickListener() {++@Override+public void onClick(DialogInterface arg0, int arg1) {+// TODO Auto-generated method stub+final State state = getDisplayState(DirectoryFragment.this);+state.dirState.remove(mStateKey);+onDeleteDocuments(docs);+}+})+        .setNegativeButton(R.string.cancel,null).show();+       +        }         @Override         public void onDestroyActionMode(ActionMode mode) {             /// M: restore action mode @{


十二:改关机时间长短

(frameworks/base/services/core/java/com/android/server/power/ShutdownThread.java)

diff --git a/base/services/core/java/com/android/server/power/ShutdownThread.java b/base/services/core/java/com/android/server/power/ShutdownThread.javaindex 710bcc2..9f8be2e 100644--- a/base/services/core/java/com/android/server/power/ShutdownThread.java+++ b/base/services/core/java/com/android/server/power/ShutdownThread.java@@ -143,7 +143,7 @@ public final class ShutdownThread extends Thread {     private static int mShutdownFlow;      // Shutdown Animation-    private static final int MIN_SHUTDOWN_ANIMATION_PLAY_TIME = 5 * 1000;+    private static final int MIN_SHUTDOWN_ANIMATION_PLAY_TIME = 10 * 1000;     // CU/CMCC operator require 3-5s     private static long beginAnimationTime = 0;     private static long endAnimationTime = 0;@@ -159,7 +159,7 @@ public final class ShutdownThread extends Thread {      * 2: bypass radio off      * 3: bypass both      * */-+    private static int screen_turn_off_time = 10 * 1000;     private static final boolean mSpew = true;   //debug enable      private static IBootAnimExt mIBootAnim = null; // for boot animation@@ -526,7 +526,7 @@ public final class ShutdownThread extends Thread {          beginAnimationTime = 0;         boolean mShutOffAnimation = configShutdownAnimation(context);-        int screenTurnOffTime = getScreenTurnOffTime(context);+        int screenTurnOffTime = screen_turn_off_time;         synchronized (mEnableAnimatingSync) {             if (mEnableAnimating) {                 if (mShutOffAnimation) {


十三:wifi热点上限数

(frameworks/base/core/java/android/provider/Settings.java)

diff --git a/base/core/java/android/provider/Settings.java b/base/core/java/android/provider/Settings.javaindex 4169d8c..78c167d 100644--- a/base/core/java/android/provider/Settings.java+++ b/base/core/java/android/provider/Settings.java@@ -3528,7 +3528,7 @@ public final class Settings {          * Wifi hotspot default client number          * @hide          */-        public static final int WIFI_HOTSPOT_DEFAULT_CLIENT_NUM = 6;+        public static final int WIFI_HOTSPOT_DEFAULT_CLIENT_NUM = 5;          /**          * The max client num of hotspot


十四:默认打开CB(小区广播)消息

(modems/lwtg/custom/service/nvram/nvram_cust_pack.c)

diff --git a/lwtg/custom/service/nvram/nvram_cust_pack.c b/lwtg/custom/service/nvram/nvram_cust_pack.cindex fd1f347..9d9ad3a 100644--- a/lwtg/custom/service/nvram/nvram_cust_pack.c+++ b/lwtg/custom/service/nvram/nvram_cust_pack.c@@ -1016,7 +1016,7 @@ kal_uint8 const COMMON_NVRAM_EF_SMSAL_COMMON_PARAM_DEFAULT[] = #ifdef __UE_SIMULATOR__     0x01, 0x01,         /* CB setting - ON */ #else-    0x00, 0x01,         /* CB setting */+    0x01, 0x01,         /* CB setting */ #endif     0xFF,               /* AT default profile ID.0xFF:invalid profile ID and SMSAL auto select profile id */     0x00,               /* First Octet */

十五: 进入工程模式,进入 "*#*#3646633#*#*"-->engineer mode---->Telephony---》Fast Dormancy--》ConfigFD--》默认选择第三项(Turn on R8 FD&Turn off Legacy FD)。(如附件 是在MTK平台下)Android6.0 MTK 需求文档(五)_第1张图片

(modems/lwtg/custom/service/nvram/nvram_data_items.c

diff --git a/lwtg/custom/service/nvram/nvram_data_items.c b/lwtg/custom/service/nvram/nvram_data_items.cindex c8ba4d6..bcb406c 100644--- a/lwtg/custom/service/nvram/nvram_data_items.c+++ b/lwtg/custom/service/nvram/nvram_data_items.c@@ -3393,6 +3393,7 @@ typedef enum  * Define necessary default values for each logical data item.  */ +static kal_uint8 const NVRAM_EF_PS_CONFORMANCE_TESTMODE_REVISE_DEFAULT[] ={ 0x00, 0x00, 0x40, 0x00 }; kal_uint8 const NVRAM_EF_ZERO_DEFAULT[] = { 0x00 }; kal_uint8 const NVRAM_EF_FF_DEFAULT[] = { 0xFF }; @@ -10685,7 +10686,7 @@ ltable_entry_struct logical_data_item_table_core[] = #ifdef __UE_SIMULATOR__         NVRAM_NORMAL(NVRAM_EF_PS_CONFORMANCE_TESTMODE_DEFAULT), #else-        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),+       NVRAM_NORMAL(NVRAM_EF_PS_CONFORMANCE_TESTMODE_REVISE_DEFAULT), #endif         NVRAM_CATEGORY_USER,         NVRAM_ATTR_AVERAGE,diff --git a/lwtg/interface/service/nvram/nvram_editor_data_item.h b/lwtg/interface/service/nvram/nvram_editor_data_item.hindex 6bca59b..f69ff68 100644--- a/lwtg/interface/service/nvram/nvram_editor_data_item.h+++ b/lwtg/interface/service/nvram/nvram_editor_data_item.h@@ -2776,7 +2776,7 @@ #endif  -#define NVRAM_EF_PS_CONFORMANCE_TESTMODE_LID_VERNO           "000"+#define NVRAM_EF_PS_CONFORMANCE_TESTMODE_LID_VERNO           "001" #define NVRAM_EF_MOBILE_BROADBAND_PROVISION_CONTEXT_LID_VERNO "000"   //__MOBILE_BROADBAND_PROVISION_CONTEXT__ #define NVRAM_EF_MSQ_LIST_LID_VERNO                          "001"    //__MEDIATEK_SMART_QOS__ (MSQ) 

十六: 通讯录新建联系人默认保存在sim卡(点击新建,弹出两个选项sim,phone,默认选sim)

packages/apps/Contacts/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java

diff --git a/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java b/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.javaindex 00d1fbc..6e4c882 100644--- a/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java+++ b/src/com/android/contacts/activities/ContactEditorAccountsChangedActivity.java@@ -135,21 +135,19 @@ public class ContactEditorAccountsChangedActivity extends Activity {         if (numAccounts >= 2) {             // When the user has 2+ writable accounts, show a list of accounts so the user can pick             // which account to create a contact in.-            setContentView(R.layout.contact_editor_accounts_changed_activity_with_picker);--            final TextView textView = (TextView) findViewById(R.id.text);             /// M:-            textView.setText(getString(R.string.store_contact_to));--            final Button button = (Button) findViewById(R.id.add_account_button);-            button.setText(getString(R.string.add_new_account));-            button.setOnClickListener(mAddAccountClickListener);--            final ListView accountListView = (ListView) findViewById(R.id.account_list);             mAccountListAdapter = new AccountsListAdapter(this,                     AccountListFilter.ACCOUNTS_CONTACT_WRITABLE);-            accountListView.setAdapter(mAccountListAdapter);-            accountListView.setOnItemClickListener(mAccountListItemClickListener);+            String accountType = mAccountListAdapter.getItem(0).type.toString();+            if (AccountTypeUtils.isAccountTypeIccCard(accountType)) {+                AccountWithDataSet ads = mAccountListAdapter.getItem(0);++                mSubId = SubInfoUtils.getInvalidSubId();+                if (ads instanceof AccountWithDataSetEx) {+                    mSubId = ((AccountWithDataSetEx) ads).getSubId();+                }+                checkPHBStateAndSaveAccount(0);+            }         } else if (numAccounts == 1) {             // If the user has 1 writable account we will just show the user a message with 2             // possible action buttons.


十七:第一次开机是如果无sim卡加提示

(packages/apps/Launcher3/)

diff --git a/AndroidManifest.xml b/AndroidManifest.xmlindex 73f01e2..0b12bea 100644--- a/AndroidManifest.xml+++ b/AndroidManifest.xml@@ -64,6 +64,7 @@               +                   diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.javaindex 8a0ce6a..b959c93 100644--- a/src/com/android/launcher3/Launcher.java+++ b/src/com/android/launcher3/Launcher.java@@ -33,7 +33,9 @@ import android.annotation.TargetApi; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityOptions;+import android.app.Dialog; import android.app.AlertDialog;+import android.app.AlertDialog.Builder; import android.app.SearchManager; import android.app.Service; import android.appwidget.AppWidgetHostView;@@ -102,6 +104,7 @@ import android.view.animation.OvershootInterpolator; import android.view.inputmethod.InputMethodManager; import android.widget.Advanceable; import android.widget.FrameLayout;+import android.telephony.TelephonyManager; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast;@@ -498,6 +501,7 @@ public class Launcher extends Activity     ///M.      private String mCurrentQsbPkgName;+    private TelephonyManager telMgr;
+    private int first_boot = 0;      @Override     protected void onCreate(Bundle savedInstanceState) {@@ -522,6 +526,17 @@ public class Launcher extends Activity          super.onCreate(savedInstanceState);+ if(first_boot == 0){+            telMgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);+            Log.i("rmy", "telMgr()="+telMgr.getSimState());+            if (telMgr.getSimState() == telMgr.SIM_STATE_READY) {+            Log.i("rmy", "良好");+            } else if (telMgr.getSimState() == telMgr.SIM_STATE_ABSENT) {+               Log.i("rmy", "无SIM卡");+               checkSimDialog(this);+            } else {+               Log.i("rmy", "SIM卡被锁定或未知的状态");+            }+ }         LauncherAppState.setApplicationContext(getApplicationContext());         LauncherAppState app = LauncherAppState.getInstance(); @@ -649,6 +664,21 @@ public class Launcher extends Activity         }     } +    private void checkSimDialog(final Context context) {+        AlertDialog.Builder simDialog = new AlertDialog.Builder(context);+        simDialog.setTitle("Preguntar");+        simDialog.setMessage("SIM invalida");+        simDialog.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {+            @Override+            public void onClick(DialogInterface dialog, int which) {+                dialog.dismiss();+            }+        });+        AlertDialog dialog = simDialog.create();+        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);+        dialog.show();+    }+     @Override     public void onSettingsChanged(String settings, boolean value) {         if (Utilities.ALLOW_ROTATION_PREFERENCE_KEY.equals(settings)) {


 

十八: wifi要内置两个名字分别为MOVISTAR WIFI and VIVO-WIFI 的无线网。安全类型为802.1XEAP.密码为空。 类似用户进入wifi界面,手机创建一个wifi后的效果。如附件图片

Android6.0 MTK 需求文档(五)_第2张图片

(packages/apps/Settings/)

diff --git a/src/com/android/settings/net/DataUsageMeteredSettings.java b/src/com/android/settings/net/DataUsageMeteredSettings.javaindex ec1dd38..56ab5e8 100644--- a/src/com/android/settings/net/DataUsageMeteredSettings.java+++ b/src/com/android/settings/net/DataUsageMeteredSettings.java@@ -118,6 +118,11 @@ public class DataUsageMeteredSettings extends SettingsPreferenceFragment impleme         final NetworkTemplate template = NetworkTemplate.buildTemplateWifi(networkId);         final MeteredPreference pref = new MeteredPreference(context, template);         pref.setTitle(removeDoubleQuotes(networkId));+          if (networkId.contains("MOVISTAR WIFI")) {+              pref.setTitle("MOVISTAR WIFI");+          } else if (networkId.contains("VIVO WIFI")) {+              pref.setTitle("VIVO WIFI");+          }         return pref;     } @@ -207,6 +212,11 @@ public class DataUsageMeteredSettings extends SettingsPreferenceFragment impleme                              data = new SearchIndexableRaw(context);                             data.title = removeDoubleQuotes(networkId);+                            if (networkId.contains("MOVISTAR WIFI")) {+                                 data.title = "MOVISTAR WIFI";+                            } else if (networkId.contains("VIVO WIFI")) {+                                 data.title = "VIVO WIFI";+                            }                             data.screenTitle = res.getString(R.string.data_usage_menu_metered);                             result.add(data);                         }diff --git a/src/com/android/settings/wifi/WifiConfigController.java b/src/com/android/settings/wifi/WifiConfigController.javaindex 8a241be..e91613c 100644--- a/src/com/android/settings/wifi/WifiConfigController.java+++ b/src/com/android/settings/wifi/WifiConfigController.java@@ -328,6 +328,10 @@ public class WifiConfigController implements TextWatcher,                 }                 if (mAccessPoint.isSaved() || mAccessPoint.isActive()) {                     mConfigUi.setForgetButton(res.getString(R.string.wifi_forget));+                    if (!mAccessPoint.toString().contains("MOVISTAR WIFI")+                            && !mAccessPoint.toString().contains("VIVO WIFI")) {+                         mConfigUi.setForgetButton(res.getString(R.string.wifi_forget));+                     }                 }             }         }diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.javaindex 03ab864..c0eb2d1 100644--- a/src/com/android/settings/wifi/WifiSettings.java+++ b/src/com/android/settings/wifi/WifiSettings.java@@ -758,7 +758,8 @@ public class WifiSettings extends RestrictedSettingsFragment                 int index = 0;                 for (AccessPoint accessPoint : accessPoints) {                     // Ignore access points that are out of range.-                    if (accessPoint.getLevel() != -1) {+                    if (accessPoint.getLevel() != -1 || accessPoint.toString().contains("MOVISTAR WIFI")+                            || accessPoint.toString().contains("VIVO WIFI")) {                         hasAvailableAccessPoints = true;                         if (accessPoint.getTag() != null) {                             final Preference pref = (Preference) accessPoint.getTag();
(vendor/mediatek/proprietary/hardware/connectivity/wlan/config/mtk-wpa_supplicant-overlay.conf)

diff --git a/mediatek/proprietary/hardware/connectivity/wlan/config/mtk-wpa_supplicant-overlay.conf b/mediatek/proprietary/hardware/connectivity/wlan/config/mtk-wpa_supplicant-overlay.confindex f6b7121..4d5d52b 100644--- a/mediatek/proprietary/hardware/connectivity/wlan/config/mtk-wpa_supplicant-overlay.conf+++ b/mediatek/proprietary/hardware/connectivity/wlan/config/mtk-wpa_supplicant-overlay.conf@@ -1,3 +1,20 @@ p2p_no_group_iface=1 driver_param=use_p2p_group_interface=1 wowlan_triggers=disconnect+overlay_loaded=1+network={+    ssid="MOVISTAR WIFI"+        key_mgmt=WPA-EAP IEEE8021X+        eap=SIM+        disabled=1+        priority=1+        read_only=1+   }+network={+    ssid="VIVO WIFI"+        key_mgmt=WPA-EAP IEEE8021X+        eap=SIM+        disabled=1+        priority=1+        read_only=1+   }


十九: 主菜单--》设置--》语言和输入法--》Android keyboard 右边的设置图标---》show correction suggestions--》改成默认选中always hide

(packages/inputmethods/)

diff --git a/LatinIME/java/res/xml/prefs_screen_correction.xml b/LatinIME/java/res/xml/prefs_screen_correction.xmlindex a943dc1..1653b0f 100644--- a/LatinIME/java/res/xml/prefs_screen_correction.xml+++ b/LatinIME/java/res/xml/prefs_screen_correction.xml@@ -51,7 +51,7 @@         android:key="show_suggestions"         android:summary="@string/prefs_show_suggestions_summary"         android:title="@string/prefs_show_suggestions"-        android:defaultValue="true"+        android:defaultValue="false"         android:persistent="true" />     


二十:浏览器下载的文件, 默认保存在”Downloads“名字的文件夹

(vendor/mediatek/proprietary/packages/apps/Browser/ext/src/com/mediatek/browser/ext/DefaultBrowserSettingExt.java

diff --git a/mediatek/proprietary/packages/apps/Browser/ext/src/com/mediatek/browser/ext/DefaultBrowserSettingExt.java b/mediatek/proprietary/packages/apps/Browser/ext/src/com/mediatek/browser/ext/DefaultBrowserSettingExt.javaindex 475bbb8..02dc88c 100755--- a/mediatek/proprietary/packages/apps/Browser/ext/src/com/mediatek/browser/ext/DefaultBrowserSettingExt.java+++ b/mediatek/proprietary/packages/apps/Browser/ext/src/com/mediatek/browser/ext/DefaultBrowserSettingExt.java@@ -21,7 +21,7 @@ public class DefaultBrowserSettingExt implements IBrowserSettingExt {     private static final String TAG = "DefaultBrowserSettingsExt";      private static final String DEFAULT_DOWNLOAD_DIRECTORY = "/storage/sdcard0/MyFavorite";-    private static final String DEFAULT_MY_FAVORITE_FOLDER = "/MyFavorite";+    private static final String DEFAULT_MY_FAVORITE_FOLDER = "/Download";      private static final String PREF_SEARCH_ENGINE = "search_engine";     private static final String DEFAULT_SEARCH_ENGIN = "google";


二十一:UA string 需要加上项目名Gomoible GO1003 (根据具体的项目名称修改),查看的网址为:whatsmyuseragent.com

(vendor/mediatek/proprietary/packages/apps/Browser/src/com/android/browser/BrowserSettings.java

diff --git a/mediatek/proprietary/packages/apps/Browser/src/com/android/browser/BrowserSettings.java b/mediatek/proprietary/packages/apps/Browser/src/com/android/browser/BrowserSettings.javaindex 5079bc1..561329f 100755--- a/mediatek/proprietary/packages/apps/Browser/src/com/android/browser/BrowserSettings.java+++ b/mediatek/proprietary/packages/apps/Browser/src/com/android/browser/BrowserSettings.java@@ -363,7 +363,7 @@ public class BrowserSettings implements OnSharedPreferenceChangeListener,         sBrowserSettingExt = Extensions.getSettingPlugin(mContext);         sBrowserSettingExt.setStandardFontFamily(settings, mPrefs); -        String ua = mCustomUserAgents.get(settings);+        String ua = "Mozilla/5.0 (Linux; Android 6.0; GOMOBILE GO1003 Build/MRA58K) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/44.0.2403.119 Mobile Safari/537.36";         if (ua != null) {             settings.setUserAgentString(ua);         } else {

二十二: 添加通道( 50,919,921,4370),通道号和名字都设为 50,919,921,4370。(通道-channel(英文)-canal(西班牙语)),默认都是enable的,并且默认可以接受所有语言的。

(packages/providers/)

diff --git a/TelephonyProvider/src/com/android/providers/telephony/CbProvider.java b/TelephonyProvider/src/com/android/providers/telephony/CbProvider.javaindex 3d7ac48..c32acf5 100755--- a/TelephonyProvider/src/com/android/providers/telephony/CbProvider.java+++ b/TelephonyProvider/src/com/android/providers/telephony/CbProvider.java@@ -134,8 +134,10 @@ public class CbProvider extends ContentProvider {             // break;         case URL_CHANNEL:             qb.setTables(CbDatabaseHelper.CHANNEL_TABLE);+            if (selection == null || !selection.contains("sub_id")) {             qb.appendWhere("(sub_id = " + SmsProvider.getSubIdFromUri(url)                     + ")");+            }             break;         case URL_CONVERSATION:             // qb.setTables(CbDatabaseHelper.CONVERSATION_TABLE);
(vendor/
diff --git a/mediatek/proprietary/packages/apps/Mms/AndroidManifest.xml b/mediatek/proprietary/packages/apps/Mms/AndroidManifest.xmlindex 1e224e1..cdb7bce 100755--- a/mediatek/proprietary/packages/apps/Mms/AndroidManifest.xml+++ b/mediatek/proprietary/packages/apps/Mms/AndroidManifest.xml@@ -88,6 +88,7 @@               +           +        +          @@ -534,6 +538,12 @@ add for MClock update sms database                                           +            +                +                               diff --git a/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ConversationListItem.java b/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ConversationListItem.javaindex a30251a..9b25f26 100644--- a/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ConversationListItem.java+++ b/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ConversationListItem.java@@ -558,7 +558,7 @@ public class ConversationListItem extends RelativeLayout implements Contact.Upda                     .getString(R.string.cb_default_channel_name);         }         try {-            from = name + "(" + channelId + ")";+            from = name;         } catch (NumberFormatException e) {             MmsLog.e(TAG, "format recipient number error!");         }diff --git a/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessageListActivity.java b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessageListActivity.javaindex 3871434..57aa812 100755--- a/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessageListActivity.java+++ b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessageListActivity.java@@ -369,8 +369,7 @@ public class CBMessageListActivity extends Activity implements DraftCache.OnDraf                             .getString(R.string.cb_default_channel_name));                 } else {                     actionBar.setTitle(MmsApp.getApplication().getApplicationContext()-                            .getString(R.string.cb_default_channel_name)-                            + "(" + mConversation.getRecipients().get(0).getNumber() + ")");+                            .getString(R.string.cb_default_channel_name));                 }              default:@@ -402,8 +401,7 @@ public class CBMessageListActivity extends Activity implements DraftCache.OnDraf          ActionBar actionBar = getActionBar();         actionBar.setTitle(MmsApp.getApplication().getApplicationContext().getString(-            R.string.cb_default_channel_name)-            + "(" + mConversation.getRecipients().get(0).getNumber() + ")");+            R.string.cb_default_channel_name));         actionBar.setDisplayHomeAsUpEnabled(true);          // We used to refresh the DraftCache here, butdiff --git a/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessageReceiver.java b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessageReceiver.javaindex 7415026..816a1f5 100755--- a/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessageReceiver.java+++ b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessageReceiver.java@@ -64,6 +64,8 @@ import com.android.mms.MmsApp; import com.android.mms.util.MmsLog; import com.mediatek.mms.util.PermissionCheckUtil; +import com.android.internal.telephony.TelephonyIntents;+ /**  * M:  * Handle incoming SMSes.  Just dispatches the work off to a Service.@@ -98,7 +100,14 @@ public class CBMessageReceiver extends BroadcastReceiver {                         + intent.getAction() + ", result = " + getResultCode());          intent.setClass(context, CBMessageReceiverService.class);+/*          intent.putExtra("result", getResultCode());+ */+        android.util.Log.d(" CBMessageReceiver ", " CBMessageReceiver.onReceiveWithPrivilege 97 ");+        if (!TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(intent.getAction())) {+            intent.putExtra("result", getResultCode());+        }+// End of         beginStartingService(context, intent);     } diff --git a/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessageReceiverService.java b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessageReceiverService.javaindex d3251c7..1e883cc 100755--- a/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessageReceiverService.java+++ b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessageReceiverService.java@@ -81,6 +81,24 @@ import com.mediatek.mms.ext.IOpCBMessageReceiverServiceExt; import com.mediatek.opmsg.util.OpMessageUtils;  import android.telephony.SubscriptionManager;+import com.mediatek.mms.util.MmsDialogNotifyUtils;+/*+ */+import android.provider.Telephony;+import com.android.internal.telephony.gsm.SmsBroadcastConfigInfo;+import android.content.ContentValues;+import android.database.Cursor;+import android.util.Log;+import com.android.internal.telephony.IccCardConstants;+import com.android.internal.telephony.TelephonyIntents;+import android.telephony.SmsManager;+import android.provider.Telephony.Sms.Intents;+import android.app.AlertDialog;+import android.content.DialogInterface;+import android.view.WindowManager;+import java.text.SimpleDateFormat;+import java.util.Date;+// End of Vanzo:tanglei  /**  * M:@@ -97,6 +115,19 @@ public class CBMessageReceiverService extends Service {      private static final Uri MESSAGE_URI = Telephony.SmsCb.CONTENT_URI;     private static final int DEFAULT_SUB_ID = 1;+/* + */+    private static final int MESSAGE_SET_STATE = 33;+    private static final int MESSAGE_SET_CONFIG = 32;+    private static final String KEYID = "_id";+    private static final String NAME = "name";+    private static final String NUMBER = "number";+    private static final String ENABLE = "enable";+    private static final String SUBID = "sub_id";+    private static final Uri CHANNEL_URI = Uri.parse("content://cb/channel");+    private static final int EVENT_RETRY_ADD_CHANNEL_TIME_OUT = 101;+    private static boolean isAddingDefaultChannel = false;+// End of      public Handler mToastHandler = new Handler() {         @Override@@ -159,6 +190,7 @@ public class CBMessageReceiverService extends Service {         public void handleMessage(Message msg) {             int serviceId = msg.arg1;             Intent intent = (Intent) msg.obj;+            Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.ServiceHandler.handleMessage 185 serviceId="+serviceId+" msg.what="+msg.what+" intent="+intent); // modify by mtk_debug 2015-3-19;             if (intent != null) {                 String action = intent.getAction();                 // NEED Replace with CB ACTION@@ -166,12 +198,266 @@ public class CBMessageReceiverService extends Service {                     handleCBMessageReceived(intent);                 }             }++            Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.ServiceHandler.handleMessage 162 "); // modify by mtk_debug 2015-3-05;+            if(TelephonyIntents.ACTION_SIM_STATE_CHANGED.equals(intent.getAction())){+                Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.ServiceHandler.handleMessage receiver a ACTION_SIM_STATE_CHANGED 164 "); // modify by mtk_debug 2015-3-05;+                synchronized(this){+                    handleSIMStateChangedReceived(intent);+                }+            }             // NOTE: We MUST not call stopSelf() directly, since we need to             // make sure the wake lock acquired by AlertReceiver is released.-            CBMessageReceiver.finishStartingService(CBMessageReceiverService.this, serviceId);+            if(!isAddingDefaultChannel){+                CBMessageReceiver.finishStartingService(CBMessageReceiverService.this, serviceId);+            }         }     } +/* + */+    private void handleSIMStateChangedReceived(Intent intent) {+        Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived 191 "); // modify by mtk_debug 2015-3-05;+        int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY, SubscriptionManager.INVALID_SUBSCRIPTION_ID);+        String stateExtra = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE);+        // boolean stateExtra = intent.getBooleanExtra("ready",false);+        Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived 214 stateExtra="+stateExtra); +        if(IccCardConstants.INTENT_VALUE_ICC_READY.equals(stateExtra)){+            // if(stateExtra){+            if(queryIfChannelInDatabase(subId,"919",919))+            {+                Log.d(TAG, " CBMessageReceiverService.handleSIMStateChangedReceived subid="+subId+" channel1 50 in database");+                isAddingDefaultChannel=false;+            }else{+                Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived subid="+subId+" channel1 50 not in database 699 "); // modify by mtk_debug 2015-3-02;+                if(SmsManager.getSmsManagerForSubscriptionId(subId).activateCellBroadcastSms(true))/*这里会先把CB打开*/+                { +                    Log.d(TAG, " CBMessageReceiverService.handleSIMStateChangedReceived addCustomChanneltoList(subId,Channel1,50);");+                    addCustomChanneltoList(subId,"919",919);+                    isAddingDefaultChannel=false;++                    //请注意:如果贵司做了开机默认关闭小区广播的feature,请取消下面这句code的注释+                    //SmsManager.getSmsManagerForSubscriptionId(subId).activateCellBroadcastSms(false); //用于关闭小区广播开关++                }else{++                    Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived activateCellBroadcastSms fail 716 "); // modify by mtk_debug 2015-3-05;+                    //add retry+                    if (!mServiceHandler.hasMessages(EVENT_RETRY_ADD_CHANNEL_TIME_OUT)) {+                        Message msg = mServiceHandler.obtainMessage(EVENT_RETRY_ADD_CHANNEL_TIME_OUT,intent);+                        Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived send retry message 235 "); // modify by mtk_debug 2015-3-19;+                        mServiceHandler.sendMessageDelayed(msg, 2000);+                        isAddingDefaultChannel=true;+                    }+++                }++            }+            if(queryIfChannelInDatabase(subId,"50",50))+            {+                Log.d(TAG, " CBMessageReceiverService.handleSIMStateChangedReceived subid="+subId+" channel1 50 in database");+                isAddingDefaultChannel=false;+            }else{+                Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived subid="+subId+" channel1 50 not in database 699 "); // modify by mtk_debug 2015-3-02;+                if(SmsManager.getSmsManagerForSubscriptionId(subId).activateCellBroadcastSms(true))/*这里会先把CB打开*/+                { +                    Log.d(TAG, " CBMessageReceiverService.handleSIMStateChangedReceived addCustomChanneltoList(subId,Channel1,50);");+                    addCustomChanneltoList(subId,"50",50);+                    isAddingDefaultChannel=false;++                    //请注意:如果贵司做了开机默认关闭小区广播的feature,请取消下面这句code的注释+                    //SmsManager.getSmsManagerForSubscriptionId(subId).activateCellBroadcastSms(false); //用于关闭小区广播开关++                }else{++                    Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived activateCellBroadcastSms fail 716 "); // modify by mtk_debug 2015-3-05;+                    //add retry+                    if (!mServiceHandler.hasMessages(EVENT_RETRY_ADD_CHANNEL_TIME_OUT)) {+                        Message msg = mServiceHandler.obtainMessage(EVENT_RETRY_ADD_CHANNEL_TIME_OUT,intent);+                        Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived send retry message 235 "); // modify by mtk_debug 2015-3-19;+                        mServiceHandler.sendMessageDelayed(msg, 2000);+                        isAddingDefaultChannel=true;+                    }+++                }++            }+            if(queryIfChannelInDatabase(subId,"4370",4370))+            {+                Log.d(TAG, " CBMessageReceiverService.handleSIMStateChangedReceived subid="+subId+" channel1 50 in database");+                isAddingDefaultChannel=false;+            }else{+                Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived subid="+subId+" channel1 50 not in database 699 "); // modify by mtk_debug 2015-3-02;+                if(SmsManager.getSmsManagerForSubscriptionId(subId).activateCellBroadcastSms(true))/*这里会先把CB打开*/+                { +                    Log.d(TAG, " CBMessageReceiverService.handleSIMStateChangedReceived addCustomChanneltoList(subId,Channel1,50);");+                    addCustomChanneltoList(subId,"4370",4370);+                    isAddingDefaultChannel=false;++                    //请注意:如果贵司做了开机默认关闭小区广播的feature,请取消下面这句code的注释+                    //SmsManager.getSmsManagerForSubscriptionId(subId).activateCellBroadcastSms(false); //用于关闭小区广播开关++                }else{++                    Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived activateCellBroadcastSms fail 716 "); // modify by mtk_debug 2015-3-05;+                    //add retry+                    if (!mServiceHandler.hasMessages(EVENT_RETRY_ADD_CHANNEL_TIME_OUT)) {+                        Message msg = mServiceHandler.obtainMessage(EVENT_RETRY_ADD_CHANNEL_TIME_OUT,intent);+                        Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived send retry message 235 "); // modify by mtk_debug 2015-3-19;+                        mServiceHandler.sendMessageDelayed(msg, 2000);+                        isAddingDefaultChannel=true;+                    }+++                }++            }+            if(queryIfChannelInDatabase(subId,"921",921))+            {+                Log.d(TAG, " CBMessageReceiverService.handleSIMStateChangedReceived subid="+subId+" channel1 50 in database");+                isAddingDefaultChannel=false;+            }else{+                Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived subid="+subId+" channel1 50 not in database 699 "); // modify by mtk_debug 2015-3-02;+                if(SmsManager.getSmsManagerForSubscriptionId(subId).activateCellBroadcastSms(true))/*这里会先把CB打开*/+                { +                    Log.d(TAG, " CBMessageReceiverService.handleSIMStateChangedReceived addCustomChanneltoList(subId,Channel1,50);");+                    addCustomChanneltoList(subId,"921",921);+                    isAddingDefaultChannel=false;++                    //请注意:如果贵司做了开机默认关闭小区广播的feature,请取消下面这句code的注释+                    //SmsManager.getSmsManagerForSubscriptionId(subId).activateCellBroadcastSms(false); //用于关闭小区广播开关++                }else{++                    Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived activateCellBroadcastSms fail 716 "); // modify by mtk_debug 2015-3-05;+                    //add retry+                    if (!mServiceHandler.hasMessages(EVENT_RETRY_ADD_CHANNEL_TIME_OUT)) {+                        Message msg = mServiceHandler.obtainMessage(EVENT_RETRY_ADD_CHANNEL_TIME_OUT,intent);+                        Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.handleSIMStateChangedReceived send retry message 235 "); // modify by mtk_debug 2015-3-19;+                        mServiceHandler.sendMessageDelayed(msg, 2000);+                        isAddingDefaultChannel=true;+                    }+++                }++            }++        }++    }++    private void addCustomChanneltoList(int mSubId,String channelName,int channelNum){+        Log.d(TAG, "addCustomChanneltoList: mSubId=" + mSubId+                + ", channelName= " + channelName + ", channelNum= " + channelNum);++        SmsBroadcastConfigInfo[] objectList = new SmsBroadcastConfigInfo[1];+        objectList[0] = new SmsBroadcastConfigInfo(channelNum,channelNum, -1, -1, true);++        Log.d(TAG, "addCustomChanneltoList: setCellBroadcastSmsConfig");+        //SmsManagerEx.getDefault().setCellBroadcastSmsConfig(objectList, objectList, mSimId);+        boolean isSetConfigSuccess = SmsManager.getSmsManagerForSubscriptionId(mSubId).setCellBroadcastSmsConfig(objectList, objectList);+        if(isSetConfigSuccess){+            Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.addCustomChanneltoList set channel " +channelNum +" success 784 "); // modify by mtk_debug 2015-3-05;+            addChannelToDatabase(mSubId,channelName,channelNum);+        }else{+            Log.d(" CBMessageReceiverService ", " CBMessageReceiverService.addCustomChanneltoList set channel "+ channelNum +" failed 786 "); // modify by mtk_debug 2015-3-05;+        }+++        Log.d(TAG, " CBMessageReceiverService addCustomChanneltoList: function end");+    }++++    private boolean addChannelToDatabase(int mSubId,String channelName,int channelNum){+            // ClearChannel();+        Log.d(TAG, "addChannelToDatabase: mSubId=" + mSubId+                + ", channelName= " + channelName + ", channelNum= " + channelNum);+        String[] projection = new String[] { NUMBER, SUBID};+        String SELECTIONNum = "(" + NUMBER + " = " + channelNum + ")"; +        String SELECTIONid = "(" + SUBID + " = " + mSubId + ")";+        Cursor cursornum = null;+        Cursor cursorid = null;++        Cursor cursorzz = this.getContentResolver().query(CHANNEL_URI,+                projection,+                NUMBER + " = ? AND " ++                SUBID + " = ?",+                new String[] {String.valueOf(channelNum), String.valueOf(mSubId)},+                null);+        Log.d(TAG, "addChannelToDatabase: cursor.getCount"+cursorzz.getCount());+        if(cursorzz.getCount() == 0){//if ((cursornum.getCount() == 0)&&(cursorid.getCount() == 0)){ +            Log.d(" CBMessageReceiverService ", " SmsReceiverService.addChannelToDatabase add mSubId=" + mSubId+                    + ", channelName= " + channelName + ", channelNum= " + channelNum +"to database"); // modify by mtk_debug 2015-3-05;+            ContentValues values = new ContentValues();+            values.put(NAME,channelName);+            values.put(NUMBER, channelNum);+            values.put(ENABLE, true);   //请注意:如果贵司希望预置的频道默认为disable状态,把true改成false即可+            values.put(SUBID, mSubId);+            try {+                //if(mSimId==PhoneConstants.SUB1){+                this.getContentResolver().insert(CHANNEL_URI, values);+                //}else if(mSimId==PhoneConstants.SUB2){+                // this.getContentResolver().insert(CHANNEL_URI1, values);+                //}+            } catch (Exception e){+                Log.d(" CBMessageReceiverService ", " SmsReceiverService.addChannelToDatabase exception 828 "); // modify by mtk_debug 2015-3-05;+                //cursornum.close();+                //cursorid.close();+                cursorzz.close();+                return false;+            }+            //cursornum.close();+            // cursorid.close();+            cursorzz.close();+            return true;+        }+        else{+            //cursornum.close();+            //cursorid.close();+            cursorzz.close();+            return false;+        }++    } +++    private boolean queryIfChannelInDatabase(int mSubId,String channelName,int channelNum){++        Log.d(TAG, "queryIfChannelInDatabase: mSubId=" + mSubId+                + ", channelName= " + channelName + ", channelNum= " + channelNum);+        String[] projection = new String[] { NUMBER, SUBID};+        String SELECTIONNum = "(" + NUMBER + " = " + channelNum + ")"; +        String SELECTIONid = "(" + SUBID + " = " + mSubId + ")";+        Cursor cursornum = null;+        Cursor cursorid = null;++        Cursor cursorzz = this.getContentResolver().query(CHANNEL_URI,+                projection,+                NUMBER + " = ? AND " ++                SUBID + " = ?",+                new String[] {String.valueOf(channelNum),String.valueOf(mSubId)},+                null);++        if(cursorzz != null&&cursorzz.getCount() > 0){+            //if ((cursornum.getCount() != 0)&&(cursorid.getCount() != 0)){+            Log.d(TAG, "queryIfChannelInDatabase: cursor.getCount"+cursorzz.getCount());+            cursorzz.close();+            return true;+++        }else{+            cursorzz.close();+            Log.d(TAG, "queryIfChannelInDatabase: return false");+            return false;+        }++    }+// End of Vanzo:tanglei+     private void handleCBMessageReceived(Intent intent) {         // TODO need replace with cb message.         Bundle extras = intent.getExtras();@@ -200,7 +486,37 @@ public class CBMessageReceiverService extends Service {         }          if (messageUri != null) {-            CBMessagingNotification.updateNewMessageIndicator(subId, this, true);+            if (message.getServiceCategory() == 919 ||+                    message.getServiceCategory() == 50 ||+                    message.getServiceCategory() == 921) {+                //alert repeat with audio and vibrate+                CellBroadcastAlertWakeLock.acquireScreenCpuWakeLock(this);+                Intent audioIntent = new Intent(this, CellBroadcastAlertAudio.class);+                audioIntent.setAction(CellBroadcastAlertAudio.ACTION_START_ALERT_AUDIO);+                audioIntent.putExtra(CellBroadcastAlertAudio.ALERT_AUDIO_DURATION_EXTRA, 10500);+                audioIntent.putExtra(CellBroadcastAlertAudio.ALERT_AUDIO_VIBRATE_EXTRA, true);+                startService(audioIntent);+                SimpleDateFormat  sdf = new SimpleDateFormat("hh:mm aa.  |  dd/MM/yyyy");+                String time = sdf.format(new Date(System.currentTimeMillis())).toString();+                final Context sContext = getApplicationContext();+                AlertDialog alert = new AlertDialog.Builder(sContext)+                    .setTitle("Alerta de Emergencia")+                    .setMessage(message.getMessageBody() + "\n\n" + time)+                    .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {+                            @Override+                            public void onClick(DialogInterface dialog, int which) {+                                sContext.stopService(new Intent(sContext, CellBroadcastAlertAudio.class));+                                dialog.dismiss();+                            }+                        })+                    .create();+                alert.getWindow().setType(+                        WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);+                alert.setCancelable(false);+                alert.show();+            } else {+                CBMessagingNotification.updateNewMessageIndicator(subId, this, true);+            }         }     } diff --git a/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessagingNotification.java b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessagingNotification.javaindex f9c161e..addf59d 100755--- a/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessagingNotification.java+++ b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CBMessagingNotification.java@@ -268,7 +268,6 @@ public class CBMessagingNotification {             //String address = Conversation.getChannelNameFromId(context, channel_id);             String address;             address = CBMessage.getCBChannelName(subId, channelId);-            address = address + "(" + channelId + ")";             CBNotificationInfo info = getNewMessageNotificationInfo(                     address, body, context, R.drawable.stat_notify_sms,                     null, threadId, timeMillis, cursor.getCount(),diff --git a/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CellBroadcastAlertAudio.java b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CellBroadcastAlertAudio.javanew file mode 100644index 0000000..f868e44--- /dev/null+++ b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CellBroadcastAlertAudio.java@@ -0,0 +1,435 @@+/*+ * Copyright (C) 2011 The Android Open Source Project+ *+ * Licensed under the Apache License, Version 2.0 (the "License");+ * you may not use this file except in compliance with the License.+ * You may obtain a copy of the License at+ *+ *      http://www.apache.org/licenses/LICENSE-2.0+ *+ * Unless required by applicable law or agreed to in writing, software+ * distributed under the License is distributed on an "AS IS" BASIS,+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+ * See the License for the specific language governing permissions and+ * limitations under the License.+ */++package com.mediatek.cb.cbmsg;++import android.app.Service;+import android.content.BroadcastReceiver;+import android.content.Context;+import android.content.Intent;+import android.content.IntentFilter;+import android.content.SharedPreferences;+import android.content.res.AssetFileDescriptor;+import android.content.res.Resources;+import android.media.AudioManager;+import android.media.MediaPlayer;+import android.media.MediaPlayer.OnErrorListener;+import android.os.Handler;+import android.os.IBinder;+import android.os.Message;+import android.os.Vibrator;+import android.speech.tts.TextToSpeech;+import android.telephony.PhoneStateListener;+import android.telephony.TelephonyManager;+import android.util.Log;+import java.io.IOException;+import java.util.HashMap;+import java.util.ArrayList;+import java.util.Locale;+import com.android.mms.R;++/**+ * Manages alert audio and vibration and text-to-speech. Runs as a service so that+ * it can continue to play if another activity overrides the CellBroadcastListActivity.+ */+public class CellBroadcastAlertAudio extends Service {+    private static final String TAG = "CellBroadcastAlertAudio";+    private static final int PRESIDENT_ALERT_ID = 4370;+    /** Action to start playing alert audio/vibration/speech. */+    static final String ACTION_START_ALERT_AUDIO = "ACTION_START_ALERT_AUDIO";++    /** Extra for alert audio duration (from settings). */+    public static final String ALERT_AUDIO_DURATION_EXTRA =+            "com.mediatek.cellbroadcastreceiver.ALERT_AUDIO_DURATION";++    /** Extra for message body to speak (if speech enabled in settings). */+    public static final String ALERT_AUDIO_MESSAGE_BODY =+            "com.mediatek.cellbroadcastreceiver.ALERT_AUDIO_MESSAGE_BODY";++    /** Extra for text-to-speech language (if speech enabled in settings). */+    public static final String ALERT_AUDIO_MESSAGE_LANGUAGE =+            "com.mediatek.cellbroadcastreceiver.ALERT_AUDIO_MESSAGE_LANGUAGE";++    /** Extra for message ID . */+    public static final String ALERT_AUDIO_MESSAGE_ID =+            "com.mediatek.cellbroadcastreceiver.ALERT_AUDIO_MESSAGE_ID";++    /** Extra for alert audio vibration enabled (from settings). */+    public static final String ALERT_AUDIO_VIBRATE_EXTRA =+            "com.mediatek.cellbroadcastreceiver.ALERT_AUDIO_VIBRATE";++    /** Extra for alert audio ETWS behavior (always vibrate, even in silent mode). */+    public static final String ALERT_AUDIO_ETWS_VIBRATE_EXTRA =+            "com.mediatek.cellbroadcastreceiver.ALERT_AUDIO_ETWS_VIBRATE";++    private static final String TTS_UTTERANCE_ID =+                    "com.mediatek.cellbroadcastreceiver.UTTERANCE_ID";++    /** Pause duration between alert sound and alert speech. */+    private static final int PAUSE_DURATION_BEFORE_SPEAKING_MSEC = 1000;++    //volume change action+    private static final String VOLUME_CHANGED_ACTION = "android.media.VOLUME_CHANGED_ACTION";++    /** Vibration uses the same on/off pattern as the CMAS alert tone */+    private static final long[] sVibratePattern = { 0, 2000, 500, 1000, 500, 1000, 500,+            2000, 500, 1000, 500, 1000};++    private static final int STATE_IDLE = 0;+    private static final int STATE_ALERTING = 1;+    private static final int STATE_PAUSING = 2;+    private static final int STATE_SPEAKING = 3;++    // Internal messages+    private static final int ALERT_SOUND_FINISHED = 1000;+    private static final int ALERT_PAUSE_FINISHED = 1001;+    /// M: add for repeat alert feature. @{+    private static final String PREF_NAME = "com.mediatek.cellbroadcastreceiver_preferences";+    private static final int REPEAT_ALERT_START = 1002;+    private static final int[] sRepeatTimes = { 60000, 60000 * 3, 60000 * 5 };+    private boolean mEnableRepeat = true;+    private int mDuration;+    private ArrayList mRepeatPattern;+    /// @}++    private int mState;++    private int mMessageId;+    private String mMessageBody;+    private String mMessageLanguage;+    private boolean mEnableVibrate;+    private boolean mEnableAudio;+    private boolean mRegisteredVolumeReceiver = false;++    private Vibrator mVibrator;+    private MediaPlayer mMediaPlayer;+    private AudioManager mAudioManager;+    private TelephonyManager mTelephonyManager;+    private int mInitialCallState;++    private final Handler mHandler = new Handler() {+        @Override+        public void handleMessage(Message msg) {+            switch (msg.what) {+                case ALERT_SOUND_FINISHED:+                    /// @}+                    stop();     // stop alert sound+                    // if we can speak the message text+                    if (mMessageBody != null) {+                        mHandler.sendMessageDelayed(mHandler.obtainMessage(ALERT_PAUSE_FINISHED),+                                PAUSE_DURATION_BEFORE_SPEAKING_MSEC);+                        mState = STATE_PAUSING;+                    } else if (!mEnableRepeat || mRepeatPattern.isEmpty()) { ///M:+                        // add for repeat alert feature. do not stop service until end repeat.+                        stopSelf();+                        mState = STATE_IDLE;+                    }+                    break;++                case ALERT_PAUSE_FINISHED:+                    if (mMessageBody != null) {+                        mState = STATE_SPEAKING;+                    } else if (!mEnableRepeat || mRepeatPattern.isEmpty()) { ///M:+                        // add for repeat alert feature. do not stop service until end repeat.+                        Log.w(TAG, "TTS engine not ready or language not supported");+                        stopSelf();+                        mState = STATE_IDLE;+                    }++                    break;++                ///M: add for repeat alert feature. @{+                case REPEAT_ALERT_START:+                    schedulePlay();+                    break;+                /// @}+                default:+                    Log.e(TAG, "Handler received unknown message, what=" + msg.what);+            }+        }+    };++    private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {+        @Override+        public void onCallStateChanged(int state, String ignored) {+            // Stop the alert sound and speech if the call state changes.+            if (state != TelephonyManager.CALL_STATE_IDLE+                    && state != mInitialCallState) {+                stopSelf();+            }+        }+    };++    private BroadcastReceiver volumeChangeReceiver = new BroadcastReceiver() {++        @Override+        public void onReceive(Context arg0, Intent arg1) {+            Log.d(TAG, "receive volume change broadcast, stop sound and vibration alert");+            //stop();+        }++    };+++    @Override+    public void onCreate() {+        mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);+        mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);+        // Listen for incoming calls to kill the alarm.+        mTelephonyManager =+                (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);+        mTelephonyManager.listen(+                mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);+    }++    @Override+    public void onDestroy() {+        //unregister volume register+        if (mRegisteredVolumeReceiver) {+            mRegisteredVolumeReceiver = false;+            unregisterReceiver(volumeChangeReceiver);+        }++        /// M: add for repeat alert feature. cancel the next schedule when destroy. @{+        if (mEnableRepeat) {+            cancelRepeat();+        }+        /// @}++        // stop audio, vibration and TTS+        stop();+        // Stop listening for incoming calls.+        mTelephonyManager.listen(mPhoneStateListener, 0);+        // release CPU wake lock acquired by CellBroadcastAlertService+        CellBroadcastAlertWakeLock.releaseCpuLock();+    }++    @Override+    public IBinder onBind(Intent intent) {+        return null;+    }++    @Override+    public int onStartCommand(Intent intent, int flags, int startId) {+        // No intent, tell the system not to restart us.+        if (intent == null) {+            stopSelf();+            return START_NOT_STICKY;+        }++        ///M: add for repeat alert feature.+        cancelRepeat();+        initAlertSequence();++        // This extra should always be provided by CellBroadcastAlertService,+        // but default to 10.5 seconds just to be safe (CMAS requirement).+        int duration = intent.getIntExtra(ALERT_AUDIO_DURATION_EXTRA, 10500);+        mMessageId = intent.getIntExtra(ALERT_AUDIO_MESSAGE_ID, 0);+        // Get text to speak (if enabled by user)+        mMessageBody = intent.getStringExtra(ALERT_AUDIO_MESSAGE_BODY);+        mMessageLanguage = intent.getStringExtra(ALERT_AUDIO_MESSAGE_LANGUAGE);++        mEnableVibrate = intent.getBooleanExtra(ALERT_AUDIO_VIBRATE_EXTRA, true);+        boolean forceVibrate = intent.getBooleanExtra(ALERT_AUDIO_ETWS_VIBRATE_EXTRA, false);++        mEnableAudio = true;+        Log.d(TAG, "mEnableAudio:" + mEnableAudio + ", mEnableVibrate:" + mEnableVibrate);+        ///M: add for repeat alert. @{+        mDuration = duration;+        schedulePlay();+        /// @}+        //register volume change receiver+        if (!mRegisteredVolumeReceiver) {+            IntentFilter intentFilter = new IntentFilter();+            intentFilter.addAction(VOLUME_CHANGED_ACTION);+            registerReceiver(volumeChangeReceiver, intentFilter);+            mRegisteredVolumeReceiver = true;+        }++        // Record the initial call state here so that the new alarm has the+        // newest state.+        mInitialCallState = mTelephonyManager.getCallState();++        return START_STICKY;+    }++    // Volume suggested by media team for in-call alarms.+    private static final float IN_CALL_VOLUME = 0.125f;++    /**+     * Start playing the alert sound, and send delayed message when it's time to stop.+     * @param duration the alert sound duration in milliseconds+     */+    private void play() {+        // stop() checks to see if we are already playing.+        stop();+++        // Start the vibration first.+        if (mEnableVibrate || forceAlert()) {+            mVibrator.vibrate(sVibratePattern, -1);+        }++        if (mEnableAudio || forceAlert()) {+            // future optimization: reuse media player object+            mMediaPlayer = new MediaPlayer();+            mMediaPlayer.setOnErrorListener(new OnErrorListener() {+                public boolean onError(MediaPlayer mp, int what, int extra) {+                    Log.e(TAG, "Error occurred while playing audio.");+                    mp.stop();+                    mp.release();+                    mMediaPlayer = null;+                    return true;+                }+            });++            try {+                // Check if we are in a call. If we are, play the alert+                // sound at a low volume to not disrupt the call.+                if (mTelephonyManager.getCallState()+                        != TelephonyManager.CALL_STATE_IDLE) {+                    Log.v(TAG, "in call: reducing volume");+                    mMediaPlayer.setVolume(IN_CALL_VOLUME, IN_CALL_VOLUME);+                }+                else {+                    float volume = 1.0f;++                Log.d(TAG , "Alert volume: " + volume);+                mMediaPlayer.setVolume(volume, volume);+               }++                // start playing alert audio (unless master volume is vibrate only or silent).+                setDataSourceFromResource(getResources(), mMediaPlayer,+                        R.raw.attention_signal);++                int streamType = AudioManager.STREAM_NOTIFICATION;+                streamType = AudioManager.STREAM_ALARM;+                mAudioManager.setStreamVolume(streamType,+                        mAudioManager.getStreamMaxVolume(streamType),+                        AudioManager.FLAG_PLAY_SOUND);+                mAudioManager.requestAudioFocus(null, streamType,+                        AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);+                startAlarm(mMediaPlayer);+            } catch (IllegalStateException ex) {+                Log.e(TAG, "Failed to play alert sound", ex);+            } catch (IOException e) {+                Log.e(TAG, "IOException");+            }+        }++        // stop alert after the specified duration+        mHandler.sendMessageDelayed(mHandler.obtainMessage(ALERT_SOUND_FINISHED), mDuration);++        mState = STATE_ALERTING;+    }++    // Do the common stuff when starting the alarm.+    private void startAlarm(MediaPlayer player)+            throws java.io.IOException, IllegalArgumentException, IllegalStateException {+        int streamType = AudioManager.STREAM_NOTIFICATION;+        streamType = AudioManager.STREAM_ALARM;+        player.setAudioStreamType(streamType);+        player.setLooping(true);+        player.prepare();+        player.start();+    }++    private static void setDataSourceFromResource(Resources resources,+            MediaPlayer player, int res) throws java.io.IOException {+        AssetFileDescriptor afd = resources.openRawResourceFd(res);+        if (afd != null) {+            player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),+                    afd.getLength());+            afd.close();+        }+    }++    /**+     * Stops alert audio and speech.+     */+    public void stop() {++        mHandler.removeMessages(ALERT_SOUND_FINISHED);+        mHandler.removeMessages(ALERT_PAUSE_FINISHED);++        if (mState == STATE_ALERTING) {+            // Stop audio playing+            if (mMediaPlayer != null) {+                try {+                    mMediaPlayer.stop();+                    mMediaPlayer.release();+                } catch (IllegalStateException e) {+                    // catch "Unable to retrieve AudioTrack pointer for stop()" exception+                    Log.e(TAG, "exception trying to stop media player");+                }+                mMediaPlayer = null;+            }++            // Stop vibrator+            mVibrator.cancel();+        }+        mAudioManager.abandonAudioFocus(null);+        mState = STATE_IDLE;+    }++    private static void log(String msg) {+        Log.d(TAG, msg);+    }++    /**+     * M: add for repeat alert feature.+     */+    private void initAlertSequence() {+        mEnableRepeat = true;+        mRepeatPattern = new ArrayList();+        if (mEnableRepeat) {+            for (int i : sRepeatTimes) {+                mRepeatPattern.add(i);+            }+        }+    }++    /**+     * M: add for repeat alert feature.+     * @param duration the duration of one alert time.+     */+    private void schedulePlay() {+         //if (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT) {+            play();+         //}+        if (mEnableRepeat) {+            mHandler.sendMessageDelayed(mHandler.obtainMessage(REPEAT_ALERT_START), mDuration + 500);+        }+    }++    /**+     * M: add for repeat alert feature.+     */+    public void cancelRepeat() {+        mHandler.removeMessages(REPEAT_ALERT_START);+    }++    /**+     * M: force alarm (except first alert) in silent mode.+     * @return+     */+    private boolean forceAlert() {+        boolean isSilentMode = mAudioManager.getRingerMode() == AudioManager.RINGER_MODE_SILENT;+        boolean isRepeating = mEnableRepeat && (mRepeatPattern.size() < sRepeatTimes.length);+        return isSilentMode && isRepeating;+    }++}diff --git a/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CellBroadcastAlertWakeLock.java b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CellBroadcastAlertWakeLock.javanew file mode 100644index 0000000..ac296db--- /dev/null+++ b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbmsg/CellBroadcastAlertWakeLock.java@@ -0,0 +1,52 @@+/*+ * Copyright (C) 2012 The Android Open Source Project+ *+ * Licensed under the Apache License, Version 2.0 (the "License");+ * you may not use this file except in compliance with the License.+ * You may obtain a copy of the License at+ *+ *      http://www.apache.org/licenses/LICENSE-2.0+ *+ * Unless required by applicable law or agreed to in writing, software+ * distributed under the License is distributed on an "AS IS" BASIS,+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.+ * See the License for the specific language governing permissions and+ * limitations under the License.+ */++package com.mediatek.cb.cbmsg;++import android.content.Context;+import android.os.PowerManager;+import android.util.Log;++/**+ * Hold a wakelock that can be acquired in the CellBroadcastAlertService and+ * released in the CellBroadcastAlertFullScreen Activity.+ */+class CellBroadcastAlertWakeLock {+    private static final String TAG = "CellBroadcastAlertWakeLock";++    private static PowerManager.WakeLock sCpuWakeLock;++    private CellBroadcastAlertWakeLock() {}++    static void acquireScreenCpuWakeLock(Context context) {+        if (sCpuWakeLock != null) {+            return;+        }+        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);+        sCpuWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK+                | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE, TAG);+        sCpuWakeLock.acquire();+        Log.d(TAG, "acquired screen + CPU wake lock");+    }++    static void releaseCpuLock() {+        if (sCpuWakeLock != null) {+            sCpuWakeLock.release();+            sCpuWakeLock = null;+            Log.d(TAG, "released screen + CPU wake lock");+        }+    }+}diff --git a/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbsettings/CellBroadcastSettings.java b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbsettings/CellBroadcastSettings.javaindex c6a152b..a15c329 100755--- a/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbsettings/CellBroadcastSettings.java+++ b/mediatek/proprietary/packages/apps/Mms/src/com/mediatek/cb/cbsettings/CellBroadcastSettings.java@@ -218,6 +218,13 @@ public class CellBroadcastSettings extends TimeConsumingPreferenceActivity             } else {                 channel.setSummary(R.string.disable);             }+            if (title.equals("919(919)")+                    || title.equals("50(50)")+                    || title.equals("4370(4370)")+                    || title.equals("921(921)")) {+                channel.setEnabled(false);+                channel.setSelectable(false);+            }              channel.setOnPreferenceClickListener(new OnPreferenceClickListener() {                 public boolean onPreferenceClick(Preference arg0) {@@ -560,6 +567,7 @@ public class CellBroadcastSettings extends TimeConsumingPreferenceActivity                 }                 String jStr = String.valueOf(j);                 CellBroadcastChannel channel = getChannelObjectFromKey(jStr);+/* Vanzo:tanglei on: Thu, 08 Sep 2016 10:34:04 +0800                 if (channel != null) {                     channel.setChannelState(state);                 } else {@@ -573,6 +581,8 @@ public class CellBroadcastSettings extends TimeConsumingPreferenceActivity                     mChannelArray.add(newChannel);                     mChannelMap.put(jStr, newChannel);                 }+ */+// End of             }         }     }
diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/res/values-es-rUS/mtk_string.xml b/mediatek/proprietary/packages/apps/CMASReceiver/res/values-es-rUS/mtk_string.xmlindex 38f7aa5..dcf14db 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/res/values-es-rUS/mtk_string.xml+++ b/mediatek/proprietary/packages/apps/CMASReceiver/res/values-es-rUS/mtk_string.xml@@ -43,7 +43,7 @@     Para rec al usuario de alertas no leídos interm     Todas alertas act     Todos mens de amen inm-    Alertas de Em+    Alerta de Emergencia     Volumen de sonido de alerta     Aj de vol del sonido-\ No newline at end of file+diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/res/values-es-rUS/strings.xml b/mediatek/proprietary/packages/apps/CMASReceiver/res/values-es-rUS/strings.xmlindex a2460bb..e8fc8ab 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/res/values-es-rUS/strings.xml+++ b/mediatek/proprietary/packages/apps/CMASReceiver/res/values-es-rUS/strings.xml@@ -11,10 +11,10 @@      limitations under the License. --> -    Alertas de Em+    Alerta de Emergencia     Config del Conm de Alertas     "Aceptar"-    "No hay alertas activas en tu zona. Puedes modificar la configuración de las alertas en el menú Configuración."+    "No hay alertas activas en tu zona."     "Configuración"     Elim todas alertas     "Opciones de mensaje"@@ -30,11 +30,11 @@     "Alerta de terremotos y tsunamis"     "Mensaje de prueba de ETWS"     "Advertencia de emergencia"-    "Alerta presidencial"+    "Alerta de Emergencia"     "Alerta de emergencia: extrema"     "Alerta de emergencia: grave"     Aler ÁMBAR-    "Prueba mensual de alerta de emergencia"+    "Alerta de Emergencia"     "Alerta de emergencia (ejercicio)"     "Alerta de emergencia (operador)"     "Alerta de emergencia"diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/res/values-zh-rCN/strings.xml b/mediatek/proprietary/packages/apps/CMASReceiver/res/values-zh-rCN/strings.xmlindex a97c363..d66f27b 100644--- a/mediatek/proprietary/packages/apps/CMASReceiver/res/values-zh-rCN/strings.xml+++ b/mediatek/proprietary/packages/apps/CMASReceiver/res/values-zh-rCN/strings.xml@@ -19,7 +19,7 @@     "紧急警报"     "警报开关设置"     "确定"-    "您所在的区域没有任何活动的警报。您可以使用“设置”菜单选项更改警报设置。"+    "您所在的区域没有任何活动的警报。"     "设置"     "删除所有警报"     "短信选项"diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/res/values/strings.xml b/mediatek/proprietary/packages/apps/CMASReceiver/res/values/strings.xmlindex 46e2d51..85599b7 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/res/values/strings.xml+++ b/mediatek/proprietary/packages/apps/CMASReceiver/res/values/strings.xml@@ -27,7 +27,7 @@     OK      -    There are no active alerts in your area. You can change the Alert settings using the Settings menu option.+    There are no active alerts in your area.           Settingsdiff --git a/mediatek/proprietary/packages/apps/CMASReceiver/res/xml/default_preference.xml b/mediatek/proprietary/packages/apps/CMASReceiver/res/xml/default_preference.xmlindex c86e3d2..2230494 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/res/xml/default_preference.xml+++ b/mediatek/proprietary/packages/apps/CMASReceiver/res/xml/default_preference.xml@@ -4,11 +4,11 @@               -    +                   -    -    +    +          diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/res/xml/preferences.xml b/mediatek/proprietary/packages/apps/CMASReceiver/res/xml/preferences.xmlindex 340830a..e509d73 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/res/xml/preferences.xml+++ b/mediatek/proprietary/packages/apps/CMASReceiver/res/xml/preferences.xml@@ -57,7 +57,7 @@                             android:summary="@string/enable_alert_vibrate_summary"                             android:title="@string/enable_alert_vibrate_title" /> -        diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/res/xml/preferences_main.xml b/mediatek/proprietary/packages/apps/CMASReceiver/res/xml/preferences_main.xmlindex 18a8dce..a8dee3e 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/res/xml/preferences_main.xml+++ b/mediatek/proprietary/packages/apps/CMASReceiver/res/xml/preferences_main.xml@@ -67,7 +67,7 @@                   diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CMASAlertFullWindow.java b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CMASAlertFullWindow.javaindex 3fa2394..f3c8601 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CMASAlertFullWindow.java+++ b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CMASAlertFullWindow.java@@ -417,6 +417,11 @@ public class CMASAlertFullWindow {             Log.i(TAG, "updateAlertIcon::this is normal message");             titleTextView.setText(titleId);         }+        if (message.getServiceCategory() == 4370) {+            titleTextView.setText("Alerta de Emergencia");+        } else if (message.getServiceCategory() == 4380) {+            titleTextView.setText("Alerta de Emergencia");+        }          TextView textViewMsgBody = (TextView) view.findViewById(R.id.message); /*        if(getShowMsgId()) {diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CMASPresentationService.java b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CMASPresentationService.javaindex 1eb829d..f701f0e 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CMASPresentationService.java+++ b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CMASPresentationService.java@@ -255,7 +255,7 @@ public class CMASPresentationService extends Service {      private boolean getEnbaleAlertSpeech() {         return PreferenceManager.getDefaultSharedPreferences(this).getBoolean(-                CheckBoxAndSettingsPreference.KEY_ENABLE_ALERT_SPEECH, true);+                CheckBoxAndSettingsPreference.KEY_ENABLE_ALERT_SPEECH, false);     }  }diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastAlertAudio.java b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastAlertAudio.javaindex 429634f..5695da0 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastAlertAudio.java+++ b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastAlertAudio.java@@ -171,11 +171,7 @@ public class CellBroadcastAlertAudio extends Service implements TextToSpeech.OnI                  ///M: add for repeat alert feature. @{                 case REPEAT_ALERT_START:-                    if (DBG) log("REPEAT_ALERT_START");-                    if (!mRepeatPattern.isEmpty()) {-                        mRepeatPattern.remove(0);-                        play();-                    }+                    schedulePlay();                     break;                 /// @}                 default:@@ -200,7 +196,7 @@ public class CellBroadcastAlertAudio extends Service implements TextToSpeech.OnI         @Override         public void onReceive(Context arg0, Intent arg1) {             Log.d(TAG, "receive volume change broadcast, stop sound and vibration alert");-            stop();+            //stop();         }      };@@ -274,7 +270,7 @@ public class CellBroadcastAlertAudio extends Service implements TextToSpeech.OnI         }          /// M: add for repeat alert feature. cancel the next schedule when destroy. @{-        if (mEnableRepeat && (mRepeatPattern != null) && !mRepeatPattern.isEmpty()) {+        if (mEnableRepeat) {             cancelRepeat();         }         /// @}@@ -324,37 +320,7 @@ public class CellBroadcastAlertAudio extends Service implements TextToSpeech.OnI         mEnableVibrate = intent.getBooleanExtra(ALERT_AUDIO_VIBRATE_EXTRA, true);         boolean forceVibrate = intent.getBooleanExtra(ALERT_AUDIO_ETWS_VIBRATE_EXTRA, false); -        switch (mAudioManager.getRingerMode()) {-            case AudioManager.RINGER_MODE_SILENT:-                if (DBG) log("Ringer mode: silent");-                mEnableVibrate = forceVibrate;-                mEnableAudio = false;-                break;--            case AudioManager.RINGER_MODE_VIBRATE:-                if (DBG) log("Ringer mode: vibrate");-                mEnableAudio = false;-                break;--            case AudioManager.RINGER_MODE_NORMAL:-            default:-                if (DBG) log("Ringer mode: normal");-                /// M: add to distinguish general and outdoor mode. Do not vibrate-                // in general mode. @{-                if (!mAudioManager.shouldVibrate(AudioManager.VIBRATE_TYPE_NOTIFICATION)) {-                    mEnableVibrate = forceVibrate;-                }-                /// @}-                mEnableAudio = true;-                break;-        }--        ICmasMainSettingsExt optSetAlertAudioVibration = (ICmasMainSettingsExt)-                CellBroadcastPluginManager.getCellBroadcastPluginObject(-                CellBroadcastPluginManager.CELLBROADCAST_PLUGIN_TYPE_MAIN_SETTINGS);--            mEnableAudio = optSetAlertAudioVibration.setAlertVolumeVibrate(mMessageId, mEnableAudio);-            mEnableVibrate = optSetAlertAudioVibration.setAlertVolumeVibrate(mMessageId, mEnableVibrate);+        mEnableAudio = true;          Log.d(TAG, "mEnableAudio:" + mEnableAudio + ", mEnableVibrate:" + mEnableVibrate);         if (mMessageBody != null && mEnableAudio) {@@ -432,15 +398,7 @@ public class CellBroadcastAlertAudio extends Service implements TextToSpeech.OnI                 else {                     float volume = 1.0f; -                    ICmasMainSettingsExt optGetAlertVolume = (ICmasMainSettingsExt)-                        CellBroadcastPluginManager.getCellBroadcastPluginObject(-                        CellBroadcastPluginManager.CELLBROADCAST_PLUGIN_TYPE_MAIN_SETTINGS);--                if (optGetAlertVolume != null) {-                    volume = optGetAlertVolume.getAlertVolume(mMessageId);-                  }-                Log.d(TAG , "Alert volume: " + volume);-                mMediaPlayer.setVolume(volume, volume);+                    mMediaPlayer.setVolume(volume, volume);                }                  // start playing alert audio (unless master volume is vibrate only or silent).@@ -455,9 +413,10 @@ public class CellBroadcastAlertAudio extends Service implements TextToSpeech.OnI                 }                  int streamType = AudioManager.STREAM_NOTIFICATION;-                if (forceAlert() || forcePresidentAlert()) {-                    streamType = AudioManager.STREAM_ALARM;-                }+                streamType = AudioManager.STREAM_ALARM;+                mAudioManager.setStreamVolume(streamType,+                        mAudioManager.getStreamMaxVolume(streamType),+                        AudioManager.FLAG_PLAY_SOUND);                 mAudioManager.requestAudioFocus(null, streamType,                         AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);                 startAlarm(mMediaPlayer);@@ -484,9 +443,7 @@ public class CellBroadcastAlertAudio extends Service implements TextToSpeech.OnI     private void startAlarm(MediaPlayer player)             throws java.io.IOException, IllegalArgumentException, IllegalStateException {         int streamType = AudioManager.STREAM_NOTIFICATION;-        if (forceAlert() || forcePresidentAlert()) {-            streamType = AudioManager.STREAM_ALARM;-        }+        streamType = AudioManager.STREAM_ALARM;         player.setAudioStreamType(streamType);         player.setLooping(true);         player.prepare();@@ -566,10 +523,7 @@ public class CellBroadcastAlertAudio extends Service implements TextToSpeech.OnI             play();          //}         if (mEnableRepeat) {-            for (int i = 0; i < mRepeatPattern.size(); i++) {-                mHandler.sendMessageDelayed(mHandler.obtainMessage(REPEAT_ALERT_START),-                        mRepeatPattern.get(i));-            }+            mHandler.sendMessageDelayed(mHandler.obtainMessage(REPEAT_ALERT_START), mDuration + 500);         }     } diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastAlertService.java b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastAlertService.javaindex 56a6fce..1763563 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastAlertService.java+++ b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastAlertService.java@@ -217,9 +217,6 @@ public class CellBroadcastAlertService extends Service {                             return true;                         case ICmasDuplicateMessageExt.NEW_CMAS_PROCESS: // NewCMASProcess                             // handle update msg-                            if (!handleUpdatedCB(provider, cbm)) {-                                return true;-                            }                             Log.d(TAG, "before insertNewBroadcast, sn " + cbm.getSerialNumber());                             //if (provider.insertNewBroadcast(cbm)) {                             long rowId = provider.addNewBroadcast(cbm);@@ -421,7 +418,7 @@ public class CellBroadcastAlertService extends Service {                         SharedPreferences rmtPrefs = this.getSharedPreferences(                             PREF_NAME, MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE                             | MODE_MULTI_PROCESS);-                    boolean resOfRmt = rmtPrefs.getBoolean(CellBroadcastConfigService.ENABLE_CMAS_RMT_SUPPORT, false);+                    boolean resOfRmt = rmtPrefs.getBoolean(CellBroadcastConfigService.ENABLE_CMAS_RMT_SUPPORT, true);                     Log.d(TAG, "in isMessageEnabledByUser , CMAS setting " + resOfRmt);                     return resOfRmt;                     }@@ -431,7 +428,7 @@ public class CellBroadcastAlertService extends Service {                     SharedPreferences exePrefs = this.getSharedPreferences(                             PREF_NAME, MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE                             | MODE_MULTI_PROCESS);-                    boolean resOfexe = exePrefs.getBoolean(CellBroadcastConfigService.ENABLE_CMAS_EXERCISE_SUPPORT, false);+                    boolean resOfexe = exePrefs.getBoolean(CellBroadcastConfigService.ENABLE_CMAS_EXERCISE_SUPPORT, true);                     Log.d(TAG, "in isMessageEnabledByUser , EXER setting " + resOfexe);                     return resOfexe;                 default:@@ -482,7 +479,7 @@ public class CellBroadcastAlertService extends Service {          String messageBody = message.getMessageBody(); -        if (prefs.getBoolean(CellBroadcastSettings.KEY_ENABLE_ALERT_SPEECH, true)) {+        if (prefs.getBoolean(CellBroadcastSettings.KEY_ENABLE_ALERT_SPEECH, false)) {             audioIntent.putExtra(CellBroadcastAlertAudio.ALERT_AUDIO_MESSAGE_BODY, messageBody);              String language = message.getLanguageCode();diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastConfigService.java b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastConfigService.javaindex 8937670..4678655 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastConfigService.java+++ b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastConfigService.java@@ -242,10 +242,10 @@ public class CellBroadcastConfigService extends IntentService {             if (intent.getBooleanExtra("isBootCompleted", false)) {                 SharedPreferences.Editor editor = prefs.edit();                 if (!prefs.contains(ENABLE_CMAS_RMT_SUPPORT)) {-                    editor.putBoolean(ENABLE_CMAS_RMT_SUPPORT, false);+                    editor.putBoolean(ENABLE_CMAS_RMT_SUPPORT, true);                 }                 if (!prefs.contains(ENABLE_CMAS_EXERCISE_SUPPORT)) {-                    editor.putBoolean(ENABLE_CMAS_EXERCISE_SUPPORT, false);+                    editor.putBoolean(ENABLE_CMAS_EXERCISE_SUPPORT, true);                 }                 editor.commit();                 editor.clear();@@ -255,10 +255,11 @@ public class CellBroadcastConfigService extends IntentService {             boolean enableCB = false;             if (!prefs.contains(CheckBoxAndSettingsPreference.KEY_ENABLE_CELLBROADCAST)) {                 enableCB = true;+                prefs.edit().putBoolean(CheckBoxAndSettingsPreference.KEY_ENABLE_CELLBROADCAST, true).commit();                 Log.d(TAG, "do not contain the enable_cell_broadcast ");             } else {                 enableCB = prefs.getBoolean(CheckBoxAndSettingsPreference.KEY_ENABLE_CELLBROADCAST,-                        false);+                        true);                 Log.d(TAG, "contain the enable_cell_broadcast,enableCB = " + enableCB);             }             Log.d(TAG, "SMS_STATE_CHANGED_ACTION enableCB " + enableCB);diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastListActivity.java b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastListActivity.javaindex 26658cd..bf1b4e7 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastListActivity.java+++ b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastListActivity.java@@ -188,8 +188,6 @@ public class CellBroadcastListActivity extends ListActivity {     public boolean onCreateOptionsMenu(Menu menu) {         menu.add(0, MENU_DELETE_ALL, 0, R.string.menu_delete_all).setIcon(                 android.R.drawable.ic_menu_delete);-        menu.add(0, MENU_PREFERENCES, 0, R.string.menu_preferences).setIcon(-                android.R.drawable.ic_menu_preferences);         return super.onCreateOptionsMenu(menu);     } @@ -200,11 +198,6 @@ public class CellBroadcastListActivity extends ListActivity {                 confirmDeleteThread(true, null);                 break; -            case MENU_PREFERENCES:-                Intent intent = new Intent(this, CellBroadcastMainSettings.class);-                startActivity(intent);-                break;-             default:                 return true;         }diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastReceiver.java b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastReceiver.javaindex 63785e4..d2b3c9c 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastReceiver.java+++ b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastReceiver.java@@ -98,7 +98,7 @@ public class CellBroadcastReceiver extends BroadcastReceiver {             // ignore incoming messages if CMAS option is off.             SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);             boolean enableCB = prefs.getBoolean(-                    CheckBoxAndSettingsPreference.KEY_ENABLE_CELLBROADCAST, false);+                    CheckBoxAndSettingsPreference.KEY_ENABLE_CELLBROADCAST, true);              if (!enableCB) {                 if (CellBroadcastReceiverApp.isCellAreaInTw()) {diff --git a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastSubSettings.java b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastSubSettings.javaindex 7ab34bc..0efe6ca 100755--- a/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastSubSettings.java+++ b/mediatek/proprietary/packages/apps/CMASReceiver/src/com/mediatek/cellbroadcastreceiver/CellBroadcastSubSettings.java@@ -41,7 +41,7 @@ public class CellBroadcastSubSettings extends PreferenceActivity implements         mEnableSevereCheckBox = (CheckBoxAndSettingsPreference) findPreference(CheckBoxAndSettingsPreference.KEY_ENABLE_CMAS_SEVERE_ALERTS);         setAlertPreferenceEnable(!mEnableAllCheckBox.isChecked());         SharedPreferences pre = getSharedPreferences("com.mediatek.cellbroadcastreceiver_preferences", 0);-        boolean imminentAlertChecked = pre.getBoolean(CheckBoxAndSettingsPreference.KEY_ENABLE_CMAS_IMMINENT_ALERTS, false);+        boolean imminentAlertChecked = pre.getBoolean(CheckBoxAndSettingsPreference.KEY_ENABLE_CMAS_IMMINENT_ALERTS, true);         if (!imminentAlertChecked) {             mEnableAllCheckBox.setEnabled(false);             mEnableSevereCheckBox.setEnabled(false);diff --git a/mediatek/proprietary/packages/apps/CmasEM/src/com/mediatek/engineermodecmas/CmasSettings.java b/mediatek/proprietary/packages/apps/CmasEM/src/com/mediatek/engineermodecmas/CmasSettings.javaindex d49ddb7..aef1aa1 100644--- a/mediatek/proprietary/packages/apps/CmasEM/src/com/mediatek/engineermodecmas/CmasSettings.java+++ b/mediatek/proprietary/packages/apps/CmasEM/src/com/mediatek/engineermodecmas/CmasSettings.java@@ -95,8 +95,8 @@ public class CmasSettings extends PreferenceActivity implements         SharedPreferences prefs = mCmasContext.getSharedPreferences(PREF_NAME,                 MODE_WORLD_READABLE | MODE_WORLD_WRITEABLE); -        boolean rmtValue = prefs.getBoolean(CMAS_RMT_KEY, false);-        boolean exerciseValue = prefs.getBoolean(CMAS_EXERCISE_KEY, false);+        boolean rmtValue = prefs.getBoolean(CMAS_RMT_KEY, true);+        boolean exerciseValue = prefs.getBoolean(CMAS_EXERCISE_KEY, true);          mCheckBoxRmt.setChecked(rmtValue);         mCheckBoxExercise.setChecked(exerciseValue);

二十三: 彩信附件最大600K,超过了需要弹出警告

(vendor/)

diff --git a/mediatek/proprietary/packages/apps/Mms/res/values/mtk_arrays.xml b/mediatek/proprietary/packages/apps/Mms/res/values/mtk_arrays.xmlindex da3f0dc..70c4b87 100755--- a/mediatek/proprietary/packages/apps/Mms/res/values/mtk_arrays.xml+++ b/mediatek/proprietary/packages/apps/Mms/res/values/mtk_arrays.xml@@ -44,11 +44,13 @@         100K         200K         300K+        600K                   100         200         300+        600                     Highdiff --git a/mediatek/proprietary/packages/apps/Mms/res/xml-sw600dp/multicardpreferences.xml b/mediatek/proprietary/packages/apps/Mms/res/xml-sw600dp/multicardpreferences.xmlindex 4c7a6ca..782b6b8 100755--- a/mediatek/proprietary/packages/apps/Mms/res/xml-sw600dp/multicardpreferences.xml+++ b/mediatek/proprietary/packages/apps/Mms/res/xml-sw600dp/multicardpreferences.xml@@ -130,7 +130,7 @@             android:title="@string/pref_title_mms_size_limit"             android:dialogTitle="@string/pref_title_mms_size_limit"             android:summary="@string/pref_summary_mms_size_limit"-            android:defaultValue="300"+            android:defaultValue="600"             android:entries="@array/pref_mms_size_limit_choices"             android:entryValues="@array/pref_mms_size_limit_values"/>                  true      -    307200+    614400      -    480+    960      -    640+    1280      diff --git a/mediatek/proprietary/packages/apps/Mms/res/xml/mmsmulticardpreferences.xml b/mediatek/proprietary/packages/apps/Mms/res/xml/mmsmulticardpreferences.xmlindex a584201..c4d8149 100755--- a/mediatek/proprietary/packages/apps/Mms/res/xml/mmsmulticardpreferences.xml+++ b/mediatek/proprietary/packages/apps/Mms/res/xml/mmsmulticardpreferences.xml@@ -43,7 +43,7 @@             android:title="@string/pref_title_mms_size_limit"             android:dialogTitle="@string/pref_title_mms_size_limit"             android:summary="@string/pref_summary_mms_size_limit"-            android:defaultValue="300" android:entries="@array/pref_mms_size_limit_choices"+            android:defaultValue="600" android:entries="@array/pref_mms_size_limit_choices"             android:entryValues="@array/pref_mms_size_limit_values" />                           

更多相关文章

  1. Android Studio(六):Android Studio添加注释模板
  2. android Android build.gradle 配置注释
  3. C语言注释详解
  4. c语言的注释定界符是什么
  5. c语言注释符号是什么?
  6. c语言中的注释符号是什么
  7. c语言多行注释符号是什么
  8. c语言程序怎么注释?
  9. 程序中的注释部分是否参加编译?

随机推荐

  1. 解决 android 4.2 连接 leap wifi 网络
  2. [Android] Handler的具体用法
  3. Android Studio--增加assets目录、raw目
  4. 【笔记】Retrofit的使用以及原理
  5. Android资源总结(开发工具/环境搭建/教程
  6. Android通知MediaScanner扫描指定的文件
  7. Android(安卓)WebView JS不能调用Java对
  8. android安装真是很难?
  9. Android开发板串口(SerialPort)通信
  10. Toggle Dns Check到底干了什么