diff options
17 files changed, 99 insertions, 43 deletions
diff --git a/api/current.txt b/api/current.txt index 11804400dd35..bdc695ff8771 100644 --- a/api/current.txt +++ b/api/current.txt @@ -84,7 +84,6 @@ package android { field public static final java.lang.String READ_SMS = "android.permission.READ_SMS"; field public static final java.lang.String READ_SYNC_SETTINGS = "android.permission.READ_SYNC_SETTINGS"; field public static final java.lang.String READ_SYNC_STATS = "android.permission.READ_SYNC_STATS"; - field public static final java.lang.String READ_WRITE_OWN_VOICEMAIL = "com.android.voicemail.permission.READ_WRITE_OWN_VOICEMAIL"; field public static final java.lang.String REBOOT = "android.permission.REBOOT"; field public static final java.lang.String RECEIVE_BOOT_COMPLETED = "android.permission.RECEIVE_BOOT_COMPLETED"; field public static final java.lang.String RECEIVE_MMS = "android.permission.RECEIVE_MMS"; diff --git a/core/java/android/provider/VoicemailContract.java b/core/java/android/provider/VoicemailContract.java index 521762479181..814f50ba5646 100644 --- a/core/java/android/provider/VoicemailContract.java +++ b/core/java/android/provider/VoicemailContract.java @@ -41,7 +41,7 @@ import android.provider.CallLog.Calls; * </ul> * * <P> The minimum permission needed to access this content provider is - * {@link Manifest.permission#READ_WRITE_OWN_VOICEMAIL} + * {@link Manifest.permission#ADD_VOICEMAIL} * * <P>Voicemails are inserted by what is called as a "voicemail source" * application, which is responsible for syncing voicemail data between a remote diff --git a/core/java/android/text/TextDirectionHeuristics.java b/core/java/android/text/TextDirectionHeuristics.java index 5f9ffc5bf2f0..20170bf9615d 100644 --- a/core/java/android/text/TextDirectionHeuristics.java +++ b/core/java/android/text/TextDirectionHeuristics.java @@ -164,6 +164,7 @@ public class TextDirectionHeuristics { case Character.DIRECTIONALITY_RIGHT_TO_LEFT_ARABIC: case Character.DIRECTIONALITY_RIGHT_TO_LEFT_EMBEDDING: case Character.DIRECTIONALITY_RIGHT_TO_LEFT_OVERRIDE: + case Character.DIRECTIONALITY_ARABIC_NUMBER: return TriState.TRUE; default: return TriState.UNKNOWN; diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java index 00ebe0d8976a..7ad5d6c94853 100644 --- a/core/java/android/widget/FastScroller.java +++ b/core/java/android/widget/FastScroller.java @@ -116,6 +116,8 @@ class FastScroller { private int mOverlayPosition; + private boolean mMatchDragPosition; + private static final int FADE_TIMEOUT = 1500; private final Rect mTmpRect = new Rect(); @@ -262,6 +264,9 @@ class FastScroller { ta.recycle(); + mMatchDragPosition = context.getApplicationInfo().targetSdkVersion >= + android.os.Build.VERSION_CODES.HONEYCOMB; + setScrollbarPosition(mList.getVerticalScrollbarPosition()); } @@ -417,7 +422,7 @@ class FastScroller { } return; } - if (totalItemCount - visibleItemCount > 0 && mState != STATE_DRAGGING ) { + if (totalItemCount - visibleItemCount > 0 && mState != STATE_DRAGGING) { mThumbY = getThumbPositionForListPosition(firstVisibleItem, visibleItemCount, totalItemCount); if (mChangedBounds) { @@ -595,7 +600,7 @@ class FastScroller { if (mSectionIndexer == null) { getSectionsFromIndexer(); } - if (mSectionIndexer == null) { + if (mSectionIndexer == null || !mMatchDragPosition) { return ((mList.getHeight() - mThumbH) * firstVisibleItem) / (totalItemCount - visibleItemCount); } diff --git a/core/jni/Android.mk b/core/jni/Android.mk index 6e7388955986..170957cf9783 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -178,6 +178,7 @@ LOCAL_C_INCLUDES += \ external/icu4c/i18n \ external/icu4c/common \ external/jpeg \ + external/harfbuzz/contrib \ external/harfbuzz/src \ external/zlib \ frameworks/opt/emoji \ diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp index 30fe298207a2..a29eb3898a92 100644 --- a/core/jni/android/graphics/TextLayoutCache.cpp +++ b/core/jni/android/graphics/TextLayoutCache.cpp @@ -17,6 +17,10 @@ #include "TextLayoutCache.h" #include "TextLayout.h" +extern "C" { +#include "harfbuzz-unicode.h" +} + namespace android { TextLayoutCache::TextLayoutCache() : @@ -355,7 +359,9 @@ void TextLayoutCacheValue::setupShaperItem(HB_ShaperItem* shaperItem, HB_FontRec shaperItem->item.pos = start; shaperItem->item.length = count; shaperItem->item.bidiLevel = isRTL; - shaperItem->item.script = isRTL ? HB_Script_Arabic : HB_Script_Common; + + ssize_t iter = 0; + shaperItem->item.script = code_point_to_script(utf16_to_code_point(chars, count, &iter)); shaperItem->string = chars; shaperItem->stringLength = contextCount; diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 21c3f1e2d4c3..efddf9aa43fd 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -63,7 +63,7 @@ <protected-broadcast android:name="android.app.action.EXIT_CAR_MODE" /> <protected-broadcast android:name="android.app.action.ENTER_DESK_MODE" /> <protected-broadcast android:name="android.app.action.EXIT_DESK_MODE" /> - + <protected-broadcast android:name="android.backup.intent.RUN" /> <protected-broadcast android:name="android.backup.intent.CLEAR" /> <protected-broadcast android:name="android.backup.intent.INIT" /> @@ -292,16 +292,6 @@ android:description="@string/permdesc_setAlarm" android:protectionLevel="normal" /> - <!-- Allows an application to read/write the voicemails owned by its own - package. --> - <!-- TODO: delete this permission when dependent content provider & - application code has been migrated to use ADD_VOICEMAIL instead --> - <permission android:name="com.android.voicemail.permission.READ_WRITE_OWN_VOICEMAIL" - android:permissionGroup="android.permission-group.PERSONAL_INFO" - android:protectionLevel="dangerous" - android:label="@string/permlab_readWriteOwnVoicemail" - android:description="@string/permdesc_readWriteOwnVoicemail" /> - <!-- Allows an application to add voicemails into the system. --> <permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL" android:permissionGroup="android.permission-group.PERSONAL_INFO" diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index a6c92f2e26b8..ce5837b058bb 100755 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -2159,14 +2159,6 @@ <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=NONE] --> - <string name="permlab_readWriteOwnVoicemail">Access voicemails managed by this application</string> - <!-- Description of an application permission, listed so the user can choose whether - they want to allow the application to do this. [CHAR LIMIT=NONE] --> - <string name="permdesc_readWriteOwnVoicemail">Allows the application to store and retrieve only - voicemails that its associated service can access.</string> - - <!-- Title of an application permission, listed so the user can choose whether - they want to allow the application to do this. [CHAR LIMIT=NONE] --> <string name="permlab_addVoicemail">add voicemail</string> <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=NONE] --> diff --git a/docs/html/guide/developing/tools/draw9patch.jd b/docs/html/guide/developing/tools/draw9patch.jd index 1d9de4f1f4ca..7cf0e4b1d861 100644 --- a/docs/html/guide/developing/tools/draw9patch.jd +++ b/docs/html/guide/developing/tools/draw9patch.jd @@ -41,7 +41,7 @@ You'll need the PNG image with which you'd like to create a NinePatch.</p> A previously saved 9-patch file (<code>*.9.png</code>) will be loaded as-is, with no drawing area added, because it already exists.</p> -<img src="{@docRoot}images/draw9patch-bad.png" style="float:right" alt="" height="300" width="341" +<img src="{@docRoot}images/draw9patch-bad.png" style="float:right;clear:both" alt="" height="300" width="341" /> <p>Optional controls include:</p> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java index f32c6021386f..97b629870c1f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -61,6 +61,7 @@ public class NetworkController extends BroadcastReceiver { // debug static final String TAG = "StatusBar.NetworkController"; static final boolean DEBUG = false; + static final boolean CHATTY = true; // additional diagnostics, but not logspew // telephony boolean mHspaDataDistinguishable; @@ -286,7 +287,7 @@ public class NetworkController extends BroadcastReceiver { @Override public void onDataConnectionStateChanged(int state, int networkType) { - if (DEBUG) { + if (DEBUG || CHATTY) { Slog.d(TAG, "onDataConnectionStateChanged: state=" + state + " type=" + networkType); } @@ -682,10 +683,19 @@ public class NetworkController extends BroadcastReceiver { // ===== Full or limited Internet connectivity ================================== private void updateConnectivity(Intent intent) { + if (CHATTY) { + Slog.d(TAG, "updateConnectivity: intent=" + intent); + } + NetworkInfo info = (NetworkInfo)(intent.getParcelableExtra( ConnectivityManager.EXTRA_NETWORK_INFO)); int connectionStatus = intent.getIntExtra(ConnectivityManager.EXTRA_INET_CONDITION, 0); + if (CHATTY) { + Slog.d(TAG, "updateConnectivity: networkInfo=" + info); + Slog.d(TAG, "updateConnectivity: connectionStatus=" + connectionStatus); + } + int inetCondition = (connectionStatus > INET_CONDITION_THRESHOLD ? 1 : 0); switch (info.getType()) { diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index bdc37ef4a570..a2dbb788623a 100755 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -3018,7 +3018,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } - Runnable mScreenSaverActivator = new Runnable() { + Runnable mScreenSaverActivator = null; + /*new Runnable() { public void run() { synchronized (this) { if (!(mScreenSaverEnabled && mScreenOn)) { @@ -3049,9 +3050,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } }; + */ // Must call while holding mLock private void updateScreenSaverTimeoutLocked() { + if (mScreenSaverActivator == null) return; + synchronized (mScreenSaverActivator) { mHandler.removeCallbacks(mScreenSaverActivator); if (mScreenSaverEnabled && mScreenOn && mScreenSaverTimeout > 0) { diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index f15eca67d70d..4a0dcdfd3b68 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -27,6 +27,7 @@ import android.content.Intent; import android.content.pm.IPackageManager; import android.content.res.Configuration; import android.media.AudioService; +import android.net.wifi.p2p.WifiP2pService; import android.os.Looper; import android.os.RemoteException; import android.os.ServiceManager; @@ -37,7 +38,6 @@ import android.provider.Settings; import android.server.BluetoothA2dpService; import android.server.BluetoothService; import android.server.search.SearchManagerService; -import android.server.WifiP2pService; import android.util.DisplayMetrics; import android.util.EventLog; import android.util.Slog; diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java index b79e31fad9c0..0ce5499a1e0b 100755 --- a/services/java/com/android/server/location/GpsLocationProvider.java +++ b/services/java/com/android/server/location/GpsLocationProvider.java @@ -22,6 +22,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.database.Cursor; import android.location.Criteria; import android.location.IGpsStatusListener; import android.location.IGpsStatusProvider; @@ -32,6 +33,7 @@ import android.location.LocationManager; import android.location.LocationProvider; import android.net.ConnectivityManager; import android.net.NetworkInfo; +import android.net.Uri; import android.os.Binder; import android.os.Bundle; import android.os.Handler; @@ -45,6 +47,7 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.WorkSource; import android.provider.Settings; +import android.provider.Telephony.Carriers; import android.provider.Telephony.Sms.Intents; import android.telephony.SmsMessage; import android.telephony.TelephonyManager; @@ -489,8 +492,17 @@ public class GpsLocationProvider implements LocationProviderInterface { } if (info != null) { + boolean dataEnabled = Settings.Secure.getInt(mContext.getContentResolver(), + Settings.Secure.MOBILE_DATA, 1) == 1; + boolean networkAvailable = info.isAvailable() && dataEnabled; + String defaultApn = getSelectedApn(); + if (defaultApn == null) { + defaultApn = "dummy-apn"; + } + native_update_network_state(info.isConnected(), info.getType(), - info.isRoaming(), info.getExtraInfo()); + info.isRoaming(), networkAvailable, + info.getExtraInfo(), defaultApn); } if (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE_SUPL @@ -1597,6 +1609,25 @@ public class GpsLocationProvider implements LocationProviderInterface { } } + private String getSelectedApn() { + Uri uri = Uri.parse("content://telephony/carriers/preferapn"); + String apn = null; + + Cursor cursor = mContext.getContentResolver().query(uri, new String[] {"apn"}, + null, null, Carriers.DEFAULT_SORT_ORDER); + + if (null != cursor) { + try { + if (cursor.moveToFirst()) { + apn = cursor.getString(0); + } + } finally { + cursor.close(); + } + } + return apn; + } + // for GPS SV statistics private static final int MAX_SVS = 32; private static final int EPHEMERIS_MASK = 0; @@ -1655,5 +1686,5 @@ public class GpsLocationProvider implements LocationProviderInterface { private native void native_agps_set_id(int type, String setid); private native void native_update_network_state(boolean connected, int type, - boolean roaming, String extraInfo); + boolean roaming, boolean available, String extraInfo, String defaultAPN); } diff --git a/services/jni/com_android_server_location_GpsLocationProvider.cpp b/services/jni/com_android_server_location_GpsLocationProvider.cpp index c29be3a1591c..c823da56708c 100755 --- a/services/jni/com_android_server_location_GpsLocationProvider.cpp +++ b/services/jni/com_android_server_location_GpsLocationProvider.cpp @@ -543,7 +543,7 @@ static jstring android_location_GpsLocationProvider_get_internal_state(JNIEnv* e } static void android_location_GpsLocationProvider_update_network_state(JNIEnv* env, jobject obj, - jboolean connected, int type, jboolean roaming, jstring extraInfo) + jboolean connected, int type, jboolean roaming, jboolean available, jstring extraInfo, jstring apn) { if (sAGpsRilInterface && sAGpsRilInterface->update_network_state) { @@ -554,6 +554,14 @@ static void android_location_GpsLocationProvider_update_network_state(JNIEnv* en } else { sAGpsRilInterface->update_network_state(connected, type, roaming, NULL); } + + // update_network_availability callback was not included in original AGpsRilInterface + if (sAGpsRilInterface->size >= sizeof(AGpsRilInterface) + && sAGpsRilInterface->update_network_availability) { + const char *c_apn = env->GetStringUTFChars(apn, NULL); + sAGpsRilInterface->update_network_availability(available, c_apn); + env->ReleaseStringUTFChars(apn, c_apn); + } } } @@ -582,7 +590,7 @@ static JNINativeMethod sMethods[] = { {"native_send_ni_response", "(II)V", (void*)android_location_GpsLocationProvider_send_ni_response}, {"native_agps_ni_message", "([BI)V", (void *)android_location_GpsLocationProvider_agps_send_ni_message}, {"native_get_internal_state", "()Ljava/lang/String;", (void*)android_location_GpsLocationProvider_get_internal_state}, - {"native_update_network_state", "(ZIZLjava/lang/String;)V", (void*)android_location_GpsLocationProvider_update_network_state }, + {"native_update_network_state", "(ZIZZLjava/lang/String;Ljava/lang/String;)V", (void*)android_location_GpsLocationProvider_update_network_state }, }; int register_android_server_location_GpsLocationProvider(JNIEnv* env) diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java b/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java index 625b40d7f279..0928ec572540 100644 --- a/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java +++ b/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java @@ -417,6 +417,22 @@ public final class BridgeResources extends Resources { } @Override + public boolean getBoolean(int id) throws NotFoundException { + Pair<String, ResourceValue> value = getResourceValue(id, mPlatformResourceFlag); + + if (value != null && value.getSecond().getValue() != null) { + String v = value.getSecond().getValue(); + return Boolean.parseBoolean(v); + } + + // id was not found or not resolved. Throw a NotFoundException. + throwException(id); + + // this is not used since the method above always throws + return false; + } + + @Override public String getResourceEntryName(int resid) throws NotFoundException { throw new UnsupportedOperationException(); } diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index de49eb4f7011..331d5c0ad8db 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -57,6 +57,7 @@ import android.net.NetworkInfo.DetailedState; import android.net.NetworkUtils; import android.net.wifi.WpsResult.Status; import android.net.wifi.p2p.WifiP2pManager; +import android.net.wifi.p2p.WifiP2pService; import android.net.wifi.StateChangeResult; import android.os.Binder; import android.os.IBinder; @@ -69,7 +70,6 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemProperties; import android.os.WorkSource; -import android.server.WifiP2pService; import android.provider.Settings; import android.util.EventLog; import android.util.Log; diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java index 4988f0b8573e..28afd44ed104 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package android.server; +package android.net.wifi.p2p; import android.app.AlertDialog; import android.content.BroadcastReceiver; @@ -31,20 +31,13 @@ import android.net.wifi.WifiNative; import android.net.wifi.WifiStateMachine; import android.net.wifi.WpsConfiguration; import android.net.wifi.WpsConfiguration.Setup; -import android.net.wifi.p2p.IWifiP2pManager; -import android.net.wifi.p2p.WifiP2pConfig; -import android.net.wifi.p2p.WifiP2pDevice; import android.net.wifi.p2p.WifiP2pDevice.Status; -import android.net.wifi.p2p.WifiP2pDeviceList; -import android.net.wifi.p2p.WifiP2pGroup; -import android.net.wifi.p2p.WifiP2pManager; import android.os.Binder; import android.os.IBinder; import android.os.Handler; -import android.os.Messenger; import android.os.HandlerThread; -import android.os.IBinder; import android.os.Message; +import android.os.Messenger; import android.util.Slog; import android.view.LayoutInflater; import android.view.View; @@ -55,9 +48,9 @@ import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.Collection; +import com.android.internal.R; import com.android.internal.util.AsyncChannel; import com.android.internal.util.Protocol; -import com.android.internal.R; import com.android.internal.util.State; import com.android.internal.util.StateMachine; |