一:相機中的右邊的預覽視窗檢視圖檔後選擇删除,螢幕界面下方會有一條橫線(去除橫線的辦法)
(packages/apps/Gallery2/src/com/android/gallery3d/data/FilterEmptyPromptSet.java)
diff --git a/src/com/android/gallery3d/data/FilterEmptyPromptSet.java b/src/com/android/gallery3d/data/FilterEmptyPromptSet.java
index ae053df..955a749 100644
--- a/src/com/android/gallery3d/data/FilterEmptyPromptSet.java
+++ b/src/com/android/gallery3d/data/FilterEmptyPromptSet.java
@@ -44,7 +44,7 @@ public class FilterEmptyPromptSet extends MediaSet implements ContentListener {
if (itemCount > 0) {
return itemCount;
} else {
- return 1;
+ return 0;
}
}
二:電腦先按 "-"後在按其他計算符号都可以輸入,正常第一個運算符隻能輸入"-"
(packages/apps/Calculator/src/com/android/calculator2/CalculatorExpressionBuilder.java)
diff --git a/src/com/android/calculator2/CalculatorExpressionBuilder.java b/src/com/android/calculator2/CalculatorExpressionBuilder.java
index fc229f0..df85076 100755
--- a/src/com/android/calculator2/CalculatorExpressionBuilder.java
+++ b/src/com/android/calculator2/CalculatorExpressionBuilder.java
@@ -19,6 +19,7 @@ package com.android.calculator2;
import android.content.Context;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
+import android.util.Log;
public class CalculatorExpressionBuilder extends SpannableStringBuilder {
@@ -65,6 +66,16 @@ public class CalculatorExpressionBuilder extends SpannableStringBuilder {
break;
}
+ if (start > 0 && "-".indexOf(expr.charAt(start - 1)) != -1) {
+ appendExpr = "";
+ break;
+ }
// don't allow multiple successive operators
while (start > 0 && "+-*/".indexOf(expr.charAt(start - 1)) != -1) {
--start;
三:虛拟按鍵請做成可以隐藏的功能
(frameworks/)
diff --git a/base/core/java/android/app/Activity.java b/base/core/java/android/app/Activity.java
index f6ecec3..1696a5e 100644
--- a/base/core/java/android/app/Activity.java
+++ b/base/core/java/android/app/Activity.java
@@ -117,7 +117,7 @@ import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-
+import android.content.BroadcastReceiver;
/**
* An activity is a single, focused thing that the user can do. Almost all
* activities interact with the user, so the Activity class takes care of
@@ -1742,6 +1742,20 @@ public class Activity extends ContextThemeWrapper
public void onConfigurationChanged(Configuration newConfig) {
if (DEBUG_LIFECYCLE) Slog.v(TAG, "onConfigurationChanged " + this + ": " + newConfig);
mCalled = true;
+ Intent mIntent = new Intent("Configuration_orientation");
+ if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT){
+ mIntent.putExtra("ori_status",1);
+ Log.d("houcongxi","ori_status-------1111111111");
+ this.sendBroadcast(mIntent);
+ }else{
+ mIntent.putExtra("ori_status",2);
+ Log.d("houcongxi","ori_status-------2222222222");
+ this.sendBroadcast(mIntent);
+ }
mFragments.dispatchConfigurationChanged(newConfig);
diff --git a/base/core/java/android/provider/Settings.java b/base/core/java/android/provider/Settings.java
index 7222da6..daf099e 100644
--- a/base/core/java/android/provider/Settings.java
+++ b/base/core/java/android/provider/Settings.java
@@ -1505,6 +1505,11 @@ public final class Settings {
// At one time in System, then Global, but now back in Secure
MOVED_TO_SECURE.add(Secure.INSTALL_NON_MARKET_APPS);
+ MOVED_TO_SECURE.add(Secure.DEV_FORCE_SHOW_NAVBAR);
}
private static final HashSet<String> MOVED_TO_GLOBAL;
@@ -4269,6 +4274,18 @@ public final class Settings {
@Deprecated
public static final String ANDROID_ID = Secure.ANDROID_ID;
+ /**
+ * Developer options - Navigation Bar show switch
+ * @deprecated Use {@link android.provider.Settings.Secure#DEV_FORCE_SHOW_NAVBAR} instead
+ * @hide
+ */
+ @Deprecated
+ public static final String DEV_FORCE_SHOW_NAVBAR = Secure.DEV_FORCE_SHOW_NAVBAR;
+
/**
* @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead
*/
@@ -5073,6 +5090,16 @@ public final class Settings {
*/
public static final String ANDROID_ID = "android_id";
+ /**
+ * Developer options - Navigation Bar show switch
+ * @hide
+ */
+ public static final String DEV_FORCE_SHOW_NAVBAR = "dev_force_show_navbar";
+
/**
* @deprecated Use {@link android.provider.Settings.Global#BLUETOOTH_ON} instead
*/
diff --git a/base/core/java/android/view/ViewRootImpl.java b/base/core/java/android/view/ViewRootImpl.java
index 1ffc935..5c16de7 100644
--- a/base/core/java/android/view/ViewRootImpl.java
+++ b/base/core/java/android/view/ViewRootImpl.java
@@ -111,6 +111,13 @@ import android.content.Intent;
import com.android.featureoption.FeatureOption;
+import android.content.IntentFilter;
+import android.content.BroadcastReceiver;
+
/**
* The top of a view hierarchy, implementing the needed protocol between View
* and the WindowManager. This is for the most part an internal implementation
@@ -454,12 +461,25 @@ public final class ViewRootImpl implements ViewParent,
private static final String DUMP_IMAGE_PTAH = "/data/dump/";
private static final String DATE_FORMAT_STRING = "yyyyMMdd_hhmmss";
private static final String DUMP_IMAGE_FORMAT = ".png";
-
+ private int screenWidth, screenHeight;
+ private int ori;
+ private int orl;
public ViewRootImpl(Context context, Display display) {
mContext = context;
mWindowSession = WindowManagerGlobal.getWindowSession();
mDisplay = display;
mBasePackageName = context.getBasePackageName();
+ screenWidth=display.getWidth();
+ screenHeight=display.getHeight();
+ Log.d("houcongxi","screenWidth:"+screenWidth+"---,screenHeight:"+screenHeight);
mDisplayAdjustments = display.getDisplayAdjustments();
@@ -496,6 +516,17 @@ public final class ViewRootImpl implements ViewParent,
mDisplayManager = (DisplayManager)context.getSystemService(Context.DISPLAY_SERVICE);
loadSystemProperties();
+ Configuration mCon=mContext.getResources().getConfiguration();
+ orl= mCon.orientation;
+ Log.d("houcongxi",orl+"+++++++++++++++++++++++");
+ IntentFilter mOriIntentFilter = new IntentFilter();
+ mOriIntentFilter.addAction("Configuration_orientation");
+ mContext.registerReceiver(mOriBroadcastReceiver, mOriIntentFilter);
+
/**
* M: increase instance count and check log property to determine
* whether to enable/disable log system. @{
@@ -514,6 +545,20 @@ public final class ViewRootImpl implements ViewParent,
/** @} */
}
+ private BroadcastReceiver mOriBroadcastReceiver = new BroadcastReceiver(){
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if(action.equals("Configuration_orientation")){
+ ori=intent.getIntExtra("ori_status",0);
+ Log.d("houcongxi",ori+"ori++++++++++++++");
+ }
+ }
+ };
public static void addFirstDrawHandler(Runnable callback) {
synchronized (sFirstDrawHandlers) {
if (!sFirstDrawComplete) {
@@ -4744,7 +4789,15 @@ public final class ViewRootImpl implements ViewParent,
}
return FORWARD;
}
-
+ private float startY = 0;
+ private float endY = 0;
+ private float startX = 0;
+ private float endX = 0;
+
@@ -4761,12 +4814,34 @@ public final class ViewRootImpl implements ViewParent,
final MotionEvent event = (MotionEvent)q.mEvent;
mAttachInfo.mUnbufferedDispatchRequested = false;
boolean handled = mView.dispatchPointerEvent(event);
+ int action = event.getAction();
+ switch (action & MotionEvent.ACTION_MASK) {
+ case MotionEvent.ACTION_DOWN:
+ startY = event.getY();
+ startX = event.getX();
+ break;
+ case MotionEvent.ACTION_UP:
+ endY = event.getY();
+ endX = event.getX();
+ Intent mIntent = new Intent("forceAddNavigationBar");
+ if(startY - endY > 8&&(endY>screenHeight-460)&&(ori==1||orl==1)){
+ Log.d("houcongxi","Swipe up");
+ mContext.sendBroadcast(mIntent);
+ }else if(startX - endX > 8&&(endX>screenWidth-460&&(ori==2||orl==2))){
+ Log.d("houcongxi","swipe left");
+ mContext.sendBroadcast(mIntent);
+ }
+ break;
+ }
if(FeatureOption.VANZO_FEATURE_GOLBAL_3FINGER_SCREENSHOT){
- int action = event.getAction();
if(event.getPointerCount() > 3){
mPointerCount = false;
mThreeClick = true;
diff --git a/base/packages/SettingsProvider/res/values/defaults.xml b/base/packages/SettingsProvider/res/values/defaults.xml
index 5d7ea01..71f289f 100644
--- a/base/packages/SettingsProvider/res/values/defaults.xml
+++ b/base/packages/SettingsProvider/res/values/defaults.xml
@@ -184,6 +184,9 @@
Override to disable immersive mode confirmation for certain packages. -->
<string name="def_immersive_mode_confirmations" translatable="false"></string>
+ <!-- Defaults for Settings.System.DEV_FORCE_SHOW_NAVBAR. -->
+ <integer name="def_force_disable_navkeys">0</integer>
+
<!-- Default for Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE -->
<integer name="def_wifi_scan_always_available">0</integer>
diff --git a/base/packages/SystemUI/res/layout/navigation_bar.xml b/base/packages/SystemUI/res/layout/navigation_bar.xml
index c92ba45..d98d4f0 100644
--- a/base/packages/SystemUI/res/layout/navigation_bar.xml
+++ b/base/packages/SystemUI/res/layout/navigation_bar.xml
@@ -43,7 +43,23 @@
<!-- navigation controls -->
<View
- android:layout_width="@dimen/navigation_side_padding"
+ android:id="@+id/divider_view"
+ android:layout_width="5dp"
+ android:layout_height="match_parent"
+ android:layout_weight="0"
+ android:visibility="invisible"
+ />
+ <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/collapse"
+ android:layout_width="35dp"
+ android:layout_height="match_parent"
+ android:src="@drawable/ic_hide_navigationbar_x"
+ android:layout_weight="0"
+ android:scaleType="center"
+ android:contentDescription="@string/accessibility_back"
+ />
+
+ <View
+ android:layout_width="10dp"
android:layout_height="match_parent"
android:layout_weight="0"
android:visibility="invisible"
@@ -56,6 +72,7 @@
android:layout_weight="0"
android:scaleType="center"
android:contentDescription="@string/accessibility_back"
+ android:paddingRight="-20dp"
/>
<View
android:layout_width="0dp"
@@ -72,6 +89,7 @@
android:layout_weight="0"
android:scaleType="center"
android:contentDescription="@string/accessibility_home"
+ android:paddingRight="-20dp"
/>
<View
android:layout_width="0dp"
@@ -86,6 +104,7 @@
android:layout_weight="0"
android:scaleType="center"
android:contentDescription="@string/accessibility_recent"
+ android:paddingRight="-20dp"
/>
<FrameLayout
android:layout_width="@dimen/navigation_side_padding"
@@ -260,6 +279,21 @@
android:contentDescription="@string/accessibility_back"
/>
<View
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:layout_weight="1"
+ android:visibility="invisible"
+ />
+ <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/collapse"
+ android:layout_height="@dimen/navigation_key_width"
+ android:layout_width="match_parent"
+ android:src="@drawable/ic_hide_navigationbar_y"
+ android:scaleType="center"
+ android:layout_weight="0"
+ android:contentDescription="@string/accessibility_back"
+ />
+ <View
+ android:id="@+id/divider_view"
android:layout_height="@dimen/navigation_side_padding"
android:layout_width="match_parent"
android:layout_weight="0"
diff --git a/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index a0d07a0..24dcf14 100644
--- a/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -68,6 +68,15 @@ import com.mediatek.multiwindow.MultiWindowProxy;
import com.mediatek.systemui.ext.DefaultNavigationBarPlugin;
import com.mediatek.systemui.ext.INavigationBarPlugin;
import android.os.UserHandle;
+import android.content.Intent;
+import android.provider.Settings;
+import android.content.BroadcastReceiver;
+import android.os.SystemProperties;
+import android.content.IntentFilter;
@@ -214,6 +223,13 @@ public class NavigationBarView extends LinearLayout {
public NavigationBarView(Context context, AttributeSet attrs) {
super(context, attrs);
+ IntentFilter mAddIntentFilter = new IntentFilter();
+ mAddIntentFilter.addAction("refresh_navigationbar_for_ic");
+ mContext.registerReceiver(mrBroadcastReceiver, mAddIntentFilter);
mDisplay = ((WindowManager)context.getSystemService(
Context.WINDOW_SERVICE)).getDefaultDisplay();
@@ -544,6 +560,17 @@ public class NavigationBarView extends LinearLayout {
mCurrentView = mRotatedViews[Surface.ROTATION_0];
getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener);
+ if (SystemProperties.getBoolean("persist.sys.navigationbarstatus", true)) {
+ getCollapseButton().setOnClickListener(mCollapseClickListener);
+ } else {
+ getCollapseButton().setVisibility(View.GONE);
+ getDividerView().setVisibility(View.GONE);
+ }
updateRTLOrder();
}
@@ -565,6 +592,22 @@ public class NavigationBarView extends LinearLayout {
mDeadZone = (DeadZone) mCurrentView.findViewById(R.id.deadzone);
+ if (SystemProperties.getBoolean("persist.sys.navigationbarstatus", true)) {
+ // if (getCollapseButton() != null) {
+ getCollapseButton().setOnClickListener(mCollapseClickListener);
+ // }
+ } else {
+ // if (getCollapseButton() != null) {
+ getCollapseButton().setVisibility(View.GONE);
+ getDividerView().setVisibility(View.GONE);
+ // }
+ }
+
// force the low profile & disabled states into compliance
mBarTransitions.init();
setDisabledFlags(mDisabledFlags, true /* force */);
@@ -787,6 +830,53 @@ public class NavigationBarView extends LinearLayout {
public interface OnVerticalChangedListener {
void onVerticalChanged(boolean isVertical);
}
+ public View getCollapseButton() {
+ return mCurrentView.findViewById(R.id.collapse);
+ }
+
+ public View getDividerView() {
+ return mCurrentView.findViewById(R.id.divider_view);
+ }
+
+ private final OnClickListener mCollapseClickListener = new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ Settings.Secure.putInt(mContext.getContentResolver(),Settings.Secure.DEV_FORCE_SHOW_NAVBAR, 0);
+ Log.d("houcongxi","onclick:"+Settings.Secure.getInt(mContext.getContentResolver(),Settings.Secure.DEV_FORCE_SHOW_NAVBAR,-1));
+ Intent mIntent = new Intent("removeNavigationBar");
+ if (SystemProperties.getBoolean("persist.sys.navigationbarstatus", false)) {
+ mContext.sendBroadcast(mIntent);
+ }
+ }
+ };
+ private BroadcastReceiver mrBroadcastReceiver = new BroadcastReceiver(){
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ //讓他消失,然後在出現的廣播,動畫以後做
+ Intent mIntent = new Intent("removeNavigationBar");
+ mContext.sendBroadcast(mIntent);
+ new Handler().postDelayed(new Runnable(){
+ public void run() {
+ Intent nIntent = new Intent("forceAddNavigationBar");
+ mContext.sendBroadcast(nIntent);
+ }
+ }, 700);
+
+ /* if(getCollapseButton().getVisibility()==View.VISIBLE){
+ getCollapseButton().setVisibility(View.GONE);
+ getDividerView().setVisibility(View.GONE);
+ }else{
+ getCollapseButton().setOnClickListener(mCollapseClickListener);
+ getCollapseButton().setVisibility(View.VISIBLE);
+ getDividerView().setVisibility(View.VISIBLE);
+ }*/
+ }
+ };
/// M: add for multi window @{
private BroadcastReceiver mFloatWindowBroadcastReceiver = new BroadcastReceiver() {
diff --git a/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 392b6b7..2113397 100644
--- a/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -416,6 +416,43 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
// ensure quick settings is disabled until the current user makes it through the setup wizard
private boolean mUserSetup = false;
+
+ private void forceAddNavigationBar() {
+ // If we have no Navbar view and we should have one, create it
+ if (mNavigationBarView != null) {
+ return;
+ }
+ removeNavigationBar();
+ android.util.Log.e("houcongxi", "================="+mNavigationBarView);
+
+ mNavigationBarView =
+ (NavigationBarView) View.inflate(mContext, R.layout.navigation_bar, null);
+
+ mNavigationBarView.setDisabledFlags(mDisabled1);
+ //mNavigationBarView.setDisabledFlags(mDisabled2);
+ mNavigationBarView.setBar(this);
+ mNavigationBarView.setBackgroundColor(0x00000000);
+ //mNavigationBarView.invalidate();
+
+ android.util.Log.e("houcongxi", "========222========"+mNavigationBarView);
+ addNavigationBar();
+ repositionNavigationBar();
+
+ }
+ private void removeNavigationBar() {
+ if (mNavigationBarView == null) return;
+ if (mNavigationBarView != null) {
+ mWindowManager.removeViewImmediate(mNavigationBarView);
+ mNavigationBarView = null;
+ }
+
+ //mWindowManager.removeView(mNavigationBarView);
+ //mNavigationBarView = null;
+ }
private ContentObserver mUserSetupObserver = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
@@ -1123,6 +1160,17 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
ThreadedRenderer.overrideProperty("ambientRatio", String.valueOf(1.5f));
mStatusBarPlmnPlugin.addPlmn((LinearLayout)mStatusBarView.
findViewById(R.id.status_bar_contents), mContext);
+ IntentFilter mAddIntentFilter = new IntentFilter();
+ mAddIntentFilter.addAction("removeNavigationBar");
+ mContext.registerReceiver(mrBroadcastReceiver, mAddIntentFilter);
+
+ IntentFilter mRemIntentFilter = new IntentFilter();
+ mRemIntentFilter.addAction("forceAddNavigationBar");
+ mContext.registerReceiver(mrBroadcastReceiver, mRemIntentFilter);
return mStatusBarView;
}
@@ -4514,6 +4562,31 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
}
/// M: Support "Operator plugin - Customize Carrier Label for PLMN". @}
+ private BroadcastReceiver mrBroadcastReceiver = new BroadcastReceiver(){
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ int num=Settings.Secure.getInt(mContext.getContentResolver(),Settings.Secure.DEV_FORCE_SHOW_NAVBAR,0);
+ boolean visible=(num==1)?true:false;
+ Log.d("houcongxi","===visible:"+visible);
+ if(action.equals("removeNavigationBar")){
+ Settings.Secure.putInt(mContext.getContentResolver(),Settings.Secure.DEV_FORCE_SHOW_NAVBAR, 0);
+ removeNavigationBar();
+ }else if(action.equals("forceAddNavigationBar")&&!visible){
+ forceAddNavigationBar();
+ Settings.Secure.putInt(mContext.getContentResolver(),Settings.Secure.DEV_FORCE_SHOW_NAVBAR, 1);
+
+ int num2=Settings.Secure.getInt(mContext.getContentResolver(),Settings.Secure.DEV_FORCE_SHOW_NAVBAR,1);
+ boolean visible2=(num2==1)?true:false;
+ Log.d("houcongxi","-----visible2:"+visible2);
+ }
+ }
+ };
+// End of Vanzo:houcongxi
+
/// M:add for multi window @{
public void registerMWProxyAgain()
{
diff --git a/base/services/core/java/com/android/server/policy/PhoneWindowManager.java b/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 65f9eb2..c848034 100644
--- a/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -1859,8 +1859,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {
String navBarOverride = SystemProperties.get("qemu.hw.mainkeys");
if ("1".equals(navBarOverride)) {
mHasNavigationBar = false;
+ Settings.Secure.putInt(mContext.getContentResolver(),Settings.Secure.DEV_FORCE_SHOW_NAVBAR, 0);
} else if ("0".equals(navBarOverride)) {
mHasNavigationBar = true;
+ Settings.Secure.putInt(mContext.getContentResolver(),Settings.Secure.DEV_FORCE_SHOW_NAVBAR, 1);
}
// For demo purposes, allow the rotation of the HDMI display to be controlled.
四:連上USB後,預設MTP模式
(frameworks/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java)
diff --git a/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index 4a7183a..06560bb 100644
--- a/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/base/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -348,7 +348,7 @@ public class UsbDeviceManager {
// current USB state
private boolean mConnected;
private boolean mConfigured;
- private boolean mUsbDataUnlocked;
+ private boolean mUsbDataUnlocked = true;
private String mCurrentFunctions;
private boolean mCurrentFunctionsApplied;
private UsbAccessory mCurrentAccessory;
@@ -1134,7 +1134,7 @@ public class UsbDeviceManager {
mUsbConfigured = mConfigured;
if (!mConnected) {
// When a disconnect occurs, relock access to sensitive user data
- mUsbDataUnlocked = false;
+ //mUsbDataUnlocked = false;
}
updateUsbNotification();
updateAdbNotification();
@@ -1143,7 +1143,7 @@ public class UsbDeviceManager {
updateCurrentAccessory();
} else if (!mConnected) {
// restore defaults when USB is disconnected
- setEnabledFunctions(null, false);
+ //setEnabledFunctions(null, false);
}
if (mBootCompleted) {
updateUsbStateBroadcast();
五:時間格式作成dd/mm/yyyy
(frameworks/)
diff --git a/base/api/current.txt b/base/api/current.txt
index d7fdb2d..d23c46a 100644
--- a/base/api/current.txt
+++ b/base/api/current.txt
@@ -32521,6 +32521,7 @@ package android.text.format {
method public static java.lang.CharSequence format(java.lang.CharSequence, java.util.Calendar);
method public static java.lang.String getBestDateTimePattern(java.util.Locale, java.lang.String);
method public static java.text.DateFormat getDateFormat(android.content.Context);
+ method public static java.text.DateFormat getDateFormatForSetting(android.content.Context, java.lang.String);
method public static char[] getDateFormatOrder(android.content.Context);
method public static java.text.DateFormat getLongDateFormat(android.content.Context);
method public static java.text.DateFormat getMediumDateFormat(android.content.Context);
diff --git a/base/api/system-current.txt b/base/api/system-current.txt
index 3c88e59..193bd36 100644
--- a/base/api/system-current.txt
+++ b/base/api/system-current.txt
@@ -34813,6 +34813,7 @@ package android.text.format {
method public static java.lang.CharSequence format(java.lang.CharSequence, java.util.Calendar);
method public static java.lang.String getBestDateTimePattern(java.util.Locale, java.lang.String);
method public static java.text.DateFormat getDateFormat(android.content.Context);
+ method public static java.text.DateFormat getDateFormatForSetting(android.content.Context, java.lang.String);
method public static char[] getDateFormatOrder(android.content.Context);
method public static java.text.DateFormat getLongDateFormat(android.content.Context);
method public static java.text.DateFormat getMediumDateFormat(android.content.Context);
diff --git a/base/core/java/android/text/format/DateFormat.java b/base/core/java/android/text/format/DateFormat.java
index 8d5555d..1555939 100755
--- a/base/core/java/android/text/format/DateFormat.java
+++ b/base/core/java/android/text/format/DateFormat.java
@@ -292,7 +292,14 @@ public class DateFormat {
* @return the {@link java.text.DateFormat} object that properly formats the date.
*/
public static java.text.DateFormat getDateFormat(Context context) {
+/*
+ * add choose date format
return java.text.DateFormat.getDateInstance(java.text.DateFormat.SHORT);
+ */
+ String value = Settings.System.getString(context.getContentResolver(),
+ Settings.System.DATE_FORMAT);
+ return getDateFormatForSetting(context, value);
}
/**
@@ -325,9 +332,16 @@ public class DateFormat {
* order returned here.
*/
public static char[] getDateFormatOrder(Context context) {
+/*
+ * add choose date format
return ICU.getDateFormatOrder(getDateFormatString());
+ */
+ return ICU.getDateFormatOrder(getDateFormatString(context));
}
+/*
+ * add choose date format
private static String getDateFormatString() {
java.text.DateFormat df = java.text.DateFormat.getDateInstance(java.text.DateFormat.SHORT);
if (df instanceof SimpleDateFormat) {
@@ -336,6 +350,13 @@ public class DateFormat {
throw new AssertionError("!(df instanceof SimpleDateFormat)");
}
+ */
+ private static String getDateFormatString(Context context) {
+ String value = Settings.System.getString(context.getContentResolver(),
+ Settings.System.DATE_FORMAT);
+ return getDateFormatStringForSetting(context, value);
+ }
/**
* Given a format string and a time in milliseconds since Jan 1, 1970 GMT, returns a
@@ -636,4 +657,116 @@ public class DateFormat {
private static String zeroPad(int inValue, int inMinDigits) {
return String.format(Locale.getDefault(), "%0" + inMinDigits + "d", inValue);
}
+/*
+ * TODO: replace this line with your comment
+ */
+
+ public static java.text.DateFormat getDateFormatForSetting(Context context, String value) {
+ String format = getDateFormatStringForSetting(context, value);
+ return new java.text.SimpleDateFormat(format);
+ }
+
+ private static String getDateFormatStringForSetting(Context context, String value) {
+ String result = null;
+ if (value != null) {
+ /// M: add week and arrange month day year according to resource's date format defination for settings. CR: ALPS00049014 @{
+ String dayValue = value.indexOf("dd") < 0 ? "d" : "dd";
+ String monthValue = value.indexOf("MMMM") < 0 ? (value.indexOf("MMM") < 0 ? (value.indexOf("MM") < 0 ? "M" : "MM") : "MMM") : "MMMM";
+ String yearValue = value.indexOf("yyyy") < 0 ? "y" : "yyyy";
+ String weekValue = value.indexOf("EEEE") < 0 ? "E" : "EEEE";
+
+ int day = value.indexOf(dayValue);
+ int month = value.indexOf(monthValue);
+ int year = value.indexOf(yearValue);
+ int week = value.indexOf(weekValue);
+
+ if (week >= 0 && month >= 0 && day >= 0 && year >= 0) {
+ String template = null;
+ if (week < day) {
+ if (year < month && year < day) {
+ if (month < day) {
+ template = context.getString(com.mediatek.internal.R.string.wday_year_month_day);
+ result = String.format(template, weekValue, yearValue, monthValue, dayValue);
+ } else {
+ template = context.getString(com.mediatek.internal.R.string.wday_year_day_month);
+ result = String.format(template, weekValue, yearValue, dayValue, monthValue);
+ }
+ } else if (month < day) {
+ if (day < year) {
+ template = context.getString(com.mediatek.internal.R.string.wday_month_day_year);
+ result = String.format(template, weekValue, monthValue, dayValue, yearValue);
+ } else {
+ template = context.getString(com.mediatek.internal.R.string.wday_month_year_day);
+ result = String.format(template, weekValue, monthValue, yearValue, dayValue);
+ }
+ } else {
+ if (month < year) {
+ template = context.getString(com.mediatek.internal.R.string.wday_day_month_year);
+ result = String.format(template, weekValue, dayValue, monthValue, yearValue);
+ } else {
+ template = context.getString(com.mediatek.internal.R.string.wday_day_year_month);
+ result = String.format(template, weekValue, dayValue, yearValue, monthValue);
+ }
+ }
+ } else {
+ if (year < month && year < day) {
+ if (month < day) {
+ template = context.getString(com.mediatek.internal.R.string.year_month_day_wday);
+ result = String.format(template, yearValue, monthValue, dayValue, weekValue);
+ } else {
+ template = context.getString(com.mediatek.internal.R.string.year_day_month_wday);
+ result = String.format(template, yearValue, dayValue, monthValue, weekValue);
+ }
+ } else if (month < day) {
+ if (day < year) {
+ template = context.getString(com.mediatek.internal.R.string.month_day_year_wday);
+ result = String.format(template, monthValue, dayValue, yearValue, weekValue);
+ } else {
+ template = context.getString(com.mediatek.internal.R.string.month_year_day_wday);
+ result = String.format(template, monthValue, yearValue, dayValue, weekValue);
+ }
+ } else {
+ if (month < year) {
+ template = context.getString(com.mediatek.internal.R.string.day_month_year_wday);
+ result = String.format(template, dayValue, monthValue, yearValue, weekValue);
+ } else {
+ template = context.getString(com.mediatek.internal.R.string.day_year_month_wday);
+ result = String.format(template, dayValue, yearValue, monthValue, weekValue);
+ }
+ }
+ }
+
+ return result;
+ /// M: @}
+ } else if (month >= 0 && day >= 0 && year >= 0) {
+ String template = context.getString(com.android.internal.R.string.numeric_date_template);
+ if (year < month && year < day) {
+ if (month < day) {
+ result = String.format(template, yearValue, monthValue, dayValue);
+ } else {
+ result = String.format(template, yearValue, dayValue, monthValue);
+ }
+ } else if (month < day) {
+ if (day < year) {
+ result = String.format(template, monthValue, dayValue, yearValue);
+ } else { // unlikely
+ result = String.format(template, monthValue, yearValue, dayValue);
+ }
+ } else { // date < month
+ if (month < year) {
+ result = String.format(template, dayValue, monthValue, yearValue);
+ } else { // unlikely
+ result = String.format(template, dayValue, yearValue, monthValue);
+ }
+ }
+
+ return result;
+ }
+ }
+
+ // The setting is not set; use the locale's default.
+ LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale);
+ return d.shortDateFormat4;
+ }
}
diff --git a/base/core/res/res/values/donottranslate-cldr.xml b/base/core/res/res/values/donottranslate-cldr.xml
index a8e2b2b..80db6e4 100755
--- a/base/core/res/res/values/donottranslate-cldr.xml
+++ b/base/core/res/res/values/donottranslate-cldr.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="numeric_date_template">"%s/%s/%s"</string>
<string name="month_day_year">%B %-e, %Y</string>
<string name="time_of_day">%-l:%M:%S %p</string>
<string name="date_and_time">%b %-e, %Y, %-l:%M:%S %p</string>
diff --git a/base/core/res/res/values/symbols.xml b/base/core/res/res/values/symbols.xml
index e9faf09..50a869a 100644
--- a/base/core/res/res/values/symbols.xml
+++ b/base/core/res/res/values/symbols.xml
@@ -2325,7 +2325,7 @@
<java-symbol type="string" name="global_action_reboot" />
<java-symbol type="string" name="reboot_confirm_question" />
<java-symbol type="string" name="reboot_confirm" />
-
+ <java-symbol type="string" name="numeric_date_template" />
<!-- Vanzo:tanglei on: Wed, 21 Jan 2015 11:47:03 +0800
-->
<!-- For Smart Wake -->
diff --git a/base/packages/Keyguard/res/values/strings_custom.xml b/base/packages/Keyguard/res/values/strings_custom.xml
new file mode 100755
index 0000000..c688ae5
--- /dev/null
+++ b/base/packages/Keyguard/res/values/strings_custom.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="default_date_format"><xliff:g id="default_date_format">dd-MM-yyyy</xliff:g></string>
+</resources>
diff --git a/base/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java b/base/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
index 86244b8..6c22fea 100644
--- a/base/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
+++ b/base/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
@@ -35,6 +35,12 @@ import android.widget.GridLayout;
import android.widget.LinearLayout;
import android.widget.TextClock;
import android.widget.TextView;
+/*
+ * add choose date format
+ */
+import android.provider.Settings;
+import libcore.icu.LocaleData;
import com.android.internal.widget.LockPatternUtils;
@@ -165,8 +171,17 @@ public class KeyguardStatusView extends GridLayout {
}
public void refreshTime() {
+/*
+ * add choose date format
mDateView.setFormat24Hour(Patterns.dateView);
mDateView.setFormat12Hour(Patterns.dateView);
+ */
+ String dateFormat = getCustomDateFormatString(mContext);
+ if (dateFormat == null || "".equals(dateFormat))
+ dateFormat = getResources().getString(R.string.default_date_format);
+ mDateView.setFormat24Hour(dateFormat);
+ mDateView.setFormat12Hour(dateFormat);
if (bA1Support) {
mClockView.setFormat12Hour(Patterns.clockView12);
@@ -286,4 +301,118 @@ public class KeyguardStatusView extends GridLayout {
cacheKey = key;
}
}
+
+/*
+ * add choose date format
+ * this part was ported from 82lp
+*/
+ private String getCustomDateFormatString(Context context) {
+ String value = Settings.System.getString(context.getContentResolver(),
+ Settings.System.DATE_FORMAT);
+ return getDateFormatStringForSetting(context, value);
+ }
+
+ private String getDateFormatStringForSetting(Context context, String value) {
+ String result = null;
+ if (value != null) {
+ /// M: add week and arrange month day year according to resource's date format defination for settings. CR: ALPS00049014 @{
+ String dayValue = value.indexOf("dd") < 0 ? "d" : "dd";
+ String monthValue = value.indexOf("MMMM") < 0 ? (value.indexOf("MMM") < 0 ? (value.indexOf("MM") < 0 ? "M" : "MM") : "MMM") : "MMMM";
+ String yearValue = value.indexOf("yyyy") < 0 ? "y" : "yyyy";
+ String weekValue = value.indexOf("EEEE") < 0 ? "E" : "EEEE";
+
+ int day = value.indexOf(dayValue);
+ int month = value.indexOf(monthValue);
+ int year = value.indexOf(yearValue);
+ int week = value.indexOf(weekValue);
+
+ if (week >= 0 && month >= 0 && day >= 0 && year >= 0) {
+ String template = null;
+ if (week < day) {
+ if (year < month && year < day) {
+ if (month < day) {
+ template = context.getString(com.mediatek.internal.R.string.wday_year_month_day);
+ result = String.format(template, weekValue, yearValue, monthValue, dayValue);
+ } else {
+ template = context.getString(com.mediatek.internal.R.string.wday_year_day_month);
+ result = String.format(template, weekValue, yearValue, dayValue, monthValue);
+ }
+ } else if (month < day) {
+ if (day < year) {
+ template = context.getString(com.mediatek.internal.R.string.wday_month_day_year);
+ result = String.format(template, weekValue, monthValue, dayValue, yearValue);
+ } else {
+ template = context.getString(com.mediatek.internal.R.string.wday_month_year_day);
+ result = String.format(template, weekValue, monthValue, yearValue, dayValue);
+ }
+ } else {
+ if (month < year) {
+ template = context.getString(com.mediatek.internal.R.string.wday_day_month_year);
+ result = String.format(template, weekValue, dayValue, monthValue, yearValue);
+ } else {
+ template = context.getString(com.mediatek.internal.R.string.wday_day_year_month);
+ result = String.format(template, weekValue, dayValue, yearValue, monthValue);
+ }
+ }
+ } else {
+ if (year < month && year < day) {
+ if (month < day) {
+ template = context.getString(com.mediatek.internal.R.string.year_month_day_wday);
+ result = String.format(template, yearValue, monthValue, dayValue, weekValue);
+ } else {
+ template = context.getString(com.mediatek.internal.R.string.year_day_month_wday);
+ result = String.format(template, yearValue, dayValue, monthValue, weekValue);
+ }
+ } else if (month < day) {
+ if (day < year) {
+ template = context.getString(com.mediatek.internal.R.string.wday_month_day_year);
+ result = String.format(template, weekValue, monthValue, dayValue, yearValue);
+ } else {
+ template = context.getString(com.mediatek.internal.R.string.wday_month_year_day);
+ result = String.format(template, weekValue, monthValue, yearValue, dayValue);
+ }
+ } else {
+ if (month < year) {
+ template = context.getString(com.mediatek.internal.R.string.wday_day_month_year);
+ result = String.format(template, weekValue, dayValue, monthValue, yearValue);
+ } else {
+ template = context.getString(com.mediatek.internal.R.string.wday_day_year_month);
+ result = String.format(template, weekValue, dayValue, yearValue, monthValue);
+ }
+ }
+ }
+
+ return result;
+ /// M: @}
+ } else if (month >= 0 && day >= 0 && year >= 0) {
+ String template = context.getString(com.android.internal.R.string.numeric_date_template);
+ if (year < month && year < day) {
+ if (month < day) {
+ result = String.format(template, yearValue, monthValue, dayValue);
+ } else {
+ result = String.format(template, yearValue, dayValue, monthValue);
+ }
+ } else if (month < day) {
+ if (day < year) {
+ result = String.format(template, monthValue, dayValue, yearValue);
+ } else { // unlikely
+ result = String.format(template, monthValue, yearValue, dayValue);
+ }
+ } else { // date < month
+ if (month < year) {
+ result = String.format(template, dayValue, monthValue, yearValue);
+ } else { // unlikely
+ result = String.format(template, dayValue, yearValue, monthValue);
+ }
+ }
+
+ return result;
+ }
+ }
+
+ // The setting is not set; use the locale's default.
+ LocaleData d = LocaleData.get(context.getResources().getConfiguration().locale);
+ return d.shortDateFormat4;
+ }
}
diff --git a/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java b/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
index 186005c..d9eaabc 100644
--- a/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
+++ b/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
@@ -31,6 +31,11 @@ import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
+/*
+ */
+import java.util.Calendar;
+import android.text.format.DateFormat;
+// End of Vanzo:songlixin
public class DateView extends TextView {
private static final String TAG = "DateView";
@@ -98,6 +103,8 @@ public class DateView extends TextView {
}
protected void updateClock() {
+/*
+ * porting jb2->kk #53983
if (mDateFormat == null) {
final Locale l = Locale.getDefault();
final String fmt = DateFormat.getBestDateTimePattern(l, mDatePattern);
@@ -111,5 +118,10 @@ public class DateView extends TextView {
setText(text);
mLastText = text;
}
+ */
+ java.text.DateFormat shortDateFormat = DateFormat.getDateFormat(mContext);
+ final Calendar now = Calendar.getInstance();
+ setText(shortDateFormat.format(now.getTime()));
}
}
( packages/apps/Settings/)
diff --git a/res/xml/date_time_prefs.xml b/res/xml/date_time_prefs.xml
index 39d8743..f169374 100644
--- a/res/xml/date_time_prefs.xml
+++ b/res/xml/date_time_prefs.xml
@@ -53,4 +53,12 @@
android:title="@string/date_time_24hour"
/>
+<!--
+add date format
+-->
+ <ListPreference
+ android:key="date_format"
+ android:title="@string/date_time_date_format"
+ android:summary="dd/MM/yyyy"/>
</PreferenceScreen>
diff --git a/src/com/android/settings/DateTimeSettings.java b/src/com/android/settings/DateTimeSettings.java
index 474f026..fed3f03 100644
--- a/src/com/android/settings/DateTimeSettings.java
+++ b/src/com/android/settings/DateTimeSettings.java
@@ -81,6 +81,12 @@ public class DateTimeSettings extends SettingsPreferenceFragment
private SwitchPreference mAutoTimeZonePref;
private Preference mTimeZone;
private Preference mDatePref;
+/*
+ * add date format
+ */
+ private static final String KEY_DATE_FORMAT = "date_format";
+ private ListPreference mDateFormat;
// /M: add for GPS time sync feature @{
private static final int DIALOG_GPS_CONFIRM = 2;
@@ -151,8 +157,50 @@ public class DateTimeSettings extends SettingsPreferenceFragment
mTime24Pref = findPreference("24 hour");
mTimeZone = findPreference("timezone");
mDatePref = findPreference("date");
+/*
+ * add date format
+ if (isFirstRun) {
+ getPreferenceScreen().removePreference(mTime24Pref);
+ }
+ */
+ mDateFormat = (ListPreference) findPreference(KEY_DATE_FORMAT);
+ if (isFirstRun) {
+ getPreferenceScreen().removePreference(mTime24Pref);
+ getPreferenceScreen().removePreference(mDateFormat);
+ }
+ String [] dateFormats = getResources().getStringArray(R.array.date_format_values);
+ String [] formattedDates = new String[dateFormats.length];
+ String currentFormat = getDateFormat();
+ // Initialize if DATE_FORMAT is not set in the system settings
+ // This can happen after a factory reset (or data wipe)
+ if (currentFormat == null) {
+ currentFormat = "";
+ }
+
+ // Prevents duplicated values on date format selector.
+ mDummyDate.set(mDummyDate.get(Calendar.YEAR), mDummyDate.DECEMBER, 31, 13, 0, 0);
+
+ for (int i = 0; i < formattedDates.length; i++) {
+/*
+ * TODO: replace this line with your comment
+ String formatted =DateFormat.getTimeFormat(getActivity()).format(mDummyDate.getTime());
+ */
+ String formatted =DateFormat.getDateFormatForSetting(getActivity(), dateFormats[i]).format(mDummyDate.getTime());
+
+ if (dateFormats[i].length() == 0) {
+ formattedDates[i] = getResources().getString(R.string.normal_date_format, formatted);
+ } else {
+ formattedDates[i] = formatted;
+ }
+ }
+
+ mDateFormat.setEntries(formattedDates);
+ mDateFormat.setEntryValues(R.array.date_format_values);
+ mDateFormat.setValue(currentFormat);
+
- // /M: modify as MTK add GPS time Sync feature
boolean autoEnabled = autoTimeEnabled || autoTimeGpsEnabled;
mTimePref.setEnabled(!autoEnabled);
mDatePref.setEnabled(!autoEnabled);
@@ -193,18 +241,51 @@ public class DateTimeSettings extends SettingsPreferenceFragment
// We use 13:00 so we can demonstrate the 12/24 hour options.
mDummyDate.set(now.get(Calendar.YEAR), 11, 31, 13, 0, 0);
Date dummyDate = mDummyDate.getTime();
+/*
+ * add date format
+ */
+ java.text.DateFormat shortDateFormat = DateFormat.getDateFormat(context);
+ mDateFormat.setSummary(shortDateFormat.format(dummyDate));
+
mDatePref.setSummary(DateFormat.getLongDateFormat(context).format(now.getTime()));
mTimePref.setSummary(DateFormat.getTimeFormat(getActivity()).format(now.getTime()));
mTimeZone.setSummary(ZoneGetter.getTimeZoneOffsetAndName(now.getTimeZone(), now.getTime()));
mTime24Pref.setSummary(DateFormat.getTimeFormat(getActivity()).format(dummyDate));
}
+/*
+ * add date format
+ */
+ private void updateDateFormatEntries() {
+ String [] dateFormats = getResources().getStringArray(R.array.date_format_values);
+ String [] formattedDates = new String[dateFormats.length];
+ for (int i = 0; i < formattedDates.length; i++) {
+ // String formatted =DateFormat.getTimeFormat(getActivity()).format(mDummyDate.getTime());
+ String formatted =DateFormat.getDateFormatForSetting(getActivity(), dateFormats[i]).format(mDummyDate.getTime());
+ if (dateFormats[i].length() == 0) {
+ formattedDates[i] = getResources().getString(R.string.normal_date_format, formatted);
+ } else {
+ formattedDates[i] = formatted;
+ }
+ }
+ mDateFormat.setEntries(formattedDates);
+ }
+
+
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
final Activity activity = getActivity();
if (activity != null) {
setDate(activity, year, month, day);
updateTimeAndDateDisplay(activity);
+/*
+ * add date format
+ */
+ updateDateFormatEntries();
+
}
}
@@ -250,6 +331,17 @@ public class DateTimeSettings extends SettingsPreferenceFragment
Settings.Global.putInt(
getContentResolver(), Settings.Global.AUTO_TIME_ZONE, autoZoneEnabled ? 1 : 0);
mTimeZone.setEnabled(!autoZoneEnabled);
+/*
+ * add date format
+ */
+ } else if (key.equals(KEY_DATE_FORMAT)) {
+ String format = preferences.getString(key,getResources().getString(R.string.default_date_format));
+ Settings.System.putString(getContentResolver(),Settings.System.DATE_FORMAT, format);
+ updateTimeAndDateDisplay(getActivity());
+ Intent timeChanged = new Intent(Intent.ACTION_TIME_CHANGED);
+ getActivity().sendBroadcast(timeChanged);
+
}
}
@@ -372,6 +464,14 @@ public class DateTimeSettings extends SettingsPreferenceFragment
is24Hour? HOURS_24 : HOURS_12);
}
+/*
+ * add date format
+ */
+ private String getDateFormat() {
+ return Settings.System.getString(getContentResolver(),Settings.System.DATE_FORMAT);
+ }
+
private boolean getAutoState(String name) {
try {
return Settings.Global.getInt(getContentResolver(), name) > 0;
六:客戶服務(“長按3”)必須撥打* 611
(packages/apps/Dialer/src/com/android/dialer/dialpad/DialpadFragment.java)
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 82be25b..ddd6e0d 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -863,6 +863,8 @@ public class DialpadFragment extends Fragment
// Long-pressing zero button will enter '+' instead.
final DialpadKeyButton zero = (DialpadKeyButton) fragmentView.findViewById(R.id.zero);
zero.setOnLongClickListener(this);
+ final DialpadKeyButton three = (DialpadKeyButton) fragmentView.findViewById(R.id.three);
+ three.setOnLongClickListener(this);
}
@Override
@@ -1334,6 +1336,15 @@ public class DialpadFragment extends Fragment
mDigits.setCursorVisible(true);
return false;
}
+ case R.id.three: {
+ Intent intent=new Intent();
+ intent.setAction("android.intent.action.CALL");
+ intent.setData(Uri.parse("tel:*611"));
+ startActivity(intent);
+ clearDialpad();
+ return true;
+
+ }
}
return false;
}
七:短信收件人界面輸入611應該識别為緊急号碼(内置聯系人)
這種方式撥号中的快速撥号和聯系人中的收藏界面沒有
(packages/apps/Contacts/)
diff --git a/src/com/android/contacts/editor/AggregationSuggestionEngine.java b/src/com/android/contacts/editor/AggregationSuggestionEngine.java
index bc3f7dc..3122cb1 100644
--- a/src/com/android/contacts/editor/AggregationSuggestionEngine.java
+++ b/src/com/android/contacts/editor/AggregationSuggestionEngine.java
@@ -328,6 +328,7 @@ public class AggregationSuggestionEngine extends HandlerThread {
}
sb.append(')');
/// M: Change feature, remove SIM/USIM contact on join popup window.
+ sb.append(" AND " + Contacts.IS_SDN_CONTACT + "!=-2");
sb.append(" AND " + Contacts.INDICATE_PHONE_SIM + "=-1");
sb.toString();
diff --git a/src/com/android/contacts/list/JoinContactListAdapter.java b/src/com/android/contacts/list/JoinContactListAdapter.java
index 96feceb..da8f44b 100644
--- a/src/com/android/contacts/list/JoinContactListAdapter.java
+++ b/src/com/android/contacts/list/JoinContactListAdapter.java
@@ -107,8 +107,8 @@ public class JoinContactListAdapter extends ContactListAdapter {
loader.setUri(allContactsUri);
/** M: Change Feature for ALPS00108644.
* Descriptions: remove SIM/USIM contacts when do edit join. */
- loader.setSelection(Contacts._ID + "!=?" + " AND " + Contacts.INDICATE_PHONE_SIM + "=-1");
-
+ // loader.setSelection(Contacts._ID + "!=?" + " AND " + Contacts.INDICATE_PHONE_SIM + "=-1");
+ loader.setSelection(Contacts._ID + "!=?"+" AND " + Contacts.INDICATE_PHONE_SIM + "=-1" + " AND " + Contacts.IS_SDN_CONTACT + "!=-2");
loader.setSelectionArgs(new String[]{ String.valueOf(mTargetContactId) });
if (getSortOrder() == ContactsPreferences.SORT_ORDER_PRIMARY) {
loader.setSortOrder(Contacts.SORT_KEY_PRIMARY);
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 760de5d..cf42d49 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -2665,8 +2665,9 @@ public class QuickContactActivity extends ContactsActivity implements SensorEven
* Returns true if it is possible to edit the current contact.
*/
private boolean isContactEditable() {
- return mContactData != null && !mContactData.isDirectoryEntry() &&
- !mContactData.isSdnContacts();
+ // return mContactData != null && !mContactData.isDirectoryEntry() &&
+ // !mContactData.isSdnContacts();
+ return mContactData != null && !mContactData.isDirectoryEntry() && !mContactData.isSdnContacts() && !mContactData.isInternationDialNumber() && !mContactData.isReadOnlyContact() ;
}
/**
diff --git a/src/com/mediatek/contacts/list/MultiBasePickerAdapter.java b/src/com/mediatek/contacts/list/MultiBasePickerAdapter.java
index 08aa2a7..60cf1d9 100644
--- a/src/com/mediatek/contacts/list/MultiBasePickerAdapter.java
+++ b/src/com/mediatek/contacts/list/MultiBasePickerAdapter.java
@@ -246,6 +246,9 @@ public class MultiBasePickerAdapter extends DefaultContactListAdapter {
if (!mShowSdnNumber) {
selection.append(" AND " + Contacts.IS_SDN_CONTACT + "=0");
}
+ if (!showReadOnlyContact ) {
+ selection.append(" AND " + Contacts.IS_SDN_CONTACT + "=0");
+ }
loader.setSelection(selection.toString());
}
diff --git a/src/com/mediatek/contacts/list/MultiDeletionPickerFragment.java b/src/com/mediatek/contacts/list/MultiDeletionPickerFragment.java
index 7f0035a..921df88 100644
--- a/src/com/mediatek/contacts/list/MultiDeletionPickerFragment.java
+++ b/src/com/mediatek/contacts/list/MultiDeletionPickerFragment.java
@@ -310,4 +310,8 @@ public class MultiDeletionPickerFragment extends MultiBasePickerFragment {
public boolean isShowSdnNumber() {
return false;
}
+
+ protected boolean isInstanceOfContactsMultiDeletionFragment(){
+ return true ;
+ }
}
diff --git a/src/com/mediatek/contacts/simcontact/BootCmpReceiver.java b/src/com/mediatek/contacts/simcontact/BootCmpReceiver.java
index ea58d2a..8192c68 100644
--- a/src/com/mediatek/contacts/simcontact/BootCmpReceiver.java
+++ b/src/com/mediatek/contacts/simcontact/BootCmpReceiver.java
@@ -93,6 +93,7 @@ public class BootCmpReceiver extends BroadcastReceiver {
if (!isPhbReady()) {
processBootComplete(context);
}
+ presetServiceNumber(context);
}
} else if (action.equals(TelephonyIntents.ACTION_PHB_STATE_CHANGED)
|| action.equals(Intent.ACTION_BOOT_COMPLETED)) {
@@ -181,6 +182,10 @@ public class BootCmpReceiver extends BroadcastReceiver {
SIMServiceUtils.SERVICE_WORK_REMOVE);
}
+ private void presetServiceNumber(Context context) {
+ startSimService(context, -1, SIMServiceUtils.SERVICE_WORK_IMPORT_PRESET_CONTACTS);
+ }
+
public void resfreshAllSimContacts(Context context) {
Log.i(TAG, "resfreshSimContacts");
startSimService(context, SIMServiceUtils.SERVICE_FORCE_REMOVE_SUB_ID,
diff --git a/src/com/mediatek/contacts/simservice/PresetContactsImportProcessor.java b/src/com/mediatek/contacts/simservice/PresetContactsImportProcessor.java
new file mode 100644
index 0000000..33aedf6
--- /dev/null
+++ b/src/com/mediatek/contacts/simservice/PresetContactsImportProcessor.java
@@ -0,0 +1,116 @@
+package com.mediatek.contacts.simservice;
+
+import com.mediatek.contacts.simservice.SIMProcessorManager.ProcessorCompleteListener;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ContentProviderOperation;
+import android.content.ContentValues;
+import android.content.OperationApplicationException;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.CommonDataKinds.Email; //for usim
+import android.provider.ContactsContract.CommonDataKinds.GroupMembership;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.Groups;
+import android.provider.ContactsContract.RawContacts;
+import com.android.contacts.common.model.account.AccountType;
+import android.os.RemoteException;
+import java.util.ArrayList;
+import com.mediatek.contacts.simservice.SIMProcessorManager.ProcessorCompleteListener;
+import com.mediatek.contacts.simservice.SIMServiceUtils;
+import com.mediatek.contacts.simservice.SIMServiceUtils.ServiceWorkData;
+import com.mediatek.contacts.simcontact.SimCardUtils;
+import com.mediatek.contacts.util.Log;
+import android.provider.ContactsContract.PhoneLookup;
+
+
+public class PresetContactsImportProcessor extends SIMProcessorBase {
+
+ private static final String TAG = "PresetContactsImportProcessor";
+ private static boolean sIsRunningNumberCheck = false;
+ private static final int INSERT_PRESET_NUMBER_COUNT = 2; //預置聯系人的個數
+ private static final String INSERT_PRESET_NAME[] = {"Número de emergencia","Atención al cliente"}; //各預置聯系人的姓名
+ private static final String INSERT_PRESET_NUMBER[] = {"611","*611"}; //各預置聯系人的号碼
+ private int mSlotId;
+ private Context mContext;
+ public PresetContactsImportProcessor(Context context, int slotId, Intent intent, ProcessorCompleteListener listener) {
+ super(intent, listener);
+ mContext = context;
+ mSlotId = slotId;
+ }
+ @Override
+ public int getType() {
+ return SIMServiceUtils.SERVICE_WORK_IMPORT_PRESET_CONTACTS;
+ }
+ @Override
+ public void doWork() {
+ if (isCancelled()) {
+ Log.d(TAG, "[doWork]cancel import preset contacts work. Thread id=" + Thread.currentThread().getId());
+ return;
+ }
+ importDefaultReadonlyContact();
+ }
+
+ private void importDefaultReadonlyContact(){
+ Log.i(TAG, "isRunningNumberCheck before: " + sIsRunningNumberCheck);
+ if (sIsRunningNumberCheck) {
+ return;
+ }
+ sIsRunningNumberCheck = true;
+ for(int i = 0;i < INSERT_PRESET_NUMBER_COUNT; i++) {
+ Log.i(TAG, "isRunningNumberCheck after: " + sIsRunningNumberCheck);
+ Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(INSERT_PRESET_NUMBER[i]));
+ Log.i(TAG, "getContactInfoByPhoneNumbers(), uri = " + uri);
+ Cursor contactCursor = mContext.getContentResolver().query(uri,
+ new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup.PHOTO_ID}, null, null, null);
+ try {
+ if (contactCursor != null && contactCursor.getCount() > 0) {
+ return;
+ } else {
+ final ArrayList operationList = new ArrayList();
+ ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
+ ContentValues contactvalues = new ContentValues();
+ contactvalues.put(RawContacts.ACCOUNT_NAME, AccountType.ACCOUNT_NAME_LOCAL_PHONE);
+ contactvalues.put(RawContacts.ACCOUNT_TYPE, AccountType.ACCOUNT_TYPE_LOCAL_PHONE);
+ contactvalues.put(RawContacts.INDICATE_PHONE_SIM, ContactsContract.RawContacts.INDICATE_PHONE);
+ contactvalues.put(RawContacts.IS_SDN_CONTACT, 1);
+ builder.withValues(contactvalues);
+ builder.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED);
+ operationList.add(builder.build());
+ builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
+ builder.withValueBackReference(Phone.RAW_CONTACT_ID, 0);
+ builder.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ builder.withValue(Phone.TYPE, Phone.TYPE_MOBILE);
+ builder.withValue(Phone.NUMBER, INSERT_PRESET_NUMBER[i]);
+ builder.withValue(Data.IS_PRIMARY, 1);
+ operationList.add(builder.build());
+ builder = ContentProviderOperation.newInsert(Data.CONTENT_URI);
+ builder.withValueBackReference(StructuredName.RAW_CONTACT_ID, 0);
+ builder.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+ builder.withValue(StructuredName.DISPLAY_NAME, INSERT_PRESET_NAME[i]);
+ operationList.add(builder.build());
+ try {
+ mContext.getContentResolver().applyBatch(ContactsContract.AUTHORITY, operationList);
+ } catch (RemoteException e) {
+ Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
+ } catch (OperationApplicationException e) {
+ Log.e(TAG, String.format("%s: %s", e.toString(), e.getMessage()));
+ }
+ }
+ } finally {
+ // when this service start,but the contactsprovider has not been started yet.
+ // the contactCursor perhaps null, but not always.(first load will weekup the provider)
+ // so add null block to avoid nullpointerexception
+ if (contactCursor != null) {
+ contactCursor.close();
+ }
+ } //END for
+ Log.i(TAG, "isRunningNumberCheck insert: " + sIsRunningNumberCheck);
+ sIsRunningNumberCheck = false;
+ }
+ }
+}
+
diff --git a/src/com/mediatek/contacts/simservice/SIMProcessorManager.java b/src/com/mediatek/contacts/simservice/SIMProcessorManager.java
index 9b15494..fbab034 100644
--- a/src/com/mediatek/contacts/simservice/SIMProcessorManager.java
+++ b/src/com/mediatek/contacts/simservice/SIMProcessorManager.java
@@ -44,7 +44,7 @@ import com.android.contacts.common.vcard.ProcessorBase;
import com.mediatek.contacts.simservice.SIMServiceUtils.SIMProcessorState;
import com.mediatek.contacts.util.Log;
-
+import com.mediatek.contacts.simcontact.SlotUtils;
import java.util.concurrent.ConcurrentHashMap;
public class SIMProcessorManager implements SIMProcessorState {
@@ -166,6 +166,7 @@ public class SIMProcessorManager implements SIMProcessorState {
Log.d(TAG, "[createProcessor] create new processor for subId: " + subId + ", workType: "
+ workType);
SIMProcessorBase processor = null;
+ int slotId = SlotUtils.getNonSlotId();
if (workType == SIMServiceUtils.SERVICE_WORK_IMPORT) {
processor = new SIMImportProcessor(context, subId, intent, listener);
@@ -175,6 +176,8 @@ public class SIMProcessorManager implements SIMProcessorState {
processor = new SIMEditProcessor(context, subId, intent, listener);
} else if (workType == SIMServiceUtils.SERVICE_WORK_DELETE) {
processor = new SIMDeleteProcessor(context, subId, intent, listener);
+ } else if(workType == SIMServiceUtils.SERVICE_WORK_IMPORT_PRESET_CONTACTS){
+ processor = new PresetContactsImportProcessor(context, slotId, intent, listener);
}
return processor;
(packages/apps/ContactsCommon/)
diff --git a/src/com/android/contacts/common/list/ContactEntryListAdapter.java b/src/com/android/contacts/common/list/ContactEntryListAdapter.java
index a9afb32..b690dbc 100644
--- a/src/com/android/contacts/common/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/common/list/ContactEntryListAdapter.java
@@ -83,6 +83,8 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter {
*/
private boolean mProfileExists;
+ public boolean showReadOnlyContact = true;
+
/**
* The root view of the fragment that this adapter is associated with.
*/
@@ -847,4 +849,8 @@ public abstract class ContactEntryListAdapter extends IndexerListAdapter {
public TreeSet<Long> getSelectedContactIds() {
return mSelectedContactIds;
}
+
+ public void setShowReadOnlyContact(boolean canDelete) {
+ showReadOnlyContact = canDelete;
+ }
}
diff --git a/src/com/android/contacts/common/list/ContactEntryListFragment.java b/src/com/android/contacts/common/list/ContactEntryListFragment.java
index 7cc4aaa..d15fbd8 100644
--- a/src/com/android/contacts/common/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/common/list/ContactEntryListFragment.java
@@ -358,6 +358,7 @@ public abstract class ContactEntryListFragment<T extends ContactEntryListAdapter
mAdapter.setShowSdnNumber(isShowSdnNumber());
Log.d(TAG, "[onCreateLoader] loader: " + loader + ",id:" + id);
+ mAdapter.setShowReadOnlyContact(isInstanceOfContactsMultiDeletionFragment() ? false : true);
mAdapter.configureLoader(loader, directoryId);
return loader;
}
@@ -972,4 +973,8 @@ public abstract class ContactEntryListFragment<T extends ContactEntryListAdapter
public boolean isShowSdnNumber() {
return true;
}
+
+ protected boolean isInstanceOfContactsMultiDeletionFragment(){
+ return false ;
+ }
}
diff --git a/src/com/android/contacts/common/model/Contact.java b/src/com/android/contacts/common/model/Contact.java
index 9d8f3f3..e39b361 100644
--- a/src/com/android/contacts/common/model/Contact.java
+++ b/src/com/android/contacts/common/model/Contact.java
@@ -628,5 +628,9 @@ public class Contact {
return mId;
}
+ public boolean isReadOnlyContact() {
+ return mIsSdnContact == -2;
+ }
+
/** M: The previous lines are provided and maintained by Mediatek Inc. @} */
}
diff --git a/src/com/mediatek/contacts/simservice/SIMServiceUtils.java b/src/com/mediatek/contacts/simservice/SIMServiceUtils.java
index 1f46812..f319503 100644
--- a/src/com/mediatek/contacts/simservice/SIMServiceUtils.java
+++ b/src/com/mediatek/contacts/simservice/SIMServiceUtils.java
@@ -69,6 +69,7 @@ public class SIMServiceUtils {
public static final int SERVICE_WORK_REMOVE = 2;
public static final int SERVICE_WORK_EDIT = 3;
public static final int SERVICE_WORK_DELETE = 4;
+ public static final int SERVICE_WORK_IMPORT_PRESET_CONTACTS = 5;
public static final int SERVICE_WORK_UNKNOWN = -1;
public static final int SERVICE_IDLE = 0;
public static final int SERVICE_FORCE_REMOVE_SUB_ID = -20;
diff --git a/src/com/mediatek/contacts/util/ContactsCommonListUtils.java b/src/com/mediatek/contacts/util/ContactsCommonListUtils.java
index 5213c21..a0ec917 100644
--- a/src/com/mediatek/contacts/util/ContactsCommonListUtils.java
+++ b/src/com/mediatek/contacts/util/ContactsCommonListUtils.java
@@ -161,6 +161,7 @@ public class ContactsCommonListUtils {
selection.append(Contacts.INDICATE_PHONE_SIM + "= ?");
selectionArgs.add("-1");
+ selection.append(" AND " + RawContacts.IS_SDN_CONTACT + " > -2");
loader.setSelection(selection.toString());
loader.setSelectionArgs(selectionArgs.toArray(new String[0]));
這種方式撥号中的快速撥号和聯系人中的收藏界面裡有
(packages/apps/Contacts/)
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6c73cc4..3180671 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -615,6 +615,11 @@ add block mms item
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
+ <receiver android:name=".AddContactsReceiver">
+ <intent-filter>
+ <action android:name="android.intent.action.BOOT_COMPLETED"/>
+ </intent-filter>
+ </receiver>
<service
android:name="com.mediatek.contacts.list.service.MultiChoiceService"
diff --git a/src/com/android/contacts/AddContactsReceiver.java b/src/com/android/contacts/AddContactsReceiver.java
new file mode 100644
index 0000000..524619e
--- /dev/null
+++ b/src/com/android/contacts/AddContactsReceiver.java
@@ -0,0 +1,78 @@
+package com.android.contacts;
+
+import java.util.ArrayList;
+import android.graphics.Bitmap;
+import android.content.BroadcastReceiver;
+import android.content.ContentProviderOperation;
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
+import android.content.OperationApplicationException;
+import android.os.RemoteException;
+import android.provider.ContactsContract;
+import android.provider.Settings;
+import android.provider.ContactsContract.Data;
+import android.provider.ContactsContract.RawContacts;
+import android.provider.ContactsContract.CommonDataKinds.Phone;
+import android.provider.ContactsContract.CommonDataKinds.Photo;
+import android.net.Uri;
+import android.provider.ContactsContract.CommonDataKinds.Email;
+import android.provider.ContactsContract.CommonDataKinds.StructuredName;
+import android.content.ContentUris;
+import android.graphics.BitmapFactory;
+import java.io.ByteArrayOutputStream;
+import com.android.contacts.common.model.account.AccountType;
+import android.provider.ContactsContract.Contacts;
+
+public class AddContactsReceiver extends BroadcastReceiver {
+ private static final String TAG = "AddContactsReceiver";
+
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Settings.System.getInt(context.getContentResolver(), "add_other_contacts", 0) == 0) {
+ if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
+ boolean result = insert("Contact Center", "9242",1,context);
+ Settings.System.putInt(context.getContentResolver(), "add_other_contacts", 1);
+ }
+ }
+ }
+
+ public boolean insert(String given_name, String mobile_number,int Starred,Context context) {
+ try {
+ ContentValues values = new ContentValues();
+ Uri rawContactUri = context.getContentResolver().insert(
+ RawContacts.CONTENT_URI, values);
+ long rawContactId = ContentUris.parseId(rawContactUri);
+ if (given_name != "") {
+ values.clear();
+ values.put(Data.RAW_CONTACT_ID, rawContactId);
+ values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
+ values.put(StructuredName.GIVEN_NAME, given_name);
+ context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI,
+ values);
+ }
+ if (mobile_number != "") {
+ values.clear();
+ values.put(Data.RAW_CONTACT_ID, rawContactId);
+ values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
+ values.put(Phone.NUMBER, mobile_number);
+ values.put(Phone.TYPE, Phone.TYPE_MOBILE);
+ context.getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
+ }
+ values.clear();
+ values.put(ContactsContract.Contacts.STARRED, Starred);
+ context.getContentResolver().update(ContactsContract.Contacts.CONTENT_URI,values,ContactsContract.Contacts._ID + " = ? ", new String[]{rawContactId + ""});
+ }
+ catch (Exception e) {
+ return false;
+ }
+ return true;
+ }
+
+
+}
八:建立郵箱時有個提示,不能使用,請開啟權限。手機應該能建立郵箱賬戶
(frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java)
diff --git a/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
index d3dd7a0..288c583 100644
--- a/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
+++ b/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
@@ -119,6 +119,16 @@ final class DefaultPermissionGrantPolicy {
STORAGE_PERMISSIONS.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
+ private static final Set<String> EMAIL_PERMISSIONS = new ArraySet<>();
+ static {
+ EMAIL_PERMISSIONS.add(Manifest.permission.READ_CALENDAR);
+ EMAIL_PERMISSIONS.add(Manifest.permission.WRITE_CALENDAR);
+ EMAIL_PERMISSIONS.add(Manifest.permission.READ_PHONE_STATE);
+ EMAIL_PERMISSIONS.add(Manifest.permission.READ_EXTERNAL_STORAGE);
+ EMAIL_PERMISSIONS.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
+ EMAIL_PERMISSIONS.add("com.android.email.permission.READ_ATTACHMENT");
+ }
+
private final PackageManagerService mService;
private PackagesProvider mImePackagesProvider;
@@ -338,6 +348,15 @@ final class DefaultPermissionGrantPolicy {
grantRuntimePermissionsLPw(certInstallerPackage, STORAGE_PERMISSIONS, true, userId);
}
+ //exchange
+ PackageParser.Package exchangePackage = getSystemPackageLPr("com.android.exchange");
+ if (exchangePackage != null) {
+ grantRuntimePermissionsLPw(exchangePackage, CONTACTS_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(exchangePackage, EMAIL_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(exchangePackage,STORAGE_PERMISSIONS, userId);
+ grantRuntimePermissionsLPw(exchangePackage,PHONE_PERMISSIONS,userId);
+ }
+
// Dialer
if (dialerAppPackageNames == null) {
Intent dialerIntent = new Intent(Intent.ACTION_DIAL);
九:SPN應該從SIM卡讀取
(frameworks/base/packages/Keyguard/ext/src/com/mediatek/keyguard/ext/DefaultCarrierTextExt.java)
diff --git a/base/packages/Keyguard/ext/src/com/mediatek/keyguard/ext/DefaultCarrierTextExt.java b/base/packages/Keyguard/ext/src/com/mediatek/keyguard/ext/ DefaultCarrierTextExt.java
index d4ba14b..c325f5d 100755
--- a/base/packages/Keyguard/ext/src/com/mediatek/keyguard/ext/DefaultCarrierTextExt.java
+++ b/base/packages/Keyguard/ext/src/com/mediatek/keyguard/ext/DefaultCarrierTextExt.java
@@ -17,7 +17,7 @@ public class DefaultCarrierTextExt implements ICarrierTextExt {
}
if (carrierText != null) {
- return carrierText.toString().toUpperCase();
+ return carrierText.toString();
}
return null;
}
十:能呼叫短号碼,而不是提示ussd code
(frameworks/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java)
diff --git a/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java b/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java
index 621aab7..cafaccb 100644
--- a/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java
+++ b/opt/telephony/src/java/com/android/internal/telephony/gsm/GsmMmiCode.java
@@ -765,12 +765,12 @@ public final class GsmMmiCode extends Handler implements MmiCode {
static private boolean isShortCodeUSSD(String dialString, GSMPhone phone) {
if (dialString != null && dialString.length() <= MAX_LENGTH_SHORT_CODE) {
if (phone.isInCall()) {
- return true;
+ return false;
}
if (dialString.length() != MAX_LENGTH_SHORT_CODE ||
dialString.charAt(0) != '1') {
- return true;
+ return false;
}
}
return false;
十一:語音信箱,+ 50377019995一個虛拟機通路長号
(packages/apps/Dialer/src/com/android/dialer/dialpad/DialpadFragment.java)
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 82be25b..9b72f31 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -1446,7 +1446,42 @@ public class DialpadFragment extends Fragment
return;
}
-
+ String IMSI = android.os.SystemProperties.get("gsm.sim.operator.imsi");
+ if(IMSI != null && !(IMSI.isEmpty())){
+ if (IMSI.startsWith("70604") || IMSI.startsWith("706040")|| IMSI.startsWith("722010")||IMSI.startsWith("72207")||IMSI.startsWith("722070")||IMSI.startsWith("73002")||IMSI.startsWith("73007") || IMSI.startsWith("732123") || IMSI.startsWith("71204") || IMSI.startsWith("74000")){
+ if(number !=null &&number.equals("+503 7701 9995")){
+ List<PhoneAccountHandle> subscriptionAccountHandles =
+ PhoneAccountUtils.getSubscriptionPhoneAccounts(getActivity());
+ boolean hasUserSelectedDefault = subscriptionAccountHandles.contains(
+ getTelecomManager().getDefaultOutgoingPhoneAccount(
+ PhoneAccount.SCHEME_VOICEMAIL));
+ boolean needsAccountDisambiguation = subscriptionAccountHandles.size() > 1
+ && !hasUserSelectedDefault;
+ if (needsAccountDisambiguation || isVoicemailAvailable()) {
+ callVoicemail();
+ return;
+ }
+ }
+ } else if (IMSI.startsWith("21407") || IMSI.startsWith("70403") || IMSI.startsWith("33403")||IMSI.startsWith("334030")||IMSI.startsWith("71030")||IMSI.startsWith("710300") || IMSI.startsWith("71402")|| IMSI.startsWith("714020") || IMSI.startsWith("71606") || IMSI.startsWith("74807") || IMSI.startsWith("73404")) {
+ if(number !=null &&number.equals("+503 7701 9995")){
+ List<PhoneAccountHandle> subscriptionAccountHandles =
+ PhoneAccountUtils.getSubscriptionPhoneAccounts(getActivity());
+ boolean hasUserSelectedDefault = subscriptionAccountHandles.contains(
+ getTelecomManager().getDefaultOutgoingPhoneAccount(
+ PhoneAccount.SCHEME_VOICEMAIL));
+ boolean needsAccountDisambiguation = subscriptionAccountHandles.size() > 1
+ && !hasUserSelectedDefault;
+ if (needsAccountDisambiguation || isVoicemailAvailable()) {
+ callVoicemail();
+ return;
+ }
+ }
+ }
+ }
// "persist.radio.otaspdial" is a temporary hack needed for one carrier's automated
// test equipment.
// TODO: clean it up.
十二:指定語言的電子郵箱簽名
(packages/apps/Email/)
diff --git a/UnifiedEmail/src/com/android/mail/compose/ComposeActivity.java b/UnifiedEmail/src/com/android/mail/compose/ComposeActivity.java
index d6acdaf..a2cda2d 100755
--- a/UnifiedEmail/src/com/android/mail/compose/ComposeActivity.java
+++ b/UnifiedEmail/src/com/android/mail/compose/ComposeActivity.java
@@ -78,6 +78,8 @@ import android.widget.ScrollView;
import android.widget.MultiAutoCompleteTextView;
import android.widget.TextView;
import android.widget.Toast;
+import android.preference.EditTextPreference;
+import java.util.Locale;
import com.android.common.Rfc822Validator;
import com.android.common.contacts.DataUsageStatUpdater;
@@ -1116,6 +1118,16 @@ public class ComposeActivity extends ActionBarActivity
DataCollectUtils.clearRecordedList();
}
/** @} */
+ if(mSignature.equals("Send from my Andy 5E3 of Movistar") || mSignature.equals("Enviado desde mi Andy 5E3 de Movistar")
+ || mSignature.equals("Sent from my Andy 5E3")){
+ if(mBodyView.getText().toString().contains("Send from my Andy 5E3 of Movistar") || mBodyView.getText().toString().contains("Enviado desde mi Andy 5E3 de Movistar") || mBodyView.getText().toString().contains("Sent from my Andy 5E3")){
+ if(Locale.getDefault().getLanguage().equals("es")) {
+ mBodyView.setText(mBodyView.getText().toString());
+ } else {
+ mBodyView.setText(mBodyView.getText().toString());
+ }
+ }
+ }
}
@Override
@@ -1890,6 +1902,21 @@ public class ComposeActivity extends ActionBarActivity
message.bodyHtml.length());
}
}
+ if(mSignature.equals("Enviado desde mi Andy 5E3 de Movistar") || mSignature.equals("Send from my Andy 5E3 of Movistar")
+ || mSignature.equals("Sent from my Andy 5E3")){
+ if(body.equals("Enviado desde mi Andy 5E3 de Movistar") || body.equals("Send from my Andy 5E3 of Movistar")
+ || body.equals("Sent from my Andy 5E3")){
+ if(Locale.getDefault().getLanguage().equals("en")){
+ mBodyView.setText("Send from my Andy 5E3 of Movistar");
+ } else if(Locale.getDefault().getLanguage().equals("es")){
+ mBodyView.setText("Enviado desde mi Andy 5E3 de Movistar");
+ } else {
+ mBodyView.setText("Sent from my Andy 5E3");
+ }
+ }
+ } else{
+ mBodyView.setText(body);
+ }
new HtmlToSpannedTask().execute(body);
} else {
final String body = message.bodyText;
@@ -4229,6 +4256,18 @@ public class ComposeActivity extends ActionBarActivity
mSignature = newSignature;
if (!TextUtils.isEmpty(mSignature)) {
// Appending a signature does not count as changing text.
+ if(mSignature.equals("Enviado desde mi Andy 5E3 de Movistar") || mSignature.equals("Send from my Andy 5E3 of Movistar")
+ || mSignature.equals("Sent from my Andy 5E3")){
+ if(Locale.getDefault().getLanguage().equals("es")){
+ mSignature = "Enviado desde mi Andy 5E3 de Movistar";
+ }else if(Locale.getDefault().getLanguage().equals("en")){
+ mSignature = "Send from my Andy 5E3 of Movistar";
+ }else{
+ mSignature = "Sent from my Andy 5E3";
+ }
+ } else {
+ mSignature = newSignature;
+ }
mBodyView.removeTextChangedListener(this);
mBodyView.append(convertToPrintableSignature(mSignature));
mBodyView.addTextChangedListener(this);
diff --git a/emailcommon/src/com/android/emailcommon/provider/Account.java b/emailcommon/src/com/android/emailcommon/provider/Account.java
index e3671b3..7d7ab07 100755
--- a/emailcommon/src/com/android/emailcommon/provider/Account.java
+++ b/emailcommon/src/com/android/emailcommon/provider/Account.java
@@ -44,6 +44,7 @@ import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
+import java.util.Locale;
public final class Account extends EmailContent implements Parcelable {
public static final String TABLE_NAME = "Account";
@@ -144,6 +145,7 @@ public final class Account extends EmailContent implements Parcelable {
public String mProtocolVersion;
public String mSecuritySyncKey;
public String mSignature;
+ public String CUSTOM_SIGNATURE = "Sent from my Andy 5E3";
public long mPolicyKey;
public long mPingDuration;
@@ -211,6 +213,13 @@ public final class Account extends EmailContent implements Parcelable {
mSyncInterval = -1;
mSyncLookback = -1;
mFlags = 0;
+ if(Locale.getDefault().getLanguage().equals("en")){
+ mSignature = "Send from my Andy 5E3 of Movistar";
+ } else if(Locale.getDefault().getLanguage().equals("es")){
+ mSignature = "Enviado desde mi Andy 5E3 de Movistar";
+ } else{
+ mSignature = CUSTOM_SIGNATURE;
+ }
}
public static Account restoreAccountWithId(Context context, long id) {
@@ -285,7 +294,14 @@ public final class Account extends EmailContent implements Parcelable {
mRingtoneUri = cursor.getString(CONTENT_RINGTONE_URI_COLUMN);
mProtocolVersion = cursor.getString(CONTENT_PROTOCOL_VERSION_COLUMN);
mSecuritySyncKey = cursor.getString(CONTENT_SECURITY_SYNC_KEY_COLUMN);
- mSignature = cursor.getString(CONTENT_SIGNATURE_COLUMN);
+ //mSignature = cursor.getString(CONTENT_SIGNATURE_COLUMN);
+ if(Locale.getDefault().getLanguage().equals("en")){
+ CUSTOM_SIGNATURE = "Send from my Andy 5E3 of Movistar";
+ }else if(Locale.getDefault().getLanguage().equals("es")){
+ CUSTOM_SIGNATURE = "Enviado desde mi Andy 5E3 de Movistar";
+ }else{
+ mSignature = CUSTOM_SIGNATURE;
+ }
mPolicyKey = cursor.getLong(CONTENT_POLICY_KEY_COLUMN);
mPingDuration = cursor.getLong(CONTENT_PING_DURATION_COLUMN);
}
@@ -957,6 +973,13 @@ public final class Account extends EmailContent implements Parcelable {
mProtocolVersion = in.readString();
/* mNewMessageCount = */ in.readInt();
mSecuritySyncKey = in.readString();
+ if(Locale.getDefault().getLanguage().equals("en")){
+ CUSTOM_SIGNATURE = "Send from my Andy 5E3 of Movistar";
+ }else if(Locale.getDefault().getLanguage().equals("es")){
+ CUSTOM_SIGNATURE = "Enviado desde mi Andy 5E3 de Movistar";
+ }else{
+ mSignature = CUSTOM_SIGNATURE;
+ }
mSignature = in.readString();
mPolicyKey = in.readLong();
diff --git a/src/com/android/email/activity/setup/AccountFinalizeFragment.java b/src/com/android/email/activity/setup/AccountFinalizeFragment.java
index f2b9cde..bdfecf9 100755
--- a/src/com/android/email/activity/setup/AccountFinalizeFragment.java
+++ b/src/com/android/email/activity/setup/AccountFinalizeFragment.java
@@ -127,13 +127,6 @@ public class AccountFinalizeFragment extends Fragment {
public Boolean loadInBackground() {
// Update the account in the database
final ContentValues cv = new ContentValues();
- if (!FeatureOption.VANZO_FEATURE_EMAIL_DEFAULT_SIGNATURE.equals("")) {
- cv.put(EmailContent.AccountColumns.SIGNATURE, FeatureOption.VANZO_FEATURE_EMAIL_DEFAULT_SIGNATURE);
- }
cv.put(EmailContent.AccountColumns.DISPLAY_NAME, mAccount.getDisplayName());
cv.put(EmailContent.AccountColumns.SENDER_NAME, mAccount.getSenderName());
mAccount.update(getContext(), cv);
十三: 菜單>設定>顯示> wallpappers,删除附件圖中标示的選項“SherlockNews”
(packages/apps/Launcher3/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java)
diff --git a/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java b/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java
index f46da53..bca9b0a 100755
--- a/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java
+++ b/WallpaperPicker/src/com/android/launcher3/ThirdPartyWallpaperPickerListAdapter.java
@@ -35,6 +35,7 @@ import com.android.launcher3.util.Thunk;
import java.util.ArrayList;
import java.util.List;
public class ThirdPartyWallpaperPickerListAdapter extends BaseAdapter implements ListAdapter {
private final LayoutInflater mInflater;
@@ -78,6 +79,7 @@ public class ThirdPartyWallpaperPickerListAdapter extends BaseAdapter implements
final ComponentName[] imageActivities = new ComponentName[imagePickerActivities.size()];
for (int i = 0; i < imagePickerActivities.size(); i++) {
ActivityInfo activityInfo = imagePickerActivities.get(i).activityInfo;
imageActivities[i] = new ComponentName(activityInfo.packageName, activityInfo.name);
}
@@ -88,6 +90,8 @@ public class ThirdPartyWallpaperPickerListAdapter extends BaseAdapter implements
final String itemPackageName = itemComponentName.getPackageName();
// Exclude anything from our own package, and the old Launcher,
// and live wallpaper picker
+ if("com.sherlock.news".equals(itemPackageName))continue;
if (itemPackageName.equals(context.getPackageName()) ||
itemPackageName.equals("com.android.launcher") ||
itemPackageName.equals("com.android.wallpaper.livepicker")) {
(packages/apps/Settings/src/com/android/settings/WallpaperTypeSettings.java)
diff --git a/src/com/android/settings/WallpaperTypeSettings.java b/src/com/android/settings/WallpaperTypeSettings.java
index 9046bfb..af3d8c8 100644
--- a/src/com/android/settings/WallpaperTypeSettings.java
+++ b/src/com/android/settings/WallpaperTypeSettings.java
@@ -31,6 +31,7 @@ import com.android.settings.search.SearchIndexableRaw;
import java.util.ArrayList;
import java.util.List;
public class WallpaperTypeSettings extends SettingsPreferenceFragment implements Indexable {
@@ -67,9 +68,11 @@ public class WallpaperTypeSettings extends SettingsPreferenceFragment implements
Intent prefIntent = new Intent(intent);
prefIntent.setComponent(new ComponentName(
info.activityInfo.packageName, info.activityInfo.name));
pref.setIntent(prefIntent);
CharSequence label = info.loadLabel(pm);
if (label == null) label = info.activityInfo.packageName;
+ if("com.sherlock.news".equals(info.activityInfo.packageName))continue;
pref.setTitle(label);
parent.addPreference(pref);
}
十四: 語言切換時,系統顯示語言變化太慢
(packages/apps/Launcher3/)
diff --git a/src/com/android/launcher3/IconCache.java b/src/com/android/launcher3/IconCache.java
index aca2402..6974ee9 100755
--- a/src/com/android/launcher3/IconCache.java
+++ b/src/com/android/launcher3/IconCache.java
@@ -588,6 +588,9 @@ public class IconCache {
entry.contentDescription = mUserManager.getBadgedLabelForUser(entry.title, user);
}
}
+ if (info != null) {
+ entry.title = info.getLabel();
+ }
return entry;
}
diff --git a/src/com/android/launcher3/LauncherModel.java b/src/com/android/launcher3/LauncherModel.java
index c90677d..62d6531 100755
--- a/src/com/android/launcher3/LauncherModel.java
+++ b/src/com/android/launcher3/LauncherModel.java
@@ -3754,9 +3754,13 @@ public class LauncherModel extends BroadcastReceiver
info.setIcon(icon == null ? mIconCache.getDefaultIcon(user) : icon);
}
- // from the db
- if (TextUtils.isEmpty(info.title) && c != null) {
- info.title = Utilities.trim(c.getString(titleIndex));
+ from the db
+ //if (TextUtils.isEmpty(info.title) && c != null) {
+ // info.title = Utilities.trim(c.getString(titleIndex));
+ //}
+ // from PMS.
+ if (lai != null) {
+ info.title = lai.getLabel();
}
// fall back to the class name of the activity
十五:
主菜單>消息>設定>一般>小區廣播設定,
小區廣播接收
小區廣播警報
信道:所有的觀測值:50,919,921和4370歐洲标準CMAS
(packages/providers/TelephonyProvider/src/com/android/providers/telephony/CbProvider.java)
diff --git a/TelephonyProvider/src/com/android/providers/telephony/CbProvider.java b/TelephonyProvider/src/com/android/providers/telephony/CbProvider.java
index 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.xml
index 1e224e1..c70aa39 100755
--- a/mediatek/proprietary/packages/apps/Mms/AndroidManifest.xml
+++ b/mediatek/proprietary/packages/apps/Mms/AndroidManifest.xml
@@ -534,6 +534,12 @@ add for MClock update sms database
<intent-filter>
<action android:name="android.provider.Telephony.SMS_CB_RECEIVED" />
</intent-filter>
+ <intent-filter>
+ <action android:name="android.intent.action.SIM_STATE_CHANGED" />
+ </intent-filter>
</receiver>
<!-- Catch-all receiver for broadcasts that don't have associated security -->
diff --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.java
index 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());
+ }
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.java
index 35b3133..aea9c3a 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,18 @@ import com.mediatek.mms.ext.IOpCBMessageReceiverServiceExt;
import com.mediatek.opmsg.util.OpMessageUtils;
import android.telephony.SubscriptionManager;
+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;
/**
* M:
@@ -97,6 +109,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;
public Handler mToastHandler = new Handler() {
@Override
@@ -159,6 +184,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 +192,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,"CL-Alerta Local",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,"CL-Alerta Local",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,"CL-Alerta Local",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,"CL-Alerta Local",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,"CL-Alerta Local",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,"CL-Alerta Local",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;
+ }
+
+
+ }
+
+ }
+ if(queryIfChannelInDatabase(subId,"CL-Alerta Local",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,"CL-Alerta Local",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;
+ }
+
+
+ }
+
+ }
+
+ }
+
+ }
+
+ 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();
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.java
index c17f2b0..d784299 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,9 @@ public class CellBroadcastSettings extends TimeConsumingPreferenceActivity
} else {
channel.setSummary(R.string.disable);
}
+ if (title.equals("CL-Alerta Local(919)") || title.equals("CL-Alerta Local(50)") || title.equals("CL-Alerta Local(921)") || title.equals("CL-Alerta Local(4370)")) {
+ channel.setEnabled(false);
+ }
channel.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference arg0) {
十六: 首選網絡類型,加入3G
(packages/services/Telephony/src/com/android/phone/MobileNetworkSettings.java)
diff --git a/Telephony/src/com/android/phone/MobileNetworkSettings.java b/Telephony/src/com/android/phone/MobileNetworkSettings.java
index d1dbc6f..4a30ffa 100644
--- a/Telephony/src/com/android/phone/MobileNetworkSettings.java
+++ b/Telephony/src/com/android/phone/MobileNetworkSettings.java
@@ -962,6 +962,7 @@ public class MobileNetworkSettings extends PreferenceActivity implements
switch (buttonNetworkMode) {
case Phone.NT_MODE_WCDMA_PREF:
case Phone.NT_MODE_GSM_ONLY:
+ case Phone.NT_MODE_WCDMA_ONLY:
case Phone.NT_MODE_LTE_GSM_WCDMA:
case Phone.NT_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
case Phone.NT_MODE_CDMA:
@@ -1193,6 +1194,9 @@ public class MobileNetworkSettings extends PreferenceActivity implements
// @}
switch (NetworkMode) {
case Phone.NT_MODE_WCDMA_ONLY:
+ mButtonEnabledNetworks.setValue(Integer.toString(Phone.NT_MODE_WCDMA_ONLY));
+ mButtonEnabledNetworks.setSummary(R.string.network_3G_only);
+ break;
case Phone.NT_MODE_GSM_UMTS:
case Phone.NT_MODE_WCDMA_PREF:
if (!mIsGlobalCdma) {
十七: 掉訓示燈功能
(vanzo/packages/FactoryMode/src/com/mediatek/factorymode/FactoryMode.java)
diff --git a/packages/FactoryMode/src/com/mediatek/factorymode/FactoryMode.java b/packages/FactoryMode/src/com/mediatek/factorymode/FactoryMode.java
+index 9440315..d0fad5c 100755
--- a/packages/FactoryMode/src/com/mediatek/factorymode/FactoryMode.java
+++ b/packages/FactoryMode/src/com/mediatek/factorymode/FactoryMode.java
@@ -56,7 +56,7 @@ public class FactoryMode extends Activity implements OnItemClickListener {
private TextView mMotherBoardResult;
- public static boolean mHavePsensor = true;
+ public static boolean mHavePsensor = false;
public static boolean mHaveMsensor = true;
十八:月曆的排版從左往右,從周一開始
(vendor/mediatek/proprietary/packages/apps/Calendar/res/xml/general_preferences.xml)
diff --git a/mediatek/proprietary/packages/apps/Calendar/res/xml/general_preferences.xml b/mediatek/proprietary/packages/apps/Calendar/res/xml/general_preferences.xml
index a0d1577..0b17327 100644
--- a/mediatek/proprietary/packages/apps/Calendar/res/xml/general_preferences.xml
+++ b/mediatek/proprietary/packages/apps/Calendar/res/xml/general_preferences.xml
@@ -26,7 +26,7 @@
android:title="@string/preferences_show_week_num_title" />
<ListPreference
android:key="preferences_week_start_day"
- android:defaultValue="@string/preferences_week_start_day_default"
+ android:defaultValue="2"
android:title="@string/preferences_week_start_day_title"
android:entries="@array/preferences_week_start_day_labels"
android:entryValues="@array/preferences_week_start_day_values"
十九:消息,編碼按照7-bit方式,如果重音或特殊字元,裝置應該允許160個字元/短信。
(vendor/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ComposeMessageActivity.java)
diff --git a/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ComposeMessageActivity.java b/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ComposeMessageActivity.java
index 15dba17..5199a39 100644
--- a/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ComposeMessageActivity.java
+++ b/mediatek/proprietary/packages/apps/Mms/src/com/android/mms/ui/ComposeMessageActivity.java
@@ -1046,11 +1046,9 @@ public class ComposeMessageActivity extends Activity
*/
int[] params = null;
- int encodingType = SmsMessage.ENCODING_UNKNOWN;
+ int encodingType = SmsMessage.ENCODING_7BIT;
- encodingType = mOpComposeExt.getSmsEncodingType(encodingType, ComposeMessageActivity.this);
-
- params = SmsMessage.calculateLength(text, false, encodingType);
+ params = SmsMessage.calculateLength(text, true, encodingType);
/* SmsMessage.calculateLength returns an int[4] with:
* int[0] being the number of SMS's required,
* int[1] the number of code units used,
(frameworks/base/telephony/java/com/android/internal/telephony/GsmAlphabet.java)
diff --git a/base/telephony/java/com/android/internal/telephony/GsmAlphabet.java b/base/telephony/java/com/android/internal/telephony/GsmAlphabet.java
index 794456c..69665c6 100644
--- a/base/telephony/java/com/android/internal/telephony/GsmAlphabet.java
+++ b/base/telephony/java/com/android/internal/telephony/GsmAlphabet.java
@@ -311,7 +311,7 @@ public class GsmAlphabet {
int headerBits = (header.length + 1) * 8;
int headerSeptets = (headerBits + 6) / 7;
- byte[] ret = stringToGsm7BitPacked(data, headerSeptets, true, languageTable,
+ byte[] ret = stringToGsm7BitPacked(data, headerSeptets, false, languageTable,
languageShiftTable);
// Paste in the header
@@ -1509,5 +1509,29 @@ public class GsmAlphabet {
}
}
}
+/********MTK add*************/
+//Add the customer character conversion table
+ SparseIntArray defaultCharToGsm = sCharsToGsmTables[0];
+ defaultCharToGsm.put('\u00c0', 0x41);// À > A
+ defaultCharToGsm.put('\u00c1', 0x41);// Á > A
+ defaultCharToGsm.put('\u00e0', 0x61);// à > a
+ defaultCharToGsm.put('\u00e1', 0x61);// á > a
+ defaultCharToGsm.put('\u00c8', 0x45);// È > E
+ defaultCharToGsm.put('\u00e8', 0x45);// è > e
+ defaultCharToGsm.put('\u00cc', 0x49);// Ì > I
+ defaultCharToGsm.put('\u00cd', 0x49);// Í > I
+ defaultCharToGsm.put('\u00cf', 0x49);// Ï > I
+ defaultCharToGsm.put('\u00ec', 0x69);// ì > i
+ defaultCharToGsm.put('\u00ed', 0x69);// í > i
+ defaultCharToGsm.put('\u00ef', 0x69);// ï > i
+ defaultCharToGsm.put('\u00d2', 0x4f);// Ò > O
+ defaultCharToGsm.put('\u00d3', 0x4f);// Ó > O
+ defaultCharToGsm.put('\u00f2', 0x6f);// ò > o
+ defaultCharToGsm.put('\u00f3', 0x6f);// ò > o
+ defaultCharToGsm.put('\u00d9', 0x55);// Ù > U
+ defaultCharToGsm.put('\u00da', 0x55);// Ú > U
+ defaultCharToGsm.put('\u00f9', 0x75);// ù > u
+ defaultCharToGsm.put('\u00fa', 0x75);// ú > u
+ defaultCharToGsm.put('\u00e7', 0x09);// ç > Ç
}
}