summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api/current.txt1
-rw-r--r--core/java/android/provider/VoicemailContract.java2
-rw-r--r--core/java/android/text/TextDirectionHeuristics.java1
-rw-r--r--core/java/android/widget/FastScroller.java9
-rw-r--r--core/jni/Android.mk1
-rw-r--r--core/jni/android/graphics/TextLayoutCache.cpp8
-rw-r--r--core/res/AndroidManifest.xml12
-rwxr-xr-xcore/res/res/values/strings.xml8
-rw-r--r--docs/html/guide/developing/tools/draw9patch.jd2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java12
-rwxr-xr-xpolicy/src/com/android/internal/policy/impl/PhoneWindowManager.java6
-rw-r--r--services/java/com/android/server/SystemServer.java2
-rwxr-xr-xservices/java/com/android/server/location/GpsLocationProvider.java35
-rwxr-xr-xservices/jni/com_android_server_location_GpsLocationProvider.cpp12
-rw-r--r--tools/layoutlib/bridge/src/android/content/res/BridgeResources.java16
-rw-r--r--wifi/java/android/net/wifi/WifiStateMachine.java2
-rw-r--r--wifi/java/android/net/wifi/p2p/WifiP2pService.java13
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;