Merge "Return detailed reason of invalid proxy settings"
diff --git a/Android.mk b/Android.mk
index eb288a6..5c48dfe 100644
--- a/Android.mk
+++ b/Android.mk
@@ -162,6 +162,7 @@
core/java/android/os/ICancellationSignal.aidl \
core/java/android/os/IHardwareService.aidl \
core/java/android/os/IMessenger.aidl \
+ core/java/android/os/INetworkActivityListener.aidl \
core/java/android/os/INetworkManagementService.aidl \
core/java/android/os/IPermissionController.aidl \
core/java/android/os/IPowerManager.aidl \
diff --git a/api/current.txt b/api/current.txt
index 23bbdba..6655734 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -12493,7 +12493,7 @@
ctor public SettingInjectorService(java.lang.String);
method public final android.os.IBinder onBind(android.content.Intent);
method protected abstract boolean onGetEnabled();
- method protected abstract java.lang.String onGetSummary();
+ method protected deprecated java.lang.String onGetSummary();
method public final void onStart(android.content.Intent, int);
method public final int onStartCommand(android.content.Intent, int, int);
field public static final java.lang.String ACTION_INJECTED_SETTING_CHANGED = "android.location.InjectedSettingChanged";
@@ -14614,11 +14614,14 @@
method public android.net.NetworkInfo getNetworkInfo(int);
method public int getNetworkPreference();
method public boolean isActiveNetworkMetered();
+ method public boolean isNetworkActive();
method public static boolean isNetworkTypeValid(int);
+ method public void registerNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener);
method public boolean requestRouteToHost(int, int);
method public void setNetworkPreference(int);
method public int startUsingNetworkFeature(int, java.lang.String);
method public int stopUsingNetworkFeature(int, java.lang.String);
+ method public void unregisterNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener);
field public static final deprecated java.lang.String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED";
field public static final java.lang.String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
field public static final deprecated int DEFAULT_NETWORK_PREFERENCE = 1; // 0x1
@@ -14641,6 +14644,10 @@
field public static final int TYPE_WIMAX = 6; // 0x6
}
+ public static abstract interface ConnectivityManager.OnNetworkActiveListener {
+ method public abstract void onNetworkActive();
+ }
+
public class Credentials {
ctor public Credentials(int, int, int);
method public int getGid();
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index ea0ddc1..f4358e9 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1713,6 +1713,15 @@
return true;
}
+ case START_USER_IN_BACKGROUND_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ int userid = data.readInt();
+ boolean result = startUserInBackground(userid);
+ reply.writeNoException();
+ reply.writeInt(result ? 1 : 0);
+ return true;
+ }
+
case STOP_USER_TRANSACTION: {
data.enforceInterface(IActivityManager.descriptor);
int userid = data.readInt();
@@ -4304,6 +4313,19 @@
return result;
}
+ public boolean startUserInBackground(int userid) throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeInt(userid);
+ mRemote.transact(START_USER_IN_BACKGROUND_TRANSACTION, data, reply, 0);
+ reply.readException();
+ boolean result = reply.readInt() != 0;
+ reply.recycle();
+ data.recycle();
+ return result;
+ }
+
public int stopUser(int userid, IStopUserCallback callback) throws RemoteException {
Parcel data = Parcel.obtain();
Parcel reply = Parcel.obtain();
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index c09da87..6c0d379 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -1405,6 +1405,7 @@
mRestored = false;
mBackStackNesting = 0;
mFragmentManager = null;
+ mChildFragmentManager = null;
mActivity = null;
mFragmentId = 0;
mContainerId = 0;
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index bf2a629..76f9d97 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -1026,6 +1026,7 @@
f.mActivity = null;
f.mParentFragment = null;
f.mFragmentManager = null;
+ f.mChildFragmentManager = null;
}
}
}
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 4412261..1943bba 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -349,6 +349,7 @@
// Multi-user APIs
public boolean switchUser(int userid) throws RemoteException;
+ public boolean startUserInBackground(int userid) throws RemoteException;
public int stopUser(int userid, IStopUserCallback callback) throws RemoteException;
public UserInfo getCurrentUser() throws RemoteException;
public boolean isUserRunning(int userid, boolean orStopping) throws RemoteException;
@@ -715,4 +716,5 @@
// Start of L transactions
int GET_TAG_FOR_INTENT_SENDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+210;
+ int START_USER_IN_BACKGROUND_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+211;
}
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 8694416..f3c803d 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -1540,7 +1540,7 @@
* for a whole class of content.
* @param notifyForDescendents If <code>true</code> changes to URIs beginning with <code>uri</code>
* will also cause notifications to be sent. If <code>false</code> only changes to the exact URI
- * specified by <em>uri</em> will cause notifications to be sent. If true, than any URI values
+ * specified by <em>uri</em> will cause notifications to be sent. If <code>true</code>, any URI values
* at or below the specified URI will also trigger a match.
* @param observer The object that receives callbacks when changes occur.
* @see #unregisterContentObserver
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index e6b9d4c..5b2a29e 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -23,9 +23,14 @@
import android.content.Context;
import android.os.Binder;
import android.os.Build.VERSION_CODES;
+import android.os.IBinder;
+import android.os.INetworkActivityListener;
+import android.os.INetworkManagementService;
import android.os.Messenger;
import android.os.RemoteException;
+import android.os.ServiceManager;
import android.provider.Settings;
+import android.util.ArrayMap;
import java.net.InetAddress;
@@ -76,7 +81,7 @@
/**
* Identical to {@link #CONNECTIVITY_ACTION} broadcast, but sent without any
- * applicable {@link Settings.Secure#CONNECTIVITY_CHANGE_DELAY}.
+ * applicable {@link Settings.Global#CONNECTIVITY_CHANGE_DELAY}.
*
* @hide
*/
@@ -402,6 +407,8 @@
private final String mPackageName;
+ private INetworkManagementService mNMService;
+
/**
* Tests if a given integer represents a valid network type.
* @param networkType the type to be tested
@@ -907,6 +914,92 @@
}
/**
+ * Callback for use with {@link ConnectivityManager#registerNetworkActiveListener} to
+ * find out when the current network has gone in to a high power state.
+ */
+ public interface OnNetworkActiveListener {
+ /**
+ * Called on the main thread of the process to report that the current data network
+ * has become active, and it is now a good time to perform any pending network
+ * operations. Note that this listener only tells you when the network becomes
+ * active; if at any other time you want to know whether it is active (and thus okay
+ * to initiate network traffic), you can retrieve its instantaneous state with
+ * {@link ConnectivityManager#isNetworkActive}.
+ */
+ public void onNetworkActive();
+ }
+
+ private INetworkManagementService getNetworkManagementService() {
+ synchronized (this) {
+ if (mNMService != null) {
+ return mNMService;
+ }
+ IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
+ mNMService = INetworkManagementService.Stub.asInterface(b);
+ return mNMService;
+ }
+ }
+
+ private final ArrayMap<OnNetworkActiveListener, INetworkActivityListener>
+ mNetworkActivityListeners
+ = new ArrayMap<OnNetworkActiveListener, INetworkActivityListener>();
+
+ /**
+ * Start listening to reports when the data network is active, meaning it is
+ * a good time to perform network traffic. Use {@link #isNetworkActive()}
+ * to determine the current state of the network after registering the listener.
+ *
+ * @param l The listener to be told when the network is active.
+ */
+ public void registerNetworkActiveListener(final OnNetworkActiveListener l) {
+ INetworkActivityListener rl = new INetworkActivityListener.Stub() {
+ @Override
+ public void onNetworkActive() throws RemoteException {
+ l.onNetworkActive();
+ }
+ };
+
+ try {
+ getNetworkManagementService().registerNetworkActivityListener(rl);
+ mNetworkActivityListeners.put(l, rl);
+ } catch (RemoteException e) {
+ }
+ }
+
+ /**
+ * Remove network active listener previously registered with
+ * {@link #registerNetworkActiveListener}.
+ *
+ * @param l Previously registered listener.
+ */
+ public void unregisterNetworkActiveListener(OnNetworkActiveListener l) {
+ INetworkActivityListener rl = mNetworkActivityListeners.get(l);
+ if (rl == null) {
+ throw new IllegalArgumentException("Listener not registered: " + l);
+ }
+ try {
+ getNetworkManagementService().unregisterNetworkActivityListener(rl);
+ } catch (RemoteException e) {
+ }
+ }
+
+ /**
+ * Return whether the data network is currently active. An active network means that
+ * it is currently in a high power state for performing data transmission. On some
+ * types of networks, it may be expensive to move and stay in such a state, so it is
+ * more power efficient to batch network traffic together when the radio is already in
+ * this state. This method tells you whether right now is currently a good time to
+ * initiate network traffic, as the network is already active.
+ */
+ public boolean isNetworkActive() {
+ try {
+ return getNetworkManagementService().isNetworkActive();
+ } catch (RemoteException e) {
+ }
+ return false;
+ }
+
+ /**
* {@hide}
*/
public ConnectivityManager(IConnectivityManager service, String packageName) {
@@ -1021,7 +1114,7 @@
/**
* Check if the device allows for tethering. It may be disabled via
- * {@code ro.tether.denied} system property, {@link Settings#TETHER_SUPPORTED} or
+ * {@code ro.tether.denied} system property, Settings.TETHER_SUPPORTED or
* due to device configuration.
*
* @return a boolean - {@code true} indicating Tethering is supported.
@@ -1209,7 +1302,7 @@
* doing something unusual like general internal filtering this may be useful. On
* a private network where the proxy is not accessible, you may break HTTP using this.
*
- * @param proxyProperties The a {@link ProxyProperites} object defining the new global
+ * @param p The a {@link ProxyProperties} object defining the new global
* HTTP proxy. A {@code null} value will clear the global HTTP proxy.
*
* <p>This method requires the call to hold the permission
@@ -1362,7 +1455,7 @@
/**
* Supply the backend messenger for a network tracker
*
- * @param type NetworkType to set
+ * @param networkType NetworkType to set
* @param messenger {@link Messenger}
* {@hide}
*/
diff --git a/core/java/android/net/VpnService.java b/core/java/android/net/VpnService.java
index d7dc7f5..7385dff 100644
--- a/core/java/android/net/VpnService.java
+++ b/core/java/android/net/VpnService.java
@@ -151,9 +151,10 @@
}
/**
- * Protect a socket from VPN connections. The socket will be bound to the
- * current default network interface, so its traffic will not be forwarded
- * through VPN. This method is useful if some connections need to be kept
+ * Protect a socket from VPN connections. After protecting, data sent
+ * through this socket will go directly to the underlying network,
+ * so its traffic will not be forwarded through the VPN.
+ * This method is useful if some connections need to be kept
* outside of VPN. For example, a VPN tunnel should protect itself if its
* destination is covered by VPN routes. Otherwise its outgoing packets
* will be sent back to the VPN interface and cause an infinite loop. This
diff --git a/core/java/android/os/AsyncTask.java b/core/java/android/os/AsyncTask.java
index 26e09b6..4f91d19 100644
--- a/core/java/android/os/AsyncTask.java
+++ b/core/java/android/os/AsyncTask.java
@@ -40,7 +40,7 @@
* and does not constitute a generic threading framework. AsyncTasks should ideally be
* used for short operations (a few seconds at the most.) If you need to keep threads
* running for long periods of time, it is highly recommended you use the various APIs
- * provided by the <code>java.util.concurrent</code> pacakge such as {@link Executor},
+ * provided by the <code>java.util.concurrent</code> package such as {@link Executor},
* {@link ThreadPoolExecutor} and {@link FutureTask}.</p>
*
* <p>An asynchronous task is defined by a computation that runs on a background thread and
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index bfce0c1..a965e00 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -833,6 +833,13 @@
*/
public abstract long getScreenOnTime(long batteryRealtime, int which);
+ /**
+ * Returns the number of times the screen was turned on.
+ *
+ * {@hide}
+ */
+ public abstract int getScreenOnCount(int which);
+
public static final int SCREEN_BRIGHTNESS_DARK = 0;
public static final int SCREEN_BRIGHTNESS_DIM = 1;
public static final int SCREEN_BRIGHTNESS_MEDIUM = 2;
@@ -869,6 +876,13 @@
public abstract long getPhoneOnTime(long batteryRealtime, int which);
/**
+ * Returns the number of times a phone call was activated.
+ *
+ * {@hide}
+ */
+ public abstract int getPhoneOnCount(int which);
+
+ /**
* Returns the time in microseconds that the phone has been running with
* the given signal strength.
*
@@ -918,7 +932,7 @@
public abstract long getMobileRadioActiveUnknownTime(int which);
/**
- * Return count of number of times radio was app that could not be blamed on apps.
+ * Return count of number of times radio was up that could not be blamed on apps.
*
* {@hide}
*/
@@ -1820,7 +1834,7 @@
formatTimeMs(sb, totalRealtime / 1000);
sb.append("realtime, ");
formatTimeMs(sb, totalUptime / 1000);
- sb.append("uptime, ");
+ sb.append("uptime");
pw.println(sb.toString());
pw.print(" Start clock time: ");
pw.println(DateFormat.format("yyyy-MM-dd-HH-mm-ss", getStartClockTime()).toString());
@@ -1834,21 +1848,27 @@
sb.append(prefix);
sb.append(" Screen on: "); formatTimeMs(sb, screenOnTime / 1000);
sb.append("("); sb.append(formatRatioLocked(screenOnTime, whichBatteryRealtime));
- sb.append("), Input events: "); sb.append(getInputEventCount(which));
- sb.append(", Active phone call: "); formatTimeMs(sb, phoneOnTime / 1000);
- sb.append("("); sb.append(formatRatioLocked(phoneOnTime, whichBatteryRealtime));
- sb.append(")");
+ sb.append(") "); sb.append(getScreenOnCount(which));
+ sb.append("x, Input events: "); sb.append(getInputEventCount(which));
pw.println(sb.toString());
+ if (phoneOnTime != 0) {
+ sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" Active phone call: "); formatTimeMs(sb, phoneOnTime / 1000);
+ sb.append("("); sb.append(formatRatioLocked(phoneOnTime, whichBatteryRealtime));
+ sb.append(") "); sb.append(getPhoneOnCount(which));
+ }
sb.setLength(0);
sb.append(prefix);
- sb.append(" Screen brightnesses: ");
+ sb.append(" Screen brightnesses:");
boolean didOne = false;
for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
final long time = getScreenBrightnessTime(i, batteryRealtime, which);
if (time == 0) {
continue;
}
- if (didOne) sb.append(", ");
+ sb.append("\n ");
+ sb.append(prefix);
didOne = true;
sb.append(SCREEN_BRIGHTNESS_NAMES[i]);
sb.append(" ");
@@ -1857,7 +1877,7 @@
sb.append(formatRatioLocked(time, screenOnTime));
sb.append(")");
}
- if (!didOne) sb.append("No activity");
+ if (!didOne) sb.append(" (no activity)");
pw.println(sb.toString());
// Calculate wakelock times across all uids.
@@ -1954,24 +1974,27 @@
long wifiRxTotalPackets = getNetworkActivityPackets(NETWORK_WIFI_RX_DATA, which);
long wifiTxTotalPackets = getNetworkActivityPackets(NETWORK_WIFI_TX_DATA, which);
+ if (fullWakeLockTimeTotalMicros != 0) {
+ sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" Total full wakelock time: "); formatTimeMsNoSpace(sb,
+ (fullWakeLockTimeTotalMicros + 500) / 1000);
+ pw.println(sb.toString());
+ }
+
+ if (partialWakeLockTimeTotalMicros != 0) {
+ sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" Total partial wakelock time: "); formatTimeMsNoSpace(sb,
+ (partialWakeLockTimeTotalMicros + 500) / 1000);
+ pw.println(sb.toString());
+ }
+
pw.print(prefix);
pw.print(" Mobile total received: "); pw.print(formatBytesLocked(mobileRxTotalBytes));
pw.print(", sent: "); pw.print(formatBytesLocked(mobileTxTotalBytes));
pw.print(" (packets received "); pw.print(mobileRxTotalPackets);
pw.print(", sent "); pw.print(mobileTxTotalPackets); pw.println(")");
- pw.print(prefix);
- pw.print(" Wi-Fi total received: "); pw.print(formatBytesLocked(wifiRxTotalBytes));
- pw.print(", sent: "); pw.print(formatBytesLocked(wifiTxTotalBytes));
- pw.print(" (packets received "); pw.print(wifiRxTotalPackets);
- pw.print(", sent "); pw.print(wifiTxTotalPackets); pw.println(")");
- sb.setLength(0);
- sb.append(prefix);
- sb.append(" Total full wakelock time: "); formatTimeMsNoSpace(sb,
- (fullWakeLockTimeTotalMicros + 500) / 1000);
- sb.append(", Total partial wakelock time: "); formatTimeMsNoSpace(sb,
- (partialWakeLockTimeTotalMicros + 500) / 1000);
- pw.println(sb.toString());
-
sb.setLength(0);
sb.append(prefix);
sb.append(" Signal levels:");
@@ -1982,6 +2005,7 @@
continue;
}
sb.append("\n ");
+ sb.append(prefix);
didOne = true;
sb.append(SignalStrength.SIGNAL_STRENGTH_NAMES[i]);
sb.append(" ");
@@ -2011,6 +2035,7 @@
continue;
}
sb.append("\n ");
+ sb.append(prefix);
didOne = true;
sb.append(DATA_CONNECTION_NAMES[i]);
sb.append(" ");
@@ -2047,6 +2072,11 @@
pw.println(sb.toString());
}
+ pw.print(prefix);
+ pw.print(" Wi-Fi total received: "); pw.print(formatBytesLocked(wifiRxTotalBytes));
+ pw.print(", sent: "); pw.print(formatBytesLocked(wifiTxTotalBytes));
+ pw.print(" (packets received "); pw.print(wifiRxTotalPackets);
+ pw.print(", sent "); pw.print(wifiTxTotalPackets); pw.println(")");
sb.setLength(0);
sb.append(prefix);
sb.append(" Wifi on: "); formatTimeMs(sb, wifiOnTime / 1000);
@@ -2207,6 +2237,7 @@
sippers = helper.getMobilemsppList();
if (sippers != null && sippers.size() > 0) {
pw.print(prefix); pw.println(" Per-app mobile ms per packet:");
+ long totalTime = 0;
for (int i=0; i<sippers.size(); i++) {
BatterySipper bs = sippers.get(i);
sb.setLength(0);
@@ -2215,9 +2246,17 @@
sb.append(": "); sb.append(BatteryStatsHelper.makemAh(bs.mobilemspp));
sb.append(" ("); sb.append(bs.mobileRxPackets+bs.mobileTxPackets);
sb.append(" packets over "); formatTimeMsNoSpace(sb, bs.mobileActive);
- sb.append(")");
+ sb.append(") "); sb.append(bs.mobileActiveCount); sb.append("x");
pw.println(sb.toString());
+ totalTime += bs.mobileActive;
}
+ sb.setLength(0);
+ sb.append(prefix);
+ sb.append(" TOTAL TIME: ");
+ formatTimeMs(sb, totalTime);
+ sb.append("("); sb.append(formatRatioLocked(totalTime, whichBatteryRealtime));
+ sb.append(")");
+ pw.println(sb.toString());
pw.println();
}
diff --git a/core/java/android/os/INetworkActivityListener.aidl b/core/java/android/os/INetworkActivityListener.aidl
new file mode 100644
index 0000000..24e6e55
--- /dev/null
+++ b/core/java/android/os/INetworkActivityListener.aidl
@@ -0,0 +1,24 @@
+/* Copyright 2013, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+package android.os;
+
+/**
+ * @hide
+ */
+oneway interface INetworkActivityListener
+{
+ void onNetworkActive();
+}
diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl
index 21b8ae5..e6a4c5a 100644
--- a/core/java/android/os/INetworkManagementService.aidl
+++ b/core/java/android/os/INetworkManagementService.aidl
@@ -23,6 +23,7 @@
import android.net.NetworkStats;
import android.net.RouteInfo;
import android.net.wifi.WifiConfiguration;
+import android.os.INetworkActivityListener;
/**
* @hide
@@ -306,14 +307,12 @@
* reference-counting if an idletimer already exists for given
* {@code iface}.
*
- * {@code label} usually represents the network type of {@code iface}.
- * Caller should ensure that {@code label} for an {@code iface} remains the
- * same for all calls to addIdleTimer.
+ * {@code type} is the type of the interface, such as TYPE_MOBILE.
*
* Every {@code addIdleTimer} should be paired with a
* {@link removeIdleTimer} to cleanup when the network disconnects.
*/
- void addIdleTimer(String iface, int timeout, String label);
+ void addIdleTimer(String iface, int timeout, int type);
/**
* Removes idletimer for an interface.
@@ -441,4 +440,19 @@
* Determine whether the clatd (464xlat) service has been started
*/
boolean isClatdStarted();
+
+ /**
+ * Start listening for mobile activity state changes.
+ */
+ void registerNetworkActivityListener(INetworkActivityListener listener);
+
+ /**
+ * Stop listening for mobile activity state changes.
+ */
+ void unregisterNetworkActivityListener(INetworkActivityListener listener);
+
+ /**
+ * Check whether the mobile radio is currently active.
+ */
+ boolean isNetworkActive();
}
diff --git a/core/java/android/os/Looper.java b/core/java/android/os/Looper.java
index ff31130..6d7c9cf 100644
--- a/core/java/android/os/Looper.java
+++ b/core/java/android/os/Looper.java
@@ -149,7 +149,7 @@
+ msg.callback + " what=" + msg.what);
}
- msg.recycle();
+ msg.recycleUnchecked();
}
}
diff --git a/core/java/android/os/Message.java b/core/java/android/os/Message.java
index 51203a48..d30bbc1 100644
--- a/core/java/android/os/Message.java
+++ b/core/java/android/os/Message.java
@@ -71,7 +71,14 @@
*/
public Messenger replyTo;
- /** If set message is in use */
+ /** If set message is in use.
+ * This flag is set when the message is enqueued and remains set while it
+ * is delivered and afterwards when it is recycled. The flag is only cleared
+ * when a new message is created or obtained since that is the only time that
+ * applications are allowed to modify the contents of the message.
+ *
+ * It is an error to attempt to enqueue or recycle a message that is already in use.
+ */
/*package*/ static final int FLAG_IN_USE = 1 << 0;
/** If set message is asynchronous */
@@ -86,9 +93,9 @@
/*package*/ Bundle data;
- /*package*/ Handler target;
+ /*package*/ Handler target;
- /*package*/ Runnable callback;
+ /*package*/ Runnable callback;
// sometimes we store linked lists of these things
/*package*/ Message next;
@@ -109,6 +116,7 @@
Message m = sPool;
sPool = m.next;
m.next = null;
+ m.flags = 0; // clear in-use flag
sPoolSize--;
return m;
}
@@ -241,12 +249,38 @@
}
/**
- * Return a Message instance to the global pool. You MUST NOT touch
- * the Message after calling this function -- it has effectively been
- * freed.
+ * Return a Message instance to the global pool.
+ * <p>
+ * You MUST NOT touch the Message after calling this function because it has
+ * effectively been freed. It is an error to recycle a message that is currently
+ * enqueued or that is in the process of being delivered to a Handler.
+ * </p>
*/
public void recycle() {
- clearForRecycle();
+ if (isInUse()) {
+ throw new IllegalStateException("This message cannot be recycled because it "
+ + "is still in use.");
+ }
+ recycleUnchecked();
+ }
+
+ /**
+ * Recycles a Message that may be in-use.
+ * Used internally by the MessageQueue and Looper when disposing of queued Messages.
+ */
+ void recycleUnchecked() {
+ // Mark the message as in use while it remains in the recycled object pool.
+ // Clear out all other details.
+ flags = FLAG_IN_USE;
+ what = 0;
+ arg1 = 0;
+ arg2 = 0;
+ obj = null;
+ replyTo = null;
+ when = 0;
+ target = null;
+ callback = null;
+ data = null;
synchronized (sPoolSync) {
if (sPoolSize < MAX_POOL_SIZE) {
@@ -402,19 +436,6 @@
}
}
- /*package*/ void clearForRecycle() {
- flags = 0;
- what = 0;
- arg1 = 0;
- arg2 = 0;
- obj = null;
- replyTo = null;
- when = 0;
- target = null;
- callback = null;
- data = null;
- }
-
/*package*/ boolean isInUse() {
return ((flags & FLAG_IN_USE) == FLAG_IN_USE);
}
diff --git a/core/java/android/os/MessageQueue.java b/core/java/android/os/MessageQueue.java
index 7ca5d49..01a23ce 100644
--- a/core/java/android/os/MessageQueue.java
+++ b/core/java/android/os/MessageQueue.java
@@ -16,7 +16,6 @@
package android.os;
-import android.util.AndroidRuntimeException;
import android.util.Log;
import android.util.Printer;
@@ -169,7 +168,6 @@
}
msg.next = null;
if (false) Log.v("MessageQueue", "Returning message: " + msg);
- msg.markInUse();
return msg;
}
} else {
@@ -233,7 +231,7 @@
void quit(boolean safe) {
if (!mQuitAllowed) {
- throw new RuntimeException("Main thread not allowed to quit.");
+ throw new IllegalStateException("Main thread not allowed to quit.");
}
synchronized (this) {
@@ -259,6 +257,7 @@
synchronized (this) {
final int token = mNextBarrierToken++;
final Message msg = Message.obtain();
+ msg.markInUse();
msg.when = when;
msg.arg1 = token;
@@ -303,7 +302,7 @@
mMessages = p.next;
needWake = mMessages == null || mMessages.target != null;
}
- p.recycle();
+ p.recycleUnchecked();
// If the loop is quitting then it is already awake.
// We can assume mPtr != 0 when mQuitting is false.
@@ -314,21 +313,23 @@
}
boolean enqueueMessage(Message msg, long when) {
- if (msg.isInUse()) {
- throw new AndroidRuntimeException(msg + " This message is already in use.");
- }
if (msg.target == null) {
- throw new AndroidRuntimeException("Message must have a target.");
+ throw new IllegalArgumentException("Message must have a target.");
+ }
+ if (msg.isInUse()) {
+ throw new IllegalStateException(msg + " This message is already in use.");
}
synchronized (this) {
if (mQuitting) {
- RuntimeException e = new RuntimeException(
+ IllegalStateException e = new IllegalStateException(
msg.target + " sending message to a Handler on a dead thread");
Log.w("MessageQueue", e.getMessage(), e);
+ msg.recycle();
return false;
}
+ msg.markInUse();
msg.when = when;
Message p = mMessages;
boolean needWake;
@@ -424,7 +425,7 @@
&& (object == null || p.obj == object)) {
Message n = p.next;
mMessages = n;
- p.recycle();
+ p.recycleUnchecked();
p = n;
}
@@ -435,7 +436,7 @@
if (n.target == h && n.what == what
&& (object == null || n.obj == object)) {
Message nn = n.next;
- n.recycle();
+ n.recycleUnchecked();
p.next = nn;
continue;
}
@@ -458,7 +459,7 @@
&& (object == null || p.obj == object)) {
Message n = p.next;
mMessages = n;
- p.recycle();
+ p.recycleUnchecked();
p = n;
}
@@ -469,7 +470,7 @@
if (n.target == h && n.callback == r
&& (object == null || n.obj == object)) {
Message nn = n.next;
- n.recycle();
+ n.recycleUnchecked();
p.next = nn;
continue;
}
@@ -492,7 +493,7 @@
&& (object == null || p.obj == object)) {
Message n = p.next;
mMessages = n;
- p.recycle();
+ p.recycleUnchecked();
p = n;
}
@@ -502,7 +503,7 @@
if (n != null) {
if (n.target == h && (object == null || n.obj == object)) {
Message nn = n.next;
- n.recycle();
+ n.recycleUnchecked();
p.next = nn;
continue;
}
@@ -516,7 +517,7 @@
Message p = mMessages;
while (p != null) {
Message n = p.next;
- p.recycle();
+ p.recycleUnchecked();
p = n;
}
mMessages = null;
@@ -544,7 +545,7 @@
do {
p = n;
n = p.next;
- p.recycle();
+ p.recycleUnchecked();
} while (n != null);
}
}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 40bbbd4..7777334 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -749,6 +749,14 @@
public static final String ACTION_PRINT_SETTINGS =
"android.settings.ACTION_PRINT_SETTINGS";
+ /**
+ * Activity Action: Show Zen Mode configuration settings.
+ *
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_ZEN_MODE_SETTINGS = "android.settings.ZEN_MODE_SETTINGS";
+
// End of Intent actions for Settings
/**
@@ -3352,21 +3360,29 @@
public static final String INSTALL_NON_MARKET_APPS = Global.INSTALL_NON_MARKET_APPS;
/**
- * Comma-separated list of location providers that activities may access.
+ * Comma-separated list of location providers that activities may access. Do not rely on
+ * this value being present in settings.db or on ContentObserver notifications on the
+ * corresponding Uri.
*
- * @deprecated use {@link #LOCATION_MODE}
+ * @deprecated use {@link #LOCATION_MODE} and
+ * {@link LocationManager#MODE_CHANGED_ACTION} (or
+ * {@link LocationManager#PROVIDERS_CHANGED_ACTION})
*/
@Deprecated
public static final String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed";
/**
* The degree of location access enabled by the user.
- * <p/>
+ * <p>
* When used with {@link #putInt(ContentResolver, String, int)}, must be one of {@link
* #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY}, {@link
* #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}. When used with {@link
* #getInt(ContentResolver, String)}, the caller must gracefully handle additional location
* modes that might be added in the future.
+ * <p>
+ * Note: do not rely on this value being present in settings.db or on ContentObserver
+ * notifications for the corresponding Uri. Use {@link LocationManager#MODE_CHANGED_ACTION}
+ * to receive changes in this value.
*/
public static final String LOCATION_MODE = "location_mode";
@@ -6100,6 +6116,17 @@
}
/**
+ * Defines global heads up toggle. One of HEADS_UP_OFF, HEADS_UP_ON.
+ *
+ * @hide
+ */
+ public static final String HEADS_UP_NOTIFICATIONS_ENABLED =
+ "heads_up_notifications_enabled";
+
+ /** @hide */ public static final int HEADS_UP_OFF = 0;
+ /** @hide */ public static final int HEADS_UP_ON = 1;
+
+ /**
* Settings to backup. This is here so that it's in the same place as the settings
* keys and easy to update.
*
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index 99aee29..de304da 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -5138,8 +5138,7 @@
* @param text The announcement text.
*/
public void announceForAccessibility(CharSequence text) {
- if (AccessibilityManager.getInstance(mContext).isEnabled() && mParent != null
- && isImportantForAccessibility()) {
+ if (AccessibilityManager.getInstance(mContext).isEnabled() && mParent != null) {
AccessibilityEvent event = AccessibilityEvent.obtain(
AccessibilityEvent.TYPE_ANNOUNCEMENT);
onInitializeAccessibilityEvent(event);
@@ -5189,7 +5188,7 @@
* Note: Called from the default {@link AccessibilityDelegate}.
*/
void sendAccessibilityEventUncheckedInternal(AccessibilityEvent event) {
- if (!isShown() || !isImportantForAccessibility()) {
+ if (!isShown()) {
return;
}
onInitializeAccessibilityEvent(event);
@@ -13620,11 +13619,7 @@
}
if (layerType == mLayerType) {
- if (layerType != LAYER_TYPE_NONE && paint != mLayerPaint) {
- mLayerPaint = paint == null ? new Paint() : paint;
- invalidateParentCaches();
- invalidate(true);
- }
+ setLayerPaint(paint);
return;
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 2b32d70..a338e6e 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -267,6 +267,10 @@
HardwareLayer mResizeBuffer;
long mResizeBufferStartTime;
int mResizeBufferDuration;
+ // Used to block the creation of the ResizeBuffer due to invalidations in
+ // the previous DisplayList tree that must prevent re-execution.
+ // Currently this means a functor was detached.
+ boolean mBlockResizeBuffer;
static final Interpolator mResizeInterpolator = new AccelerateDecelerateInterpolator();
private ArrayList<LayoutTransition> mPendingTransitions;
@@ -667,6 +671,7 @@
}
public void detachFunctor(int functor) {
+ mBlockResizeBuffer = true;
if (mAttachInfo.mHardwareRenderer != null) {
mAttachInfo.mHardwareRenderer.detachFunctor(functor);
}
@@ -1454,7 +1459,8 @@
!mAttachInfo.mTurnOffWindowResizeAnim &&
mAttachInfo.mHardwareRenderer != null &&
mAttachInfo.mHardwareRenderer.isEnabled() &&
- lp != null && !PixelFormat.formatHasAlpha(lp.format)) {
+ lp != null && !PixelFormat.formatHasAlpha(lp.format)
+ && !mBlockResizeBuffer) {
disposeResizeBuffer();
@@ -2377,6 +2383,7 @@
mCurrentDirty.set(dirty);
dirty.setEmpty();
+ mBlockResizeBuffer = false;
attachInfo.mHardwareRenderer.draw(mView, attachInfo, this,
animating ? null : mCurrentDirty);
} else {
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index ffd5c45..47d42dc 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -7160,8 +7160,14 @@
return;
}
+ if (mAdapter == null) {
+ // Can't scroll anywhere without an adapter.
+ return;
+ }
+
final int itemCount = getCount();
final int clampedPosition = MathUtils.constrain(targetPosition, 0, itemCount - 1);
+ final int clampedBoundPosition = MathUtils.constrain(boundPosition, 0, itemCount - 1);
final int firstPosition = getFirstVisiblePosition();
final int lastPosition = firstPosition + getChildCount();
final int targetRow = getRowForPosition(clampedPosition);
@@ -7180,8 +7186,8 @@
}
float endSubRow = targetRow;
- if (boundPosition != INVALID_POSITION) {
- final int boundRow = getRowForPosition(boundPosition);
+ if (clampedBoundPosition != INVALID_POSITION) {
+ final int boundRow = getRowForPosition(clampedBoundPosition);
if (boundRow >= firstRow && boundRow < lastRow && boundRow != targetRow) {
endSubRow = computeBoundSubRow(targetRow, boundRow);
}
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index 2a5fb15..3d23e4d 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -511,15 +511,18 @@
if (mOnLayout == null) {
mOnLayout = makeLayout(mTextOn);
}
+
if (mOffLayout == null) {
mOffLayout = makeLayout(mTextOff);
}
mTrackDrawable.getPadding(mTempRect);
+
final int maxTextWidth = Math.max(mOnLayout.getWidth(), mOffLayout.getWidth());
final int switchWidth = Math.max(mSwitchMinWidth,
maxTextWidth * 2 + mThumbTextPadding * 4 + mTempRect.left + mTempRect.right);
- final int switchHeight = mTrackDrawable.getIntrinsicHeight();
+ final int switchHeight = Math.max(mTrackDrawable.getIntrinsicHeight(),
+ mThumbDrawable.getIntrinsicHeight());
mThumbWidth = maxTextWidth + mThumbTextPadding * 2;
@@ -772,48 +775,51 @@
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
+ final Rect tempRect = mTempRect;
+ final Drawable trackDrawable = mTrackDrawable;
+ final Drawable thumbDrawable = mThumbDrawable;
+
// Draw the switch
- int switchLeft = mSwitchLeft;
- int switchTop = mSwitchTop;
- int switchRight = mSwitchRight;
- int switchBottom = mSwitchBottom;
+ final int switchLeft = mSwitchLeft;
+ final int switchTop = mSwitchTop;
+ final int switchRight = mSwitchRight;
+ final int switchBottom = mSwitchBottom;
+ trackDrawable.setBounds(switchLeft, switchTop, switchRight, switchBottom);
+ trackDrawable.draw(canvas);
- mTrackDrawable.setBounds(switchLeft, switchTop, switchRight, switchBottom);
- mTrackDrawable.draw(canvas);
+ final int saveCount = canvas.save();
- canvas.save();
-
- mTrackDrawable.getPadding(mTempRect);
- int switchInnerLeft = switchLeft + mTempRect.left;
- int switchInnerTop = switchTop + mTempRect.top;
- int switchInnerRight = switchRight - mTempRect.right;
- int switchInnerBottom = switchBottom - mTempRect.bottom;
+ trackDrawable.getPadding(tempRect);
+ final int switchInnerLeft = switchLeft + tempRect.left;
+ final int switchInnerTop = switchTop + tempRect.top;
+ final int switchInnerRight = switchRight - tempRect.right;
+ final int switchInnerBottom = switchBottom - tempRect.bottom;
canvas.clipRect(switchInnerLeft, switchTop, switchInnerRight, switchBottom);
// Relies on mTempRect, MUST be called first!
final int thumbPos = getThumbOffset();
- mThumbDrawable.getPadding(mTempRect);
- int thumbLeft = switchInnerLeft - mTempRect.left + thumbPos;
- int thumbRight = switchInnerLeft + thumbPos + mThumbWidth + mTempRect.right;
- mThumbDrawable.setBounds(thumbLeft, switchTop, thumbRight, switchBottom);
- mThumbDrawable.draw(canvas);
+ thumbDrawable.getPadding(tempRect);
+ int thumbLeft = switchInnerLeft - tempRect.left + thumbPos;
+ int thumbRight = switchInnerLeft + thumbPos + mThumbWidth + tempRect.right;
+ thumbDrawable.setBounds(thumbLeft, switchTop, thumbRight, switchBottom);
+ thumbDrawable.draw(canvas);
- // mTextColors should not be null, but just in case
+ final int drawableState[] = getDrawableState();
if (mTextColors != null) {
- mTextPaint.setColor(mTextColors.getColorForState(getDrawableState(),
- mTextColors.getDefaultColor()));
+ mTextPaint.setColor(mTextColors.getColorForState(drawableState, 0));
}
- mTextPaint.drawableState = getDrawableState();
+ mTextPaint.drawableState = drawableState;
- Layout switchText = getTargetCheckedState() ? mOnLayout : mOffLayout;
+ final Layout switchText = getTargetCheckedState() ? mOnLayout : mOffLayout;
if (switchText != null) {
- canvas.translate((thumbLeft + thumbRight) / 2 - switchText.getWidth() / 2,
- (switchInnerTop + switchInnerBottom) / 2 - switchText.getHeight() / 2);
+ final int left = (thumbLeft + thumbRight) / 2 - switchText.getWidth() / 2;
+ final int top = (switchInnerTop + switchInnerBottom) / 2 - switchText.getHeight() / 2;
+ canvas.translate(left, top);
switchText.draw(canvas);
}
- canvas.restore();
+ canvas.restoreToCount(saveCount);
}
@Override
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 892ad68..3f90f76 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -52,7 +52,7 @@
void noteScreenOff();
void noteInputEvent();
void noteUserActivity(int uid, int event);
- void noteDataConnectionActive(String label, boolean active);
+ void noteDataConnectionActive(int type, boolean active);
void notePhoneOn();
void notePhoneOff();
void notePhoneSignalStrength(in SignalStrength signalStrength);
diff --git a/core/java/com/android/internal/os/BatterySipper.java b/core/java/com/android/internal/os/BatterySipper.java
index 565cee4..6ca24d7 100644
--- a/core/java/com/android/internal/os/BatterySipper.java
+++ b/core/java/com/android/internal/os/BatterySipper.java
@@ -35,6 +35,7 @@
public long mobileRxPackets;
public long mobileTxPackets;
public long mobileActive;
+ public int mobileActiveCount;
public double mobilemspp; // milliseconds per packet
public long wifiRxPackets;
public long wifiTxPackets;
diff --git a/core/java/com/android/internal/os/BatteryStatsHelper.java b/core/java/com/android/internal/os/BatteryStatsHelper.java
index 755530c..6f95937 100644
--- a/core/java/com/android/internal/os/BatteryStatsHelper.java
+++ b/core/java/com/android/internal/os/BatteryStatsHelper.java
@@ -458,6 +458,7 @@
app.mobileRxPackets = mobileRx;
app.mobileTxPackets = mobileTx;
app.mobileActive = mobileActive / 1000;
+ app.mobileActiveCount = u.getMobileRadioActiveCount(mStatsType);
app.wifiRxPackets = wifiRx;
app.wifiTxPackets = wifiTx;
app.mobileRxBytes = mobileRxB;
@@ -595,6 +596,7 @@
bs.noCoveragePercent = noCoverageTimeMs * 100.0 / signalTimeMs;
}
bs.mobileActive = remainingActiveTime;
+ bs.mobileActiveCount = mStats.getMobileRadioActiveUnknownCount(mStatsType);
}
}
@@ -610,6 +612,7 @@
bs.mobileRxPackets += wbs.mobileRxPackets;
bs.mobileTxPackets += wbs.mobileTxPackets;
bs.mobileActive += wbs.mobileActive;
+ bs.mobileActiveCount += wbs.mobileActiveCount;
bs.wifiRxPackets += wbs.wifiRxPackets;
bs.wifiTxPackets += wbs.wifiTxPackets;
bs.mobileRxBytes += wbs.mobileRxBytes;
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 46983ab..fdb090b 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -87,7 +87,7 @@
private static final int MAGIC = 0xBA757475; // 'BATSTATS'
// Current on-disk Parcel version
- private static final int VERSION = 90 + (USE_OLD_HISTORY ? 1000 : 0);
+ private static final int VERSION = 94 + (USE_OLD_HISTORY ? 1000 : 0);
// Maximum number of items we will record in the history.
private static final int MAX_HISTORY_ITEMS = 2000;
@@ -283,6 +283,7 @@
boolean mMobileRadioActive;
StopwatchTimer mMobileRadioActiveTimer;
+ StopwatchTimer mMobileRadioActivePerAppTimer;
LongSamplingCounter mMobileRadioActiveUnknownTime;
LongSamplingCounter mMobileRadioActiveUnknownCount;
@@ -2373,33 +2374,31 @@
}
public void noteUserActivityLocked(int uid, int event) {
- uid = mapUid(uid);
- getUidStatsLocked(uid).noteUserActivityLocked(event);
+ if (mOnBatteryInternal) {
+ uid = mapUid(uid);
+ getUidStatsLocked(uid).noteUserActivityLocked(event);
+ }
}
- public void noteDataConnectionActive(String label, boolean active) {
- try {
- int type = Integer.parseInt(label);
- if (ConnectivityManager.isNetworkTypeMobile(type)) {
- final long elapsedRealtime = SystemClock.elapsedRealtime();
- if (mMobileRadioActive != active) {
- if (active) mHistoryCur.states |= HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG;
- else mHistoryCur.states &= ~HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG;
- if (DEBUG_HISTORY) Slog.v(TAG, "Mobile network active " + active + " to: "
- + Integer.toHexString(mHistoryCur.states));
- addHistoryRecordLocked(elapsedRealtime);
- mMobileRadioActive = active;
- if (active) {
- mMobileRadioActiveTimer.startRunningLocked(this, elapsedRealtime);
- } else {
- updateNetworkActivityLocked(NET_UPDATE_MOBILE, elapsedRealtime);
- mMobileRadioActiveTimer.stopRunningLocked(this, elapsedRealtime);
- }
+ public void noteDataConnectionActive(int type, boolean active) {
+ if (ConnectivityManager.isNetworkTypeMobile(type)) {
+ final long elapsedRealtime = SystemClock.elapsedRealtime();
+ if (mMobileRadioActive != active) {
+ if (active) mHistoryCur.states |= HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG;
+ else mHistoryCur.states &= ~HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG;
+ if (DEBUG_HISTORY) Slog.v(TAG, "Mobile network active " + active + " to: "
+ + Integer.toHexString(mHistoryCur.states));
+ addHistoryRecordLocked(elapsedRealtime);
+ mMobileRadioActive = active;
+ if (active) {
+ mMobileRadioActiveTimer.startRunningLocked(this, elapsedRealtime);
+ mMobileRadioActivePerAppTimer.startRunningLocked(this, elapsedRealtime);
+ } else {
+ updateNetworkActivityLocked(NET_UPDATE_MOBILE, elapsedRealtime);
+ mMobileRadioActiveTimer.stopRunningLocked(this, elapsedRealtime);
+ mMobileRadioActivePerAppTimer.stopRunningLocked(this, elapsedRealtime);
}
}
- } catch (NumberFormatException e) {
- Slog.w(TAG, "Bad data connection label: " + label, e);
- return;
}
}
@@ -3038,6 +3037,10 @@
return mScreenOnTimer.getTotalTimeLocked(batteryRealtime, which);
}
+ @Override public int getScreenOnCount(int which) {
+ return mScreenOnTimer.getCountLocked(which);
+ }
+
@Override public long getScreenBrightnessTime(int brightnessBin,
long batteryRealtime, int which) {
return mScreenBrightnessTimer[brightnessBin].getTotalTimeLocked(
@@ -3052,6 +3055,10 @@
return mPhoneOnTimer.getTotalTimeLocked(batteryRealtime, which);
}
+ @Override public int getPhoneOnCount(int which) {
+ return mPhoneOnTimer.getCountLocked(which);
+ }
+
@Override public long getPhoneSignalStrengthTime(int strengthBin,
long batteryRealtime, int which) {
return mPhoneSignalStrengthsTimer[strengthBin].getTotalTimeLocked(
@@ -5143,6 +5150,7 @@
mNetworkPacketActivityCounters[i] = new LongSamplingCounter(mUnpluggables);
}
mMobileRadioActiveTimer = new StopwatchTimer(null, -400, null, mUnpluggables);
+ mMobileRadioActivePerAppTimer = new StopwatchTimer(null, -401, null, mUnpluggables);
mMobileRadioActiveUnknownTime = new LongSamplingCounter(mUnpluggables);
mMobileRadioActiveUnknownCount = new LongSamplingCounter(mUnpluggables);
mWifiOnTimer = new StopwatchTimer(null, -3, null, mUnpluggables);
@@ -5411,6 +5419,7 @@
mNetworkPacketActivityCounters[i].reset(false);
}
mMobileRadioActiveTimer.reset(this, false);
+ mMobileRadioActivePerAppTimer.reset(this, false);
mMobileRadioActiveUnknownTime.reset(false);
mMobileRadioActiveUnknownCount.reset(false);
mWifiOnTimer.reset(this, false);
@@ -5491,6 +5500,9 @@
public void pullPendingStateUpdatesLocked() {
updateKernelWakelocksLocked();
updateNetworkActivityLocked(NET_UPDATE_ALL, SystemClock.elapsedRealtime());
+ if (mOnBatteryInternal) {
+ updateDischargeScreenLevelsLocked(mScreenOn, mScreenOn);
+ }
}
void setOnBatteryLocked(boolean onBattery, int oldStatus, int level) {
@@ -5696,49 +5708,53 @@
mCurMobileSnapshot = snapshot;
mLastMobileSnapshot = last;
- final NetworkStats delta = NetworkStats.subtract(snapshot, last,
- null, null, mTmpNetworkStats);
- mTmpNetworkStats = delta;
+ if (mOnBatteryInternal) {
+ final NetworkStats delta = NetworkStats.subtract(snapshot, last,
+ null, null, mTmpNetworkStats);
+ mTmpNetworkStats = delta;
- long radioTime = mMobileRadioActiveTimer.checkpointRunningLocked(this,
- elapsedRealtime);
- long totalPackets = delta.getTotalPackets();
+ long radioTime = mMobileRadioActivePerAppTimer.checkpointRunningLocked(this,
+ elapsedRealtime);
+ long totalPackets = delta.getTotalPackets();
- final int size = delta.size();
- for (int i = 0; i < size; i++) {
- final NetworkStats.Entry entry = delta.getValues(i, mTmpNetworkStatsEntry);
+ final int size = delta.size();
+ for (int i = 0; i < size; i++) {
+ final NetworkStats.Entry entry = delta.getValues(i, mTmpNetworkStatsEntry);
- if (entry.rxBytes == 0 || entry.txBytes == 0) continue;
+ if (entry.rxBytes == 0 || entry.txBytes == 0) continue;
- final Uid u = getUidStatsLocked(entry.uid);
- u.noteNetworkActivityLocked(NETWORK_MOBILE_RX_DATA, entry.rxBytes,
- entry.rxPackets);
- u.noteNetworkActivityLocked(NETWORK_MOBILE_TX_DATA, entry.txBytes,
- entry.txPackets);
+ final Uid u = getUidStatsLocked(entry.uid);
+ u.noteNetworkActivityLocked(NETWORK_MOBILE_RX_DATA, entry.rxBytes,
+ entry.rxPackets);
+ u.noteNetworkActivityLocked(NETWORK_MOBILE_TX_DATA, entry.txBytes,
+ entry.txPackets);
- if (radioTime > 0) {
- // Distribute total radio active time in to this app.
- long appPackets = entry.rxPackets + entry.txPackets;
- long appRadioTime = (radioTime*appPackets)/totalPackets;
- u.noteMobileRadioActiveTimeLocked(appRadioTime);
- // Remove this app from the totals, so that we don't lose any time
- // due to rounding.
- radioTime -= appRadioTime;
- totalPackets -= appPackets;
+ if (radioTime > 0) {
+ // Distribute total radio active time in to this app.
+ long appPackets = entry.rxPackets + entry.txPackets;
+ long appRadioTime = (radioTime*appPackets)/totalPackets;
+ u.noteMobileRadioActiveTimeLocked(appRadioTime);
+ // Remove this app from the totals, so that we don't lose any time
+ // due to rounding.
+ radioTime -= appRadioTime;
+ totalPackets -= appPackets;
+ }
+
+ mNetworkByteActivityCounters[NETWORK_MOBILE_RX_DATA].addCountLocked(
+ entry.rxBytes);
+ mNetworkByteActivityCounters[NETWORK_MOBILE_TX_DATA].addCountLocked(
+ entry.txBytes);
+ mNetworkPacketActivityCounters[NETWORK_MOBILE_RX_DATA].addCountLocked(
+ entry.rxPackets);
+ mNetworkPacketActivityCounters[NETWORK_MOBILE_TX_DATA].addCountLocked(
+ entry.txPackets);
}
- mNetworkByteActivityCounters[NETWORK_MOBILE_RX_DATA].addCountLocked(entry.rxBytes);
- mNetworkByteActivityCounters[NETWORK_MOBILE_TX_DATA].addCountLocked(entry.txBytes);
- mNetworkPacketActivityCounters[NETWORK_MOBILE_RX_DATA].addCountLocked(
- entry.rxPackets);
- mNetworkPacketActivityCounters[NETWORK_MOBILE_TX_DATA].addCountLocked(
- entry.txPackets);
- }
-
- if (radioTime > 0) {
- // Whoops, there is some radio time we can't blame on an app!
- mMobileRadioActiveUnknownTime.addCountLocked(radioTime);
- mMobileRadioActiveUnknownCount.addCountLocked(1);
+ if (radioTime > 0) {
+ // Whoops, there is some radio time we can't blame on an app!
+ mMobileRadioActiveUnknownTime.addCountLocked(radioTime);
+ mMobileRadioActiveUnknownCount.addCountLocked(1);
+ }
}
}
@@ -5756,33 +5772,39 @@
mCurWifiSnapshot = snapshot;
mLastWifiSnapshot = last;
- final NetworkStats delta = NetworkStats.subtract(snapshot, last,
- null, null, mTmpNetworkStats);
- mTmpNetworkStats = delta;
+ if (mOnBatteryInternal) {
+ final NetworkStats delta = NetworkStats.subtract(snapshot, last,
+ null, null, mTmpNetworkStats);
+ mTmpNetworkStats = delta;
- final int size = delta.size();
- for (int i = 0; i < size; i++) {
- final NetworkStats.Entry entry = delta.getValues(i, mTmpNetworkStatsEntry);
+ final int size = delta.size();
+ for (int i = 0; i < size; i++) {
+ final NetworkStats.Entry entry = delta.getValues(i, mTmpNetworkStatsEntry);
- if (DEBUG) {
- final NetworkStats.Entry cur = snapshot.getValues(i, null);
- Slog.d(TAG, "Wifi uid " + entry.uid + ": delta rx=" + entry.rxBytes
- + " tx=" + entry.txBytes + ", cur rx=" + cur.rxBytes
- + " tx=" + cur.txBytes);
+ if (DEBUG) {
+ final NetworkStats.Entry cur = snapshot.getValues(i, null);
+ Slog.d(TAG, "Wifi uid " + entry.uid + ": delta rx=" + entry.rxBytes
+ + " tx=" + entry.txBytes + ", cur rx=" + cur.rxBytes
+ + " tx=" + cur.txBytes);
+ }
+
+ if (entry.rxBytes == 0 || entry.txBytes == 0) continue;
+
+ final Uid u = getUidStatsLocked(entry.uid);
+ u.noteNetworkActivityLocked(NETWORK_WIFI_RX_DATA, entry.rxBytes,
+ entry.rxPackets);
+ u.noteNetworkActivityLocked(NETWORK_WIFI_TX_DATA, entry.txBytes,
+ entry.txPackets);
+
+ mNetworkByteActivityCounters[NETWORK_WIFI_RX_DATA].addCountLocked(
+ entry.rxBytes);
+ mNetworkByteActivityCounters[NETWORK_WIFI_TX_DATA].addCountLocked(
+ entry.txBytes);
+ mNetworkPacketActivityCounters[NETWORK_WIFI_RX_DATA].addCountLocked(
+ entry.rxPackets);
+ mNetworkPacketActivityCounters[NETWORK_WIFI_TX_DATA].addCountLocked(
+ entry.txPackets);
}
-
- if (entry.rxBytes == 0 || entry.txBytes == 0) continue;
-
- final Uid u = getUidStatsLocked(entry.uid);
- u.noteNetworkActivityLocked(NETWORK_WIFI_RX_DATA, entry.rxBytes, entry.rxPackets);
- u.noteNetworkActivityLocked(NETWORK_WIFI_TX_DATA, entry.txBytes, entry.txPackets);
-
- mNetworkByteActivityCounters[NETWORK_WIFI_RX_DATA].addCountLocked(entry.rxBytes);
- mNetworkByteActivityCounters[NETWORK_WIFI_TX_DATA].addCountLocked(entry.txBytes);
- mNetworkPacketActivityCounters[NETWORK_WIFI_RX_DATA].addCountLocked(
- entry.rxPackets);
- mNetworkPacketActivityCounters[NETWORK_WIFI_TX_DATA].addCountLocked(
- entry.txPackets);
}
}
}
@@ -6371,6 +6393,7 @@
}
mMobileRadioActive = false;
mMobileRadioActiveTimer.readSummaryFromParcelLocked(in);
+ mMobileRadioActivePerAppTimer.readSummaryFromParcelLocked(in);
mMobileRadioActiveUnknownTime.readSummaryFromParcelLocked(in);
mMobileRadioActiveUnknownCount.readSummaryFromParcelLocked(in);
mWifiOn = false;
@@ -6606,6 +6629,7 @@
mNetworkPacketActivityCounters[i].writeSummaryFromParcelLocked(out);
}
mMobileRadioActiveTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+ mMobileRadioActivePerAppTimer.writeSummaryFromParcelLocked(out, NOWREAL);
mMobileRadioActiveUnknownTime.writeSummaryFromParcelLocked(out);
mMobileRadioActiveUnknownCount.writeSummaryFromParcelLocked(out);
mWifiOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
@@ -6852,6 +6876,7 @@
}
mMobileRadioActive = false;
mMobileRadioActiveTimer = new StopwatchTimer(null, -400, null, mUnpluggables, in);
+ mMobileRadioActivePerAppTimer = new StopwatchTimer(null, -401, null, mUnpluggables, in);
mMobileRadioActiveUnknownTime = new LongSamplingCounter(mUnpluggables, in);
mMobileRadioActiveUnknownCount = new LongSamplingCounter(mUnpluggables, in);
mWifiOn = false;
@@ -6971,6 +6996,7 @@
mNetworkPacketActivityCounters[i].writeToParcel(out);
}
mMobileRadioActiveTimer.writeToParcel(out, batteryRealtime);
+ mMobileRadioActivePerAppTimer.writeToParcel(out, batteryRealtime);
mMobileRadioActiveUnknownTime.writeToParcel(out);
mMobileRadioActiveUnknownCount.writeToParcel(out);
mWifiOnTimer.writeToParcel(out, batteryRealtime);
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index cf69d9e..a09c314 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -164,6 +164,7 @@
$(TOP)/frameworks/av/include \
$(TOP)/system/media/camera/include \
external/skia/src/core \
+ external/skia/src/effects \
external/skia/src/images \
external/sqlite/dist \
external/sqlite/android \
diff --git a/core/jni/android/graphics/MaskFilter.cpp b/core/jni/android/graphics/MaskFilter.cpp
index f331af7..5573366 100644
--- a/core/jni/android/graphics/MaskFilter.cpp
+++ b/core/jni/android/graphics/MaskFilter.cpp
@@ -1,5 +1,6 @@
#include "GraphicsJNI.h"
#include "SkMaskFilter.h"
+#include "SkBlurMask.h"
#include "SkBlurMaskFilter.h"
#include "SkTableMaskFilter.h"
@@ -19,8 +20,9 @@
}
static jlong createBlur(JNIEnv* env, jobject, jfloat radius, jint blurStyle) {
- SkMaskFilter* filter = SkBlurMaskFilter::Create(SkFloatToScalar(radius),
- (SkBlurMaskFilter::BlurStyle)blurStyle);
+ SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(SkFloatToScalar(radius));
+ SkMaskFilter* filter = SkBlurMaskFilter::Create(
+ (SkBlurMaskFilter::BlurStyle)blurStyle, sigma);
ThrowIAE_IfNull(env, filter);
return reinterpret_cast<jlong>(filter);
}
@@ -34,10 +36,9 @@
direction[i] = SkFloatToScalar(values[i]);
}
- SkMaskFilter* filter = SkBlurMaskFilter::CreateEmboss(direction,
- SkFloatToScalar(ambient),
- SkFloatToScalar(specular),
- SkFloatToScalar(radius));
+ SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(SkFloatToScalar(radius));
+ SkMaskFilter* filter = SkBlurMaskFilter::CreateEmboss(sigma,
+ direction, SkFloatToScalar(ambient), SkFloatToScalar(specular));
ThrowIAE_IfNull(env, filter);
return reinterpret_cast<jlong>(filter);
}
diff --git a/core/jni/android/graphics/Shader.cpp b/core/jni/android/graphics/Shader.cpp
index 3047440..1fe6358 100644
--- a/core/jni/android/graphics/Shader.cpp
+++ b/core/jni/android/graphics/Shader.cpp
@@ -520,7 +520,7 @@
SkiaShader* shaderB = reinterpret_cast<SkiaShader *>(shaderBHandle);
SkXfermode* mode = reinterpret_cast<SkXfermode *>(modeHandle);
SkXfermode::Mode skiaMode;
- if (!SkXfermode::IsMode(mode, &skiaMode)) {
+ if (!SkXfermode::AsMode(mode, &skiaMode)) {
// TODO: Support other modes
skiaMode = SkXfermode::kSrcOver_Mode;
}
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 30e6161..55e21de 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -1071,7 +1071,7 @@
android:permissionGroupFlags="personalInfo"
android:priority="370" />
- <!-- Allows an application to monitor, modify, or abort outgoing
+ <!-- Allows an application to modify or abort outgoing
calls. -->
<permission android:name="android.permission.PROCESS_OUTGOING_CALLS"
android:permissionGroup="android.permission-group.PHONE_CALLS"
diff --git a/core/res/res/color/primary_text_disable_only_quantum_dark.xml b/core/res/res/color/primary_text_disable_only_quantum_dark.xml
index 2a6c33c..60a91f2 100644
--- a/core/res/res/color/primary_text_disable_only_quantum_dark.xml
+++ b/core/res/res/color/primary_text_disable_only_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:color="@android:color/bright_foreground_dark_disabled"/>
- <item android:color="@android:color/bright_foreground_dark"/>
+ <item android:state_enabled="false" android:alpha="0.5" android:color="@android:color/bright_foreground_quantum_dark"/>
+ <item android:color="@android:color/bright_foreground_quantum_dark"/>
</selector>
diff --git a/core/res/res/color/primary_text_disable_only_quantum_light.xml b/core/res/res/color/primary_text_disable_only_quantum_light.xml
index ff83f6a..ced9051 100644
--- a/core/res/res/color/primary_text_disable_only_quantum_light.xml
+++ b/core/res/res/color/primary_text_disable_only_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,6 +15,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:color="@android:color/bright_foreground_light_disabled"/>
- <item android:color="@android:color/bright_foreground_light"/>
+ <item android:state_enabled="false" android:alpha="0.5" android:color="@android:color/bright_foreground_quantum_light"/>
+ <item android:color="@android:color/bright_foreground_quantum_light"/>
</selector>
diff --git a/core/res/res/color/primary_text_nodisable_quantum_dark.xml b/core/res/res/color/primary_text_nodisable_quantum_dark.xml
deleted file mode 100644
index 1044428..0000000
--- a/core/res/res/color/primary_text_nodisable_quantum_dark.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_dark_inverse"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_dark_inverse"/>
- <item android:color="@android:color/bright_foreground_dark"/>
-</selector>
diff --git a/core/res/res/color/primary_text_quantum_dark.xml b/core/res/res/color/primary_text_quantum_dark.xml
deleted file mode 100644
index 65f49ae..0000000
--- a/core/res/res/color/primary_text_quantum_dark.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:color="@android:color/bright_foreground_disabled_holo_dark"/>
- <item android:state_window_focused="false" android:color="@android:color/bright_foreground_holo_dark"/>
- <item android:state_pressed="true" android:color="@android:color/bright_foreground_holo_dark"/>
- <item android:state_selected="true" android:color="@android:color/bright_foreground_holo_dark"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_holo_dark"/>
- <item android:color="@android:color/bright_foreground_holo_dark"/>
-</selector>
diff --git a/core/res/res/color/primary_text_quantum_light.xml b/core/res/res/color/primary_text_quantum_light.xml
deleted file mode 100644
index 372745d..0000000
--- a/core/res/res/color/primary_text_quantum_light.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:color="@android:color/bright_foreground_disabled_holo_light"/>
- <item android:state_window_focused="false" android:color="@android:color/bright_foreground_holo_light"/>
- <item android:state_pressed="true" android:color="@android:color/bright_foreground_holo_light"/>
- <item android:state_selected="true" android:color="@android:color/bright_foreground_holo_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_holo_light"/>
- <item android:color="@android:color/bright_foreground_holo_light"/>
-</selector>
diff --git a/core/res/res/color/search_url_text_quantum_dark.xml b/core/res/res/color/search_url_text_quantum_dark.xml
index 62337bd..5263fd7 100644
--- a/core/res/res/color/search_url_text_quantum_dark.xml
+++ b/core/res/res/color/search_url_text_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/core/res/res/color/search_url_text_quantum_light.xml b/core/res/res/color/search_url_text_quantum_light.xml
index 62337bd..5263fd7 100644
--- a/core/res/res/color/search_url_text_quantum_light.xml
+++ b/core/res/res/color/search_url_text_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/core/res/res/color/secondary_text_nodisable_quantum_light.xml b/core/res/res/color/secondary_text_nodisable_quantum_light.xml
deleted file mode 100644
index 3ab25a0..0000000
--- a/core/res/res/color/secondary_text_nodisable_quantum_light.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/dim_foreground_dark_inverse"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_dark_inverse"/>
- <item android:color="@android:color/dim_foreground_dark"/>
-</selector>
diff --git a/core/res/res/color/secondary_text_quantum_dark.xml b/core/res/res/color/secondary_text_quantum_dark.xml
deleted file mode 100644
index fb7a07a..0000000
--- a/core/res/res/color/secondary_text_quantum_dark.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_window_focused="false" android:state_enabled="false" android:color="@android:color/dim_foreground_disabled_holo_dark"/>
- <item android:state_window_focused="false" android:color="@android:color/dim_foreground_holo_dark"/>
- <item android:state_selected="true" android:state_enabled="false" android:color="@android:color/dim_foreground_disabled_holo_dark"/>
- <item android:state_pressed="true" android:state_enabled="false" android:color="@android:color/dim_foreground_disabled_holo_dark"/>
- <item android:state_selected="true" android:color="@android:color/dim_foreground_holo_dark"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_holo_dark"/>
- <item android:state_pressed="true" android:color="@android:color/dim_foreground_holo_dark"/>
- <item android:state_enabled="false" android:color="@android:color/dim_foreground_disabled_holo_dark"/>
- <item android:color="@android:color/dim_foreground_holo_dark"/>
-</selector>
diff --git a/core/res/res/color/secondary_text_quantum_light.xml b/core/res/res/color/secondary_text_quantum_light.xml
deleted file mode 100644
index 744ace5..0000000
--- a/core/res/res/color/secondary_text_quantum_light.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_window_focused="false" android:state_enabled="false" android:color="@android:color/dim_foreground_disabled_holo_light"/>
- <item android:state_window_focused="false" android:color="@android:color/dim_foreground_holo_light"/>
- <!-- Since there is only one selector (for both light and dark), the light's selected state shouldn't be inversed like the dark's. -->
- <item android:state_pressed="true" android:state_enabled="false" android:color="@android:color/dim_foreground_disabled_holo_light"/>
- <item android:state_selected="true" android:state_enabled="false" android:color="@android:color/dim_foreground_disabled_holo_light"/>
- <item android:state_pressed="true" android:color="@android:color/dim_foreground_holo_light"/>
- <item android:state_selected="true" android:color="@android:color/dim_foreground_holo_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_holo_light"/>
- <item android:state_enabled="false" android:color="@android:color/dim_foreground_disabled_holo_light"/>
- <item android:color="@android:color/dim_foreground_holo_light"/>
-</selector>
diff --git a/core/res/res/color/tertiary_text_quantum_light.xml b/core/res/res/color/tertiary_text_quantum_light.xml
deleted file mode 100644
index b23162a..0000000
--- a/core/res/res/color/tertiary_text_quantum_light.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:color="#808080"/>
- <item android:state_window_focused="false" android:color="#808080"/>
- <item android:state_pressed="true" android:color="#808080"/>
- <item android:state_selected="true" android:color="#808080"/>
- <item android:color="#808080"/>
-</selector>
diff --git a/core/res/res/drawable-xxhdpi/ab_solid_shadow_qntm.9.png b/core/res/res/drawable-xxhdpi/ab_solid_shadow_qntm.9.png
new file mode 100644
index 0000000..e89c9fe
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ab_solid_shadow_qntm.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ab_transparent_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/ab_transparent_qntm_alpha.9.png
new file mode 100644
index 0000000..f220168
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ab_transparent_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_off_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_check_off_qntm_alpha.png
new file mode 100644
index 0000000..2a17861
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_check_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_on_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_check_on_qntm_alpha.png
new file mode 100644
index 0000000..61067ac
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_check_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/btn_qntm_alpha.9.png
new file mode 100644
index 0000000..7d29d18
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_qntm_alpha.png
new file mode 100644
index 0000000..fdbbbce
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_off_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_off_qntm_alpha.png
new file mode 100644
index 0000000..0ec2ee6
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_radio_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_qntm_alpha.png
new file mode 100644
index 0000000..b46ee1c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_on_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_on_qntm_alpha.png
new file mode 100644
index 0000000..8737156
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_radio_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_star_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_star_qntm_alpha.png
new file mode 100644
index 0000000..7488ff9
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_star_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/expander_close_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/expander_close_qntm_alpha.9.png
new file mode 100644
index 0000000..e78fff6
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/expander_close_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/expander_open_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/expander_open_qntm_alpha.9.png
new file mode 100644
index 0000000..a3d09657
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/expander_open_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/fastscroll_thumb_qntm_alpha.png b/core/res/res/drawable-xxhdpi/fastscroll_thumb_qntm_alpha.png
new file mode 100644
index 0000000..55a73e7
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/fastscroll_thumb_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/fastscroll_track_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/fastscroll_track_qntm_alpha.9.png
new file mode 100644
index 0000000..be64a94
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/fastscroll_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_ab_back_qntm_am_alpha.png b/core/res/res/drawable-xxhdpi/ic_ab_back_qntm_am_alpha.png
new file mode 100644
index 0000000..ca15853
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_ab_back_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_cab_done_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_cab_done_qntm_alpha.png
new file mode 100644
index 0000000..1f9c734
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_cab_done_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_dialog_alert_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_dialog_alert_qntm_alpha.png
new file mode 100644
index 0000000..10e0756
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_dialog_alert_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_find_next_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_find_next_qntm_alpha.png
new file mode 100644
index 0000000..e3a7e9e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_find_next_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_find_previous_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_find_previous_qntm_alpha.png
new file mode 100644
index 0000000..f9cf16c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_find_previous_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_copy_qntm_am_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_copy_qntm_am_alpha.png
new file mode 100644
index 0000000..7c3a58b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_copy_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_cut_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_cut_qntm_alpha.png
new file mode 100644
index 0000000..2200642
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_cut_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_find_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_find_qntm_alpha.png
new file mode 100644
index 0000000..d35b337
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_find_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_moreoverflow_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_moreoverflow_qntm_alpha.png
new file mode 100644
index 0000000..ff1759b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_moreoverflow_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_paste_qntm_am_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_paste_qntm_am_alpha.png
new file mode 100644
index 0000000..28c0ae0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_paste_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_search_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_search_qntm_alpha.png
new file mode 100644
index 0000000..cb295a3
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_search_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_selectall_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_selectall_qntm_alpha.png
new file mode 100644
index 0000000..6430d45
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_selectall_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_share_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_share_qntm_alpha.png
new file mode 100644
index 0000000..66f7d16
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_share_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/list_divider_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/list_divider_qntm_alpha.9.png
new file mode 100644
index 0000000..0fafd1a
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/list_divider_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/list_section_divider_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/list_section_divider_qntm_alpha.9.png
new file mode 100644
index 0000000..491fab9
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/list_section_divider_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/progress_primary_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/progress_primary_qntm_alpha.9.png
new file mode 100644
index 0000000..2d4eb3f
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/progress_primary_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/progress_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/progress_qntm_alpha.9.png
new file mode 100644
index 0000000..74a259b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/progress_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrollbar_handle_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/scrollbar_handle_qntm_alpha.9.png
new file mode 100644
index 0000000..c1c0622
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrollbar_handle_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_off_pressed_qntm_alpha.png b/core/res/res/drawable-xxhdpi/scrubber_control_off_pressed_qntm_alpha.png
new file mode 100644
index 0000000..0319bd8
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_off_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_off_qntm_alpha.png b/core/res/res/drawable-xxhdpi/scrubber_control_off_qntm_alpha.png
new file mode 100644
index 0000000..c11b0ae
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_on_pressed_qntm_alpha.png b/core/res/res/drawable-xxhdpi/scrubber_control_on_pressed_qntm_alpha.png
new file mode 100644
index 0000000..b46ee1c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_on_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_on_qntm_alpha.png b/core/res/res/drawable-xxhdpi/scrubber_control_on_qntm_alpha.png
new file mode 100644
index 0000000..cde797e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_primary_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/scrubber_primary_qntm_alpha.9.png
new file mode 100644
index 0000000..6a82af5
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrubber_primary_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/spinner_qntm_am_alpha.9.png b/core/res/res/drawable-xxhdpi/spinner_qntm_am_alpha.9.png
new file mode 100644
index 0000000..b8c78b5
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/spinner_qntm_am_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/switch_off_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/switch_off_qntm_alpha.9.png
new file mode 100644
index 0000000..9e234af
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/switch_off_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/switch_on_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/switch_on_qntm_alpha.9.png
new file mode 100644
index 0000000..b371eab
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/switch_on_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/switch_track_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/switch_track_qntm_alpha.9.png
new file mode 100644
index 0000000..74a259b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/switch_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/tab_indicator_normal_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/tab_indicator_normal_qntm_alpha.9.png
new file mode 100644
index 0000000..0a14025
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/tab_indicator_normal_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/tab_indicator_selected_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/tab_indicator_selected_qntm_alpha.9.png
new file mode 100644
index 0000000..20e291a
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/tab_indicator_selected_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/text_cursor_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/text_cursor_qntm_alpha.9.png
new file mode 100644
index 0000000..432c385
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/text_cursor_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/textfield_activated_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/textfield_activated_qntm_alpha.9.png
new file mode 100644
index 0000000..a22f352
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/textfield_activated_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/textfield_default_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/textfield_default_qntm_alpha.9.png
new file mode 100644
index 0000000..b0504e0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/textfield_default_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ab_transparent_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ab_transparent_quantum_dark.xml
index fde143f..9ac2fc0 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ab_transparent_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ab_transparent_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ab_transparent_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ab_transparent_quantum_light.xml
index fde143f..bc49848 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ab_transparent_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ab_transparent_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/activated_background_quantum_dark.xml
similarity index 68%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/activated_background_quantum_dark.xml
index fde143f..a9e3fea 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/activated_background_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,7 +15,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
+ <item android:state_activated="true" android:drawable="@color/control_activated_foreground_quantum_dark" />
+ <item android:drawable="@color/transparent" />
</selector>
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/activated_background_quantum_light.xml
similarity index 68%
rename from core/res/res/color/primary_text_nodisable_quantum_light.xml
rename to core/res/res/drawable/activated_background_quantum_light.xml
index fde143f..5d10ea2 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/activated_background_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,7 +15,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
+ <item android:state_activated="true" android:drawable="@color/control_activated_foreground_quantum_light" />
+ <item android:drawable="@color/transparent" />
</selector>
diff --git a/core/res/res/drawable/background_cache_hint_selector_quantum_dark.xml b/core/res/res/drawable/background_cache_hint_selector_quantum_dark.xml
index 7d64abc..ab66501 100644
--- a/core/res/res/drawable/background_cache_hint_selector_quantum_dark.xml
+++ b/core/res/res/drawable/background_cache_hint_selector_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/core/res/res/drawable/background_cache_hint_selector_quantum_light.xml b/core/res/res/drawable/background_cache_hint_selector_quantum_light.xml
index 3fc3483..fb940a9 100644
--- a/core/res/res/drawable/background_cache_hint_selector_quantum_light.xml
+++ b/core/res/res/drawable/background_cache_hint_selector_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/btn_borderless_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/btn_borderless_quantum_dark.xml
index fde143f..e1bff4f 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/btn_borderless_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,10 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<reveal xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@color/transparent" />
+ <item>
+ <nine-patch android:src="@drawable/btn_qntm_alpha"
+ android:tint="@color/btn_default_pressed_quantum_dark" />
+ </item>
+</reveal>
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/btn_borderless_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/btn_borderless_quantum_light.xml
index fde143f..e7a95b1 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/btn_borderless_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,10 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<reveal xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@color/transparent" />
+ <item>
+ <nine-patch android:src="@drawable/btn_qntm_alpha"
+ android:tint="@color/btn_default_pressed_quantum_light" />
+ </item>
+</reveal>
diff --git a/core/res/res/drawable/btn_check_quantum_dark.xml b/core/res/res/drawable/btn_check_quantum_dark.xml
new file mode 100644
index 0000000..a35bec4
--- /dev/null
+++ b/core/res/res/drawable/btn_check_quantum_dark.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true" android:state_pressed="true">
+ <bitmap android:src="@drawable/btn_check_on_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_checked="true">
+ <bitmap android:src="@drawable/btn_check_on_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_pressed="true">
+ <bitmap android:src="@drawable/btn_check_off_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item>
+ <bitmap android:src="@drawable/btn_check_off_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+</selector>
diff --git a/core/res/res/drawable/btn_check_quantum_light.xml b/core/res/res/drawable/btn_check_quantum_light.xml
new file mode 100644
index 0000000..8588fce
--- /dev/null
+++ b/core/res/res/drawable/btn_check_quantum_light.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true" android:state_pressed="true">
+ <bitmap android:src="@drawable/btn_check_on_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_checked="true">
+ <bitmap android:src="@drawable/btn_check_on_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_pressed="true">
+ <bitmap android:src="@drawable/btn_check_off_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item>
+ <bitmap android:src="@drawable/btn_check_off_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+</selector>
diff --git a/core/res/res/drawable/btn_color_quantum_dark.xml b/core/res/res/drawable/btn_color_quantum_dark.xml
new file mode 100644
index 0000000..5e44a78
--- /dev/null
+++ b/core/res/res/drawable/btn_color_quantum_dark.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<reveal xmlns:android="http://schemas.android.com/apk/res/android">
+ <item>
+ <selector>
+ <item android:state_enabled="false">
+ <nine-patch android:src="@drawable/btn_qntm_alpha"
+ android:tint="@color/btn_default_normal_quantum_light" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/btn_qntm_alpha"
+ android:tint="@color/theme_color_500" />
+ </item>
+ </selector>
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/btn_qntm_alpha"
+ android:tint="@color/theme_color_300" />
+ </item>
+</reveal>
diff --git a/core/res/res/drawable/btn_color_quantum_light.xml b/core/res/res/drawable/btn_color_quantum_light.xml
new file mode 100644
index 0000000..d6be958
--- /dev/null
+++ b/core/res/res/drawable/btn_color_quantum_light.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<reveal xmlns:android="http://schemas.android.com/apk/res/android">
+ <item>
+ <selector>
+ <item android:state_enabled="false">
+ <nine-patch android:src="@drawable/btn_qntm_alpha"
+ android:tint="@color/btn_default_normal_quantum_dark" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/btn_qntm_alpha"
+ android:tint="@color/theme_color_500" />
+ </item>
+ </selector>
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/btn_qntm_alpha"
+ android:tint="@color/theme_color_700" />
+ </item>
+</reveal>
diff --git a/core/res/res/drawable/btn_default_quantum_dark.xml b/core/res/res/drawable/btn_default_quantum_dark.xml
index 84b1090..7f0cca8 100644
--- a/core/res/res/drawable/btn_default_quantum_dark.xml
+++ b/core/res/res/drawable/btn_default_quantum_dark.xml
@@ -16,20 +16,11 @@
<reveal xmlns:android="http://schemas.android.com/apk/res/android">
<item>
- <selector>
- <item android:state_window_focused="false" android:state_enabled="true"
- android:drawable="@drawable/btn_default_normal_holo_dark" />
- <item android:state_window_focused="false" android:state_enabled="false"
- android:drawable="@drawable/btn_default_disabled_holo_dark" />
- <item android:state_focused="true" android:state_enabled="true"
- android:drawable="@drawable/btn_default_focused_holo_dark" />
- <item android:state_enabled="true"
- android:drawable="@drawable/btn_default_normal_holo_dark" />
- <item android:state_focused="true"
- android:drawable="@drawable/btn_default_disabled_focused_holo_dark" />
- <item
- android:drawable="@drawable/btn_default_disabled_holo_dark" />
- </selector>
+ <nine-patch android:src="@drawable/btn_qntm_alpha"
+ android:tint="@color/btn_default_normal_quantum_dark" />
</item>
- <item android:drawable="@drawable/btn_default_pressed_holo_dark" />
+ <item>
+ <nine-patch android:src="@drawable/btn_qntm_alpha"
+ android:tint="@color/btn_default_pressed_quantum_dark" />
+ </item>
</reveal>
diff --git a/core/res/res/drawable/btn_default_quantum_light.xml b/core/res/res/drawable/btn_default_quantum_light.xml
index b559198..e391a80 100644
--- a/core/res/res/drawable/btn_default_quantum_light.xml
+++ b/core/res/res/drawable/btn_default_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -16,20 +16,11 @@
<reveal xmlns:android="http://schemas.android.com/apk/res/android">
<item>
- <selector>
- <item android:state_window_focused="false" android:state_enabled="true"
- android:drawable="@drawable/btn_default_normal_holo_light" />
- <item android:state_window_focused="false" android:state_enabled="false"
- android:drawable="@drawable/btn_default_disabled_holo_light" />
- <item android:state_focused="true" android:state_enabled="true"
- android:drawable="@drawable/btn_default_focused_holo_light" />
- <item android:state_enabled="true"
- android:drawable="@drawable/btn_default_normal_holo_light" />
- <item android:state_focused="true"
- android:drawable="@drawable/btn_default_disabled_focused_holo_light" />
- <item
- android:drawable="@drawable/btn_default_disabled_holo_light" />
- </selector>
+ <nine-patch android:src="@drawable/btn_qntm_alpha"
+ android:tint="@color/btn_default_normal_quantum_light" />
</item>
- <item android:drawable="@drawable/btn_default_pressed_holo_light" />
+ <item>
+ <nine-patch android:src="@drawable/btn_qntm_alpha"
+ android:tint="@color/btn_default_pressed_quantum_light" />
+ </item>
</reveal>
diff --git a/core/res/res/drawable/btn_radio_quantum_dark.xml b/core/res/res/drawable/btn_radio_quantum_dark.xml
new file mode 100644
index 0000000..54f4f9a
--- /dev/null
+++ b/core/res/res/drawable/btn_radio_quantum_dark.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true" android:state_enabled="true" android:state_pressed="true">
+ <bitmap android:src="@drawable/btn_radio_on_pressed_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_checked="true">
+ <bitmap android:src="@drawable/btn_radio_on_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_enabled="true" android:state_pressed="true">
+ <bitmap android:src="@drawable/btn_radio_off_pressed_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item>
+ <bitmap android:src="@drawable/btn_radio_off_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+</selector>
diff --git a/core/res/res/drawable/btn_radio_quantum_light.xml b/core/res/res/drawable/btn_radio_quantum_light.xml
new file mode 100644
index 0000000..c1ace70
--- /dev/null
+++ b/core/res/res/drawable/btn_radio_quantum_light.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true" android:state_enabled="true" android:state_pressed="true">
+ <bitmap android:src="@drawable/btn_radio_on_pressed_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_checked="true">
+ <bitmap android:src="@drawable/btn_radio_on_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_enabled="true" android:state_pressed="true">
+ <bitmap android:src="@drawable/btn_radio_off_pressed_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item>
+ <bitmap android:src="@drawable/btn_radio_off_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+</selector>
diff --git a/core/res/res/drawable/btn_star_quantum_dark.xml b/core/res/res/drawable/btn_star_quantum_dark.xml
new file mode 100644
index 0000000..7b26a3c
--- /dev/null
+++ b/core/res/res/drawable/btn_star_quantum_dark.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true">
+ <bitmap android:src="@drawable/btn_star_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_pressed="true">
+ <bitmap android:src="@drawable/btn_star_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item>
+ <bitmap android:src="@drawable/btn_star_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+</selector>
diff --git a/core/res/res/drawable/btn_star_quantum_light.xml b/core/res/res/drawable/btn_star_quantum_light.xml
new file mode 100644
index 0000000..df2cc91
--- /dev/null
+++ b/core/res/res/drawable/btn_star_quantum_light.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true">
+ <bitmap android:src="@drawable/btn_star_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_pressed="true">
+ <bitmap android:src="@drawable/btn_star_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item>
+ <bitmap android:src="@drawable/btn_star_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+</selector>
diff --git a/core/res/res/drawable/edit_text_quantum_dark.xml b/core/res/res/drawable/edit_text_quantum_dark.xml
new file mode 100644
index 0000000..ea3fc52
--- /dev/null
+++ b/core/res/res/drawable/edit_text_quantum_dark.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_window_focused="false" android:state_enabled="true">
+ <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+ <item android:state_window_focused="false" android:state_enabled="false">
+ <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+ <item android:state_enabled="true" android:state_focused="true">
+ <nine-patch android:src="@drawable/textfield_activated_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_enabled="true" android:state_activated="true">
+ <nine-patch android:src="@drawable/textfield_activated_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_enabled="true">
+ <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+</selector>
diff --git a/core/res/res/drawable/edit_text_quantum_light.xml b/core/res/res/drawable/edit_text_quantum_light.xml
new file mode 100644
index 0000000..dd7fe53
--- /dev/null
+++ b/core/res/res/drawable/edit_text_quantum_light.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_window_focused="false" android:state_enabled="true">
+ <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+ <item android:state_window_focused="false" android:state_enabled="false">
+ <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+ <item android:state_enabled="true" android:state_focused="true">
+ <nine-patch android:src="@drawable/textfield_activated_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_enabled="true" android:state_activated="true">
+ <nine-patch android:src="@drawable/textfield_activated_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_enabled="true">
+ <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+</selector>
diff --git a/core/res/res/color/tertiary_text_quantum_dark.xml b/core/res/res/drawable/expander_group_quantum_dark.xml
similarity index 62%
rename from core/res/res/color/tertiary_text_quantum_dark.xml
rename to core/res/res/drawable/expander_group_quantum_dark.xml
index cb39565..7250e01 100644
--- a/core/res/res/color/tertiary_text_quantum_dark.xml
+++ b/core/res/res/drawable/expander_group_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,9 +15,12 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:color="#808080"/>
- <item android:state_window_focused="false" android:color="#808080"/>
- <item android:state_pressed="true" android:color="#808080"/>
- <item android:state_selected="true" android:color="@android:color/dim_foreground_holo_light"/>
- <item android:color="#808080"/>
+ <item android:state_expanded="true">
+ <nine-patch android:src="@drawable/expander_close_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/expander_open_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
</selector>
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/expander_group_quantum_light.xml
similarity index 61%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/expander_group_quantum_light.xml
index fde143f..62af983 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/expander_group_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,7 +15,12 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
+ <item android:state_expanded="true">
+ <nine-patch android:src="@drawable/expander_close_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/expander_open_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
</selector>
diff --git a/core/res/res/color/secondary_text_nodisable_quantum_dark.xml b/core/res/res/drawable/fastscroll_thumb_quantum_dark.xml
similarity index 62%
rename from core/res/res/color/secondary_text_nodisable_quantum_dark.xml
rename to core/res/res/drawable/fastscroll_thumb_quantum_dark.xml
index 3ab25a0..53c7fdd 100644
--- a/core/res/res/color/secondary_text_nodisable_quantum_dark.xml
+++ b/core/res/res/drawable/fastscroll_thumb_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,7 +15,12 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/dim_foreground_dark_inverse"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_dark_inverse"/>
- <item android:color="@android:color/dim_foreground_dark"/>
+ <item android:state_pressed="true">
+ <bitmap android:src="@drawable/fastscroll_thumb_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item>
+ <bitmap android:src="@drawable/fastscroll_thumb_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
</selector>
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/fastscroll_thumb_quantum_light.xml
similarity index 61%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/fastscroll_thumb_quantum_light.xml
index fde143f..3bc87e9 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/fastscroll_thumb_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,7 +15,12 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
+ <item android:state_pressed="true">
+ <bitmap android:src="@drawable/fastscroll_thumb_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item>
+ <bitmap android:src="@drawable/fastscroll_thumb_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
</selector>
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/fastscroll_track_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/fastscroll_track_quantum_dark.xml
index fde143f..0ae57d2 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/fastscroll_track_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/fastscroll_track_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/fastscroll_track_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/fastscroll_track_quantum_light.xml
index fde143f..627c079 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/fastscroll_track_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/fastscroll_track_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_ab_back_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_ab_back_quantum_dark.xml
index fde143f..628d53e 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_ab_back_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_ab_back_qntm_am_alpha"
+ android:autoMirrored="true"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_ab_back_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_ab_back_quantum_light.xml
index fde143f..01f5362 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_ab_back_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_ab_back_qntm_am_alpha"
+ android:autoMirrored="true"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_cab_done_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_cab_done_quantum_dark.xml
index fde143f..472996e 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_cab_done_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_cab_done_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_cab_done_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_cab_done_quantum_light.xml
index fde143f..d70a3f1 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_cab_done_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_cab_done_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_dialog_alert_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_dialog_alert_quantum_dark.xml
index fde143f..8b8cb0c 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_dialog_alert_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_dialog_alert_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_dialog_alert_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_dialog_alert_quantum_light.xml
index fde143f..8b8cb0c 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_dialog_alert_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_dialog_alert_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_find_next_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_find_next_quantum_dark.xml
index fde143f..929bea3 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_find_next_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_find_next_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_find_next_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_find_next_quantum_light.xml
index fde143f..9c20327 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_find_next_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_find_next_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_find_previous_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_find_previous_quantum_dark.xml
index fde143f..e944223 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_find_previous_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_find_previous_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_find_previous_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_find_previous_quantum_light.xml
index fde143f..b037094 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_find_previous_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_find_previous_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_copy_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_copy_quantum_dark.xml
index fde143f..285b752 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_copy_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_copy_qntm_am_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark"
+ android:autoMirrored="true" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_copy_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_copy_quantum_light.xml
index fde143f..a40b219 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_copy_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_copy_qntm_am_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light"
+ android:autoMirrored="true" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_cut_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_cut_quantum_dark.xml
index fde143f..563400b 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_cut_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_cut_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_cut_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_cut_quantum_light.xml
index fde143f..36c9442 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_cut_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_cut_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_find_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_find_quantum_dark.xml
index fde143f..8803463 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_find_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_find_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_find_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_find_quantum_light.xml
index fde143f..9b3bd73 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_find_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_find_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_moreoverflow_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_moreoverflow_quantum_dark.xml
index fde143f..9f39a68 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_moreoverflow_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_moreoverflow_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_moreoverflow_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_moreoverflow_quantum_light.xml
index fde143f..e15eaec 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_moreoverflow_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_moreoverflow_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_paste_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_paste_quantum_dark.xml
index fde143f..7033404 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_paste_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_paste_qntm_am_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark"
+ android:autoMirrored="true" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_paste_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_paste_quantum_light.xml
index fde143f..155ec34 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_paste_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_paste_qntm_am_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light"
+ android:autoMirrored="true" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_search_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_search_quantum_dark.xml
index fde143f..1c6efcd 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_search_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_search_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_search_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_search_quantum_light.xml
index fde143f..ba6efb6 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_search_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_search_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_selectall_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_selectall_quantum_dark.xml
index fde143f..c1d3e69 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_selectall_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_selectall_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_selectall_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_selectall_quantum_light.xml
index fde143f..4de8962 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_selectall_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_selectall_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_share_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_share_quantum_dark.xml
index fde143f..a7c5afc 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_share_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_share_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/ic_menu_share_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/ic_menu_share_quantum_light.xml
index fde143f..9257c25 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/ic_menu_share_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_share_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/item_background_borderless_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/item_background_borderless_quantum_dark.xml
index fde143f..1caee4e 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/item_background_borderless_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,5 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/lighter_gray" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/item_background_borderless_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/item_background_borderless_quantum_light.xml
index fde143f..ecf7dfb 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/item_background_borderless_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,5 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/darker_gray" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/list_divider_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/list_divider_quantum_dark.xml
index fde143f..9d05b2f 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/list_divider_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/list_divider_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/list_divider_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/list_divider_quantum_light.xml
index fde143f..d312e2d 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/list_divider_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/list_divider_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/list_section_divider_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/list_section_divider_quantum_dark.xml
index fde143f..6344c7e 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/list_section_divider_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/list_section_divider_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/list_section_divider_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/list_section_divider_quantum_light.xml
index fde143f..98ede38 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/list_section_divider_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/list_section_divider_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/drawable/list_selector_quantum_dark.xml b/core/res/res/drawable/list_selector_quantum_dark.xml
deleted file mode 100644
index fea55a8..0000000
--- a/core/res/res/drawable/list_selector_quantum_dark.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<reveal xmlns:android="http://schemas.android.com/apk/res/android">
- <selector>
- <item android:state_window_focused="false" android:drawable="@color/transparent" />
- <item android:state_focused="true" android:state_enabled="false"
- android:drawable="@drawable/list_selector_disabled_holo_dark" />
- <item android:state_focused="true" android:drawable="@drawable/list_focused_holo" />
- </selector>
- <selector>
- <item android:state_window_focused="false" android:drawable="@color/transparent" />
- <item android:state_focused="true" android:state_enabled="false"
- android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_dark" />
- <item android:state_focused="true" android:state_pressed="true"
- android:drawable="@drawable/list_selector_background_transition_holo_dark" />
- <item android:state_focused="false" android:state_pressed="true"
- android:drawable="@drawable/list_selector_background_transition_holo_dark" />
- </selector>
-</reveal>
diff --git a/core/res/res/drawable/list_selector_quantum_light.xml b/core/res/res/drawable/list_selector_quantum_light.xml
deleted file mode 100644
index 1e32eac..0000000
--- a/core/res/res/drawable/list_selector_quantum_light.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<reveal xmlns:android="http://schemas.android.com/apk/res/android">
- <selector>
- <item android:state_window_focused="false" android:drawable="@color/transparent" />
- <item android:state_focused="true" android:state_enabled="false"
- android:drawable="@drawable/list_selector_disabled_holo_light" />
- <item android:state_focused="true" android:drawable="@drawable/list_focused_holo" />
- </selector>
- <selector>
- <item android:state_window_focused="false" android:drawable="@color/transparent" />
- <item android:state_focused="true" android:state_enabled="false"
- android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_light" />
- <item android:state_focused="true" android:state_pressed="true"
- android:drawable="@drawable/list_selector_background_transition_holo_light" />
- <item android:state_focused="false" android:state_pressed="true"
- android:drawable="@drawable/list_selector_background_transition_holo_light" />
- </selector>
-</reveal>
diff --git a/core/res/res/drawable/progress_horizontal_quantum_dark.xml b/core/res/res/drawable/progress_horizontal_quantum_dark.xml
new file mode 100644
index 0000000..fb4b67e
--- /dev/null
+++ b/core/res/res/drawable/progress_horizontal_quantum_dark.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@id/background">
+ <nine-patch android:src="@drawable/progress_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+ <item android:id="@id/secondaryProgress">
+ <scale android:scaleWidth="100%">
+ <nine-patch android:src="@drawable/progress_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </scale>
+ </item>
+ <item android:id="@id/progress">
+ <scale android:scaleWidth="100%">
+ <nine-patch android:src="@drawable/progress_primary_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </scale>
+ </item>
+</layer-list>
diff --git a/core/res/res/drawable/progress_horizontal_quantum_light.xml b/core/res/res/drawable/progress_horizontal_quantum_light.xml
new file mode 100644
index 0000000..1ceb2e2
--- /dev/null
+++ b/core/res/res/drawable/progress_horizontal_quantum_light.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:id="@id/background">
+ <nine-patch android:src="@drawable/progress_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+ <item android:id="@id/secondaryProgress">
+ <scale android:scaleWidth="100%">
+ <nine-patch android:src="@drawable/progress_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </scale>
+ </item>
+ <item android:id="@id/progress">
+ <scale android:scaleWidth="100%">
+ <nine-patch android:src="@drawable/progress_primary_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </scale>
+ </item>
+</layer-list>
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/scrollbar_handle_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/scrollbar_handle_quantum_dark.xml
index fde143f..2d4e37d 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/scrollbar_handle_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/scrollbar_handle_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/scrollbar_handle_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/scrollbar_handle_quantum_light.xml
index fde143f..d4d4b8d 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/scrollbar_handle_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/scrollbar_handle_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
diff --git a/core/res/res/drawable/scrubber_control_selector_quantum_dark.xml b/core/res/res/drawable/scrubber_control_selector_quantum_dark.xml
new file mode 100644
index 0000000..521bcca
--- /dev/null
+++ b/core/res/res/drawable/scrubber_control_selector_quantum_dark.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="true" android:state_pressed="true">
+ <bitmap android:src="@drawable/scrubber_control_on_pressed_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item>
+ <bitmap android:src="@drawable/scrubber_control_on_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+</selector>
diff --git a/core/res/res/drawable/scrubber_control_selector_quantum_light.xml b/core/res/res/drawable/scrubber_control_selector_quantum_light.xml
new file mode 100644
index 0000000..8d009b7
--- /dev/null
+++ b/core/res/res/drawable/scrubber_control_selector_quantum_light.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="true" android:state_pressed="true">
+ <bitmap android:src="@drawable/scrubber_control_on_pressed_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item>
+ <bitmap android:src="@drawable/scrubber_control_on_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+</selector>
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/scrubber_progress_horizontal_quantum_dark.xml
similarity index 61%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/scrubber_progress_horizontal_quantum_dark.xml
index fde143f..fa0d631 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/scrubber_progress_horizontal_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,7 +15,12 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
+ <item android:state_pressed="true">
+ <bitmap android:src="@drawable/scrubber_primary_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item>
+ <bitmap android:src="@drawable/scrubber_primary_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
</selector>
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/scrubber_progress_horizontal_quantum_light.xml
similarity index 61%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/scrubber_progress_horizontal_quantum_light.xml
index fde143f..053f542 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/scrubber_progress_horizontal_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,7 +15,12 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
+ <item android:state_pressed="true">
+ <bitmap android:src="@drawable/scrubber_primary_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item>
+ <bitmap android:src="@drawable/scrubber_primary_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
</selector>
diff --git a/core/res/res/drawable/spinner_background_quantum_dark.xml b/core/res/res/drawable/spinner_background_quantum_dark.xml
new file mode 100644
index 0000000..d1e7407
--- /dev/null
+++ b/core/res/res/drawable/spinner_background_quantum_dark.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:autoMirrored="true">
+ <item android:state_checked="true">
+ <nine-patch android:src="@drawable/spinner_qntm_am_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_pressed="true">
+ <nine-patch android:src="@drawable/spinner_qntm_am_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/spinner_qntm_am_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+</selector>
diff --git a/core/res/res/drawable/spinner_background_quantum_light.xml b/core/res/res/drawable/spinner_background_quantum_light.xml
new file mode 100644
index 0000000..b01628d
--- /dev/null
+++ b/core/res/res/drawable/spinner_background_quantum_light.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:autoMirrored="true">
+ <item android:state_checked="true">
+ <nine-patch android:src="@drawable/spinner_qntm_am_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_pressed="true">
+ <nine-patch android:src="@drawable/spinner_qntm_am_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/spinner_qntm_am_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+</selector>
diff --git a/core/res/res/drawable/switch_inner_quantum_dark.xml b/core/res/res/drawable/switch_inner_quantum_dark.xml
new file mode 100644
index 0000000..927a55e
--- /dev/null
+++ b/core/res/res/drawable/switch_inner_quantum_dark.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true" android:state_pressed="true">
+ <nine-patch android:src="@drawable/switch_on_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_checked="true">
+ <nine-patch android:src="@drawable/switch_on_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_pressed="true">
+ <nine-patch android:src="@drawable/switch_off_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/switch_off_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+</selector>
diff --git a/core/res/res/drawable/switch_inner_quantum_light.xml b/core/res/res/drawable/switch_inner_quantum_light.xml
new file mode 100644
index 0000000..b5aa47b
--- /dev/null
+++ b/core/res/res/drawable/switch_inner_quantum_light.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_checked="true" android:state_pressed="true">
+ <nine-patch android:src="@drawable/switch_on_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_checked="true">
+ <nine-patch android:src="@drawable/switch_on_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_pressed="true">
+ <nine-patch android:src="@drawable/switch_off_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/switch_off_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+</selector>
diff --git a/core/res/res/color/secondary_text_nodisable_quantum_dark.xml b/core/res/res/drawable/switch_track_quantum_dark.xml
similarity index 62%
copy from core/res/res/color/secondary_text_nodisable_quantum_dark.xml
copy to core/res/res/drawable/switch_track_quantum_dark.xml
index 3ab25a0..c018bd2 100644
--- a/core/res/res/color/secondary_text_nodisable_quantum_dark.xml
+++ b/core/res/res/drawable/switch_track_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,7 +15,12 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/dim_foreground_dark_inverse"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_dark_inverse"/>
- <item android:color="@android:color/dim_foreground_dark"/>
+ <item android:state_checked="true">
+ <nine-patch android:src="@drawable/switch_track_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/switch_track_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
</selector>
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/switch_track_quantum_light.xml
similarity index 61%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/switch_track_quantum_light.xml
index fde143f..ab87a57 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/switch_track_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -15,7 +15,12 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
+ <item android:state_checked="true">
+ <nine-patch android:src="@drawable/switch_track_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/switch_track_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
</selector>
diff --git a/core/res/res/drawable/tab_indicator_quantum_dark.xml b/core/res/res/drawable/tab_indicator_quantum_dark.xml
new file mode 100644
index 0000000..9b57c33
--- /dev/null
+++ b/core/res/res/drawable/tab_indicator_quantum_dark.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_selected="true" android:state_pressed="true">
+ <nine-patch android:src="@drawable/tab_indicator_selected_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_selected="true" android:state_focused="true">
+ <nine-patch android:src="@drawable/tab_indicator_selected_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_selected="true">
+ <nine-patch android:src="@drawable/tab_indicator_selected_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+
+ <item android:state_pressed="true">
+ <nine-patch android:src="@drawable/tab_indicator_normal_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item android:state_focused="true">
+ <nine-patch android:src="@drawable/tab_indicator_normal_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/tab_indicator_normal_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_dark" />
+ </item>
+</selector>
diff --git a/core/res/res/drawable/tab_indicator_quantum_light.xml b/core/res/res/drawable/tab_indicator_quantum_light.xml
new file mode 100644
index 0000000..371322a
--- /dev/null
+++ b/core/res/res/drawable/tab_indicator_quantum_light.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_selected="true" android:state_pressed="true">
+ <nine-patch android:src="@drawable/tab_indicator_selected_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_selected="true" android:state_focused="true">
+ <nine-patch android:src="@drawable/tab_indicator_selected_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_selected="true">
+ <nine-patch android:src="@drawable/tab_indicator_selected_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+
+ <item android:state_pressed="true">
+ <nine-patch android:src="@drawable/tab_indicator_normal_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item android:state_focused="true">
+ <nine-patch android:src="@drawable/tab_indicator_normal_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
+ </item>
+ <item>
+ <nine-patch android:src="@drawable/tab_indicator_normal_qntm_alpha"
+ android:tint="@color/control_normal_foreground_quantum_light" />
+ </item>
+</selector>
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/text_cursor_quantum_dark.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/text_cursor_quantum_dark.xml
index fde143f..bd0d66f 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/text_cursor_quantum_dark.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/text_cursor_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_dark" />
diff --git a/core/res/res/color/primary_text_nodisable_quantum_light.xml b/core/res/res/drawable/text_cursor_quantum_light.xml
similarity index 60%
copy from core/res/res/color/primary_text_nodisable_quantum_light.xml
copy to core/res/res/drawable/text_cursor_quantum_light.xml
index fde143f..0ec7f01 100644
--- a/core/res/res/color/primary_text_nodisable_quantum_light.xml
+++ b/core/res/res/drawable/text_cursor_quantum_light.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 The Android Open Source Project
+<!-- Copyright (C) 2014 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_selected="true" android:color="@android:color/bright_foreground_light"/>
- <item android:state_activated="true" android:color="@android:color/bright_foreground_light"/>
- <item android:color="@android:color/bright_foreground_light"/>
-</selector>
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/text_cursor_qntm_alpha"
+ android:tint="@color/control_activated_foreground_quantum_light" />
diff --git a/core/res/res/layout/number_picker_with_selector_wheel_micro.xml b/core/res/res/layout/number_picker_with_selector_wheel_micro.xml
new file mode 100644
index 0000000..a1c09214
--- /dev/null
+++ b/core/res/res/layout/number_picker_with_selector_wheel_micro.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2012, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <view class="android.widget.NumberPicker$CustomEditText"
+ android:textAppearance="?android:attr/textAppearanceLarge"
+ android:id="@+id/numberpicker_input"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:singleLine="true"
+ android:background="@null" />
+
+</merge>
diff --git a/core/res/res/layout/screen_action_bar.xml b/core/res/res/layout/screen_action_bar.xml
index 7b9a20b..3265736 100644
--- a/core/res/res/layout/screen_action_bar.xml
+++ b/core/res/res/layout/screen_action_bar.xml
@@ -23,7 +23,8 @@
android:id="@+id/action_bar_overlay_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:splitMotionEvents="false">
+ android:splitMotionEvents="false"
+ android:theme="?attr/actionBarTheme">
<FrameLayout android:id="@android:id/content"
android:layout_width="match_parent"
android:layout_height="match_parent" />
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 9156057..c92ecb3 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1241,7 +1241,7 @@
<string name="time_picker_dialog_title" msgid="8349362623068819295">"ጊዜ አዘጋጅ"</string>
<string name="date_picker_dialog_title" msgid="5879450659453782278">"ውሂብ አዘጋጅ"</string>
<string name="date_time_set" msgid="5777075614321087758">"አዘጋጅ"</string>
- <string name="date_time_done" msgid="2507683751759308828">"ተጠናቋል"</string>
+ <string name="date_time_done" msgid="2507683751759308828">"ተከናውኗል"</string>
<string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"አዲስ፦ "</font></string>
<string name="perms_description_app" msgid="5139836143293299417">"በ<xliff:g id="APP_NAME">%1$s</xliff:g> የቀረበ።"</string>
<string name="no_permissions" msgid="7283357728219338112">"ምንም ፍቃዶች አይጠየቁም"</string>
diff --git a/core/res/res/values-mcc440-mnc20/config.xml b/core/res/res/values-mcc440-mnc20/config.xml
index ba709fa..62001d9 100644
--- a/core/res/res/values-mcc440-mnc20/config.xml
+++ b/core/res/res/values-mcc440-mnc20/config.xml
@@ -23,6 +23,6 @@
<!-- Configure mobile network MTU. Carrier specific value is set here.
-->
- <integer name="config_mobile_mtu">1340</integer>
+ <integer name="config_mobile_mtu">1422</integer>
</resources>
diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml
index d1fa082..f01f10e 100644
--- a/core/res/res/values/arrays.xml
+++ b/core/res/res/values/arrays.xml
@@ -77,8 +77,6 @@
<item>@drawable/btn_default_disabled_focused_holo_dark</item>
<item>@drawable/btn_default_holo_dark</item>
<item>@drawable/btn_default_holo_light</item>
- <item>@drawable/btn_default_quantum_dark</item>
- <item>@drawable/btn_default_quantum_light</item>
<item>@drawable/btn_star_off_normal_holo_light</item>
<item>@drawable/btn_star_on_normal_holo_light</item>
<item>@drawable/btn_star_on_disabled_holo_light</item>
@@ -136,8 +134,6 @@
<item>@drawable/expander_group_holo_light</item>
<item>@drawable/list_selector_holo_dark</item>
<item>@drawable/list_selector_holo_light</item>
- <item>@drawable/list_selector_quantum_light</item>
- <item>@drawable/list_selector_quantum_dark</item>
<item>@drawable/list_section_divider_holo_light</item>
<item>@drawable/list_section_divider_holo_dark</item>
<item>@drawable/menu_hardkey_panel_holo_dark</item>
@@ -263,8 +259,6 @@
<item>@drawable/ab_solid_shadow_holo</item>
<item>@drawable/item_background_holo_dark</item>
<item>@drawable/item_background_holo_light</item>
- <item>@drawable/item_background_quantum_light</item>
- <item>@drawable/item_background_quantum_dark</item>
<item>@drawable/fastscroll_thumb_holo</item>
<item>@drawable/fastscroll_thumb_pressed_holo</item>
<item>@drawable/fastscroll_thumb_default_holo</item>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 42fa106..039bd07 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -673,6 +673,8 @@
<!-- Action bar styles -->
<!-- =================== -->
<eat-comment />
+ <!-- Theme override for the Action Bar -->
+ <attr name="actionBarTheme" format="reference" />
<!-- Default style for tabs within an action bar -->
<attr name="actionBarTabStyle" format="reference" />
<attr name="actionBarTabBarStyle" format="reference" />
diff --git a/core/res/res/values/colors_quantum.xml b/core/res/res/values/colors_quantum.xml
index b623263..c8083f4 100644
--- a/core/res/res/values/colors_quantum.xml
+++ b/core/res/res/values/colors_quantum.xml
@@ -15,34 +15,150 @@
-->
<resources>
- <color name="background_quantum_dark">#ff000000</color>
- <color name="background_quantum_light">#fff3f3f3</color>
+ <color name="background_quantum_dark">@color/black</color>
+ <color name="background_quantum_light">@color/quantum_grey_50</color>
+ <color name="secondary_background_quantum_dark">@color/quantum_grey_700</color>
+ <color name="secondary_background_quantum_light">@color/quantum_grey_100</color>
<color name="bright_foreground_quantum_dark">@color/background_quantum_light</color>
<color name="bright_foreground_quantum_light">@color/background_quantum_dark</color>
- <color name="bright_foreground_disabled_quantum_dark">#ff4c4c4c</color>
- <color name="bright_foreground_disabled_quantum_light">#ffb2b2b2</color>
+ <!-- TODO: This is 50% alpha black -->
+ <color name="bright_foreground_disabled_quantum_dark">#80000000</color>
+ <!-- TODO: This is 50% alpha grey_50 -->
+ <color name="bright_foreground_disabled_quantum_light">#80fafafa</color>
<color name="bright_foreground_inverse_quantum_dark">@color/bright_foreground_quantum_light</color>
<color name="bright_foreground_inverse_quantum_light">@color/bright_foreground_quantum_dark</color>
- <color name="dim_foreground_quantum_dark">#bebebe</color>
- <color name="dim_foreground_quantum_light">#323232</color>
+ <color name="dim_foreground_quantum_dark">#ffbebebe</color>
+ <color name="dim_foreground_quantum_light">#ff323232</color>
<color name="dim_foreground_disabled_quantum_dark">#80bebebe</color>
<color name="dim_foreground_disabled_quantum_light">#80323232</color>
- <color name="hint_foreground_quantum_dark">#808080</color>
- <color name="hint_foreground_quantum_light">#808080</color>
- <color name="highlighted_text_quantum_dark">#6633b5e5</color>
- <color name="highlighted_text_quantum_light">#6633b5e5</color>
+ <!-- TODO: These should be theme attributes. -->
+ <color name="control_normal_foreground_quantum_light">@color/secondary_text_quantum_light</color>
+ <color name="control_activated_foreground_quantum_light">@color/quantum_teal_700</color>
- <color name="timepicker_default_background_quantum_dark">#ff303030</color>
- <color name="timepicker_default_background_quantum_light">@color/white</color>
- <color name="timepicker_default_text_color_quantum_dark">@color/white</color>
- <color name="timepicker_default_text_color_quantum_light">#8c8c8c</color>
- <color name="timepicker_default_disabled_color_quantum_dark">#7f08c8c8</color>
- <color name="timepicker_default_disabled_color_quantum_light">#7f000000</color>
- <color name="timepicker_default_ampm_selected_background_color_quantum_dark">@color/holo_blue_light</color>
- <color name="timepicker_default_ampm_selected_background_color_quantum_light">@color/holo_blue_light</color>
+ <!-- TODO: These should be theme attributes. -->
+ <color name="control_normal_foreground_quantum_dark">@color/secondary_text_quantum_dark</color>
+ <color name="control_activated_foreground_quantum_dark">@color/quantum_lime_A200</color>
+
+ <!-- TODO: These should be theme attributes. -->
+ <color name="btn_default_normal_quantum_light">@color/quantum_grey_300</color>
+ <color name="btn_default_pressed_quantum_light">@color/quantum_grey_500</color>
+
+ <!-- TODO: These should be theme attributes. -->
+ <color name="btn_default_normal_quantum_dark">@color/quantum_grey_700</color>
+ <color name="btn_default_pressed_quantum_dark">@color/quantum_grey_500</color>
+
+ <color name="hint_foreground_quantum_dark">@color/bright_foreground_disabled_quantum_dark</color>
+ <color name="hint_foreground_quantum_light">@color/bright_foreground_disabled_quantum_light</color>
+ <!-- TODO: This is 40% alpha lime_A200 -->
+ <color name="highlighted_text_quantum_dark">#66eeff41</color>
+ <!-- TODO: This is 40% alpha teal_700 -->
+ <color name="highlighted_text_quantum_light">#660097a7</color>
+
+ <!-- TODO: These should all be pushed into a TimePicker widget style. -->
+ <color name="timepicker_default_background_quantum_dark">@color/background_quantum_dark</color>
+ <color name="timepicker_default_background_quantum_light">@color/background_quantum_light</color>
+ <color name="timepicker_default_text_color_quantum_dark">@color/bright_foreground_quantum_dark</color>
+ <color name="timepicker_default_text_color_quantum_light">@color/bright_foreground_quantum_light</color>
+ <color name="timepicker_default_disabled_color_quantum_dark">@color/bright_foreground_disabled_quantum_dark</color>
+ <color name="timepicker_default_disabled_color_quantum_light">@color/bright_foreground_disabled_quantum_light</color>
+ <color name="timepicker_default_ampm_selected_background_color_quantum_dark">@color/control_activated_foreground_quantum_dark</color>
+ <color name="timepicker_default_ampm_selected_background_color_quantum_light">@color/control_activated_foreground_quantum_light</color>
<color name="timepicker_default_ampm_unselected_background_color_quantum_dark">@color/transparent</color>
<color name="timepicker_default_ampm_unselected_background_color_quantum_light">@color/white</color>
+
+ <!-- Primary & accent colors -->
+
+ <color name="quantum_red_100">#fff4c7c3</color>
+ <color name="quantum_red_300">#ffe67c73</color>
+ <color name="quantum_red_500">#ffdb4437</color>
+ <color name="quantum_red_700">#ffc53929</color>
+ <color name="quantum_red_A200">#ffff5252</color>
+ <color name="quantum_red_A400">#ffff1744</color>
+
+ <color name="quantum_blue_100">#ffc6dafc</color>
+ <color name="quantum_blue_300">#ff7baaf7</color>
+ <color name="quantum_blue_500">#ff4285f4</color>
+ <color name="quantum_blue_700">#ff3367d6</color>
+ <color name="quantum_blue_A200">#ff448aff</color>
+ <color name="quantum_blue_A400">#ff2979ff</color>
+
+ <color name="quantum_teal_100">#ffb2ebf2</color>
+ <color name="quantum_teal_300">#ff4dd0e1</color>
+ <color name="quantum_teal_500">#ff00bcd4</color>
+ <color name="quantum_teal_700">#ff0097a7</color>
+ <color name="quantum_teal_A200">#ff18ffff</color>
+ <color name="quantum_teal_A400">#ff00e5ff</color>
+
+ <color name="quantum_green_100">#ffb7e1cd</color>
+ <color name="quantum_green_300">#ff57bb8a</color>
+ <color name="quantum_green_500">#ff0f9d58</color>
+ <color name="quantum_green_700">#ff0b8043</color>
+ <color name="quantum_green_A200">#ff69f0ae</color>
+ <color name="quantum_green_A400">#ff00e676</color>
+
+ <color name="quantum_lime_100">#fff0f4c3</color>
+ <color name="quantum_lime_300">#ffdce775</color>
+ <color name="quantum_lime_500">#ffcddc39</color>
+ <color name="quantum_lime_700">#ffafb42b</color>
+ <color name="quantum_lime_A200">#ffeeff41</color>
+ <color name="quantum_lime_A400">#ffc6ff00</color>
+
+ <color name="quantum_yellow_100">#fffce8b2</color>
+ <color name="quantum_yellow_300">#fff7cb4d</color>
+ <color name="quantum_yellow_500">#fff4b400</color>
+ <color name="quantum_yellow_700">#fff09300</color>
+ <color name="quantum_yellow_A200">#ffffcd40</color>
+ <color name="quantum_yellow_A400">#ffffbc00</color>
+
+ <color name="quantum_orange_100">#ffffe0b2</color>
+ <color name="quantum_orange_300">#ffffb74d</color>
+ <color name="quantum_orange_500">#ffff9800</color>
+ <color name="quantum_orange_700">#fff57c00</color>
+ <color name="quantum_orange_A200">#ffffab40</color>
+ <color name="quantum_orange_A400">#ffff9100</color>
+
+ <color name="quantum_deep_orange_100">#fff4c7c3</color>
+ <color name="quantum_deep_orange_300">#ffe67c73</color>
+ <color name="quantum_deep_orange_500">#ffff5722</color>
+ <color name="quantum_deep_orange_700">#ffc53929</color>
+ <color name="quantum_deep_orange_A200">#ffff5252</color>
+ <color name="quantum_deep_orange_A400">#ffff1744</color>
+
+ <!-- Neutral colors -->
+
+ <color name="quantum_grey_50">#fffafafa</color>
+ <color name="quantum_grey_100">#fff5f5f5</color>
+ <color name="quantum_grey_300">#ffeeeeee</color>
+ <color name="quantum_grey_500">#ffa3a3a3</color>
+ <color name="quantum_grey_700">#ff717171</color>
+
+ <color name="quantum_blue_grey_50">#ffeceff1</color>
+ <color name="quantum_blue_grey_100">#ffcfd8dc</color>
+ <color name="quantum_blue_grey_300">#ff90a4ae</color>
+ <color name="quantum_blue_grey_500">#ff607d8b</color>
+ <color name="quantum_blue_grey_700">#ff455a64</color>
+
+ <color name="quantum_brown_100">#ffd7ccc8</color>
+ <color name="quantum_brown_300">#ffa1887f</color>
+ <color name="quantum_brown_500">#ff795548</color>
+ <color name="quantum_brown_700">#ff5d4037</color>
+
+ <!-- Text & foreground colors -->
+
+ <color name="primary_text_quantum_light">#ff000000</color>
+ <color name="secondary_text_quantum_light">#de000000</color>
+ <color name="tertiary_text_quantum_light">#8a000000</color>
+
+ <color name="primary_text_quantum_dark">#ffffffff</color>
+ <color name="secondary_text_quantum_dark">#deffffff</color>
+ <color name="tertiary_text_quantum_dark">#8affffff</color>
+
+ <!-- "Theme" colors to be replaced by attrs when available -->
+ <color name="theme_color_100">@color/quantum_teal_100</color>
+ <color name="theme_color_300">@color/quantum_teal_300</color>
+ <color name="theme_color_500">@color/quantum_teal_500</color>
+ <color name="theme_color_700">@color/quantum_teal_700</color>
</resources>
diff --git a/core/res/res/values/dimens_quantum.xml b/core/res/res/values/dimens_quantum.xml
new file mode 100644
index 0000000..3913752
--- /dev/null
+++ b/core/res/res/values/dimens_quantum.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+
+ <!-- Default height of an action bar. -->
+ <dimen name="action_bar_default_height_quantum">56dp</dimen>
+ <!-- Vertical padding around action bar icons. -->
+ <dimen name="action_bar_icon_vertical_padding_quantum">16dp</dimen>
+ <!-- Text size for action bar titles -->
+ <dimen name="action_bar_title_text_size_quantum">20sp</dimen>
+ <!-- Text size for action bar subtitles -->
+ <dimen name="action_bar_subtitle_text_size_quantum">16sp</dimen>
+ <!-- Top margin for action bar subtitles -->
+ <dimen name="action_bar_subtitle_top_margin_quantum">-3dp</dimen>
+ <!-- Bottom margin for action bar subtitles -->
+ <dimen name="action_bar_subtitle_bottom_margin_quantum">5dp</dimen>
+
+ <dimen name="text_size_display_4_quantum">112sp</dimen>
+ <dimen name="text_size_display_3_quantum">56sp</dimen>
+ <dimen name="text_size_display_2_quantum">45sp</dimen>
+ <dimen name="text_size_display_1_quantum">34sp</dimen>
+ <dimen name="text_size_headline_quantum">24sp</dimen>
+ <dimen name="text_size_title_quantum">20sp</dimen>
+ <dimen name="text_size_subhead_quantum">16sp</dimen>
+ <dimen name="text_size_body_2_quantum">14sp</dimen>
+ <dimen name="text_size_body_1_quantum">14sp</dimen>
+ <dimen name="text_size_caption_quantum">12sp</dimen>
+ <dimen name="text_size_menu_quantum">14sp</dimen>
+ <dimen name="text_size_button_quantum">14sp</dimen>
+
+</resources>
diff --git a/core/res/res/values/donottranslate_quantum.xml b/core/res/res/values/donottranslate_quantum.xml
new file mode 100644
index 0000000..83cc4e5
--- /dev/null
+++ b/core/res/res/values/donottranslate_quantum.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<resources>
+
+ <string name="font_family_display_4_quantum">sans-serif-light</string>
+ <string name="font_family_display_3_quantum">sans-serif</string>
+ <string name="font_family_display_2_quantum">sans-serif</string>
+ <string name="font_family_display_1_quantum">sans-serif</string>
+ <string name="font_family_headline_quantum">sans-serif</string>
+ <string name="font_family_title_quantum">sans-serif-medium</string>
+ <string name="font_family_subhead_quantum">sans-serif</string>
+ <string name="font_family_body_2_quantum">sans-serif-medium</string>
+ <string name="font_family_body_1_quantum">sans-serif</string>
+ <string name="font_family_caption_quantum">sans-serif</string>
+ <string name="font_family_menu_quantum">sans-serif-medium</string>
+ <string name="font_family_button_quantum">sans-serif</string>
+
+</resources>
diff --git a/core/res/res/values/styles_micro.xml b/core/res/res/values/styles_micro.xml
index 2fd283e..b368b65 100644
--- a/core/res/res/values/styles_micro.xml
+++ b/core/res/res/values/styles_micro.xml
@@ -19,4 +19,15 @@
<style name="Widget.Micro.TextView">
<item name="android:fontFamily">sans-serif-condensed</item>
</style>
+
+ <style name="Widget.Micro.NumberPicker">
+ <item name="android:internalLayout">@android:layout/number_picker_with_selector_wheel_micro</item>
+ <item name="android:solidColor">@android:color/transparent</item>
+ <item name="android:selectionDivider">@android:drawable/numberpicker_selection_divider</item>
+ <item name="android:selectionDividerHeight">0dip</item>
+ <item name="android:selectionDividersDistance">0dip</item>
+ <item name="android:internalMinWidth">64dip</item>
+ <item name="android:internalMaxHeight">180dip</item>
+ <item name="virtualButtonPressedDrawable">?android:attr/selectableItemBackground</item>
+ </style>
</resources>
diff --git a/core/res/res/values/styles_quantum.xml b/core/res/res/values/styles_quantum.xml
index df850a7..44cdb5f 100644
--- a/core/res/res/values/styles_quantum.xml
+++ b/core/res/res/values/styles_quantum.xml
@@ -88,47 +88,48 @@
<!-- Begin Quantum theme styles -->
- <!-- Text Styles -->
+ <!-- Text styles -->
+
<style name="TextAppearance.Quantum" parent="TextAppearance"/>
<style name="TextAppearance.Quantum.Inverse" parent="TextAppearance.Inverse">
- <item name="textColor">?textColorPrimaryInverse</item>
- <item name="textColorHint">?textColorHintInverse</item>
- <item name="textColorHighlight">?textColorHighlightInverse</item>
- <item name="textColorLink">?textColorLinkInverse</item>
+ <item name="textColor">?attr/textColorPrimaryInverse</item>
+ <item name="textColorHint">?attr/textColorHintInverse</item>
+ <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+ <item name="textColorLink">?attr/textColorLinkInverse</item>
</style>
<style name="TextAppearance.Quantum.Large" parent="TextAppearance.Large"/>
+ <style name="TextAppearance.Quantum.Large.Inverse">
+ <item name="textColor">?attr/textColorPrimaryInverse</item>
+ <item name="textColorHint">?attr/textColorHintInverse</item>
+ <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+ <item name="textColorLink">?attr/textColorLinkInverse</item>
+ </style>
+
<style name="TextAppearance.Quantum.Medium" parent="TextAppearance.Medium"/>
+ <style name="TextAppearance.Quantum.Medium.Inverse">
+ <item name="textColor">?attr/textColorSecondaryInverse</item>
+ <item name="textColorHint">?attr/textColorHintInverse</item>
+ <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+ <item name="textColorLink">?attr/textColorLinkInverse</item>
+ </style>
+
<style name="TextAppearance.Quantum.Small" parent="TextAppearance.Small"/>
- <style name="TextAppearance.Quantum.Large.Inverse">
- <item name="textColor">?textColorPrimaryInverse</item>
- <item name="textColorHint">?textColorHintInverse</item>
- <item name="textColorHighlight">?textColorHighlightInverse</item>
- <item name="textColorLink">?textColorLinkInverse</item>
- </style>
-
- <style name="TextAppearance.Quantum.Medium.Inverse">
- <item name="textColor">?textColorPrimaryInverse</item>
- <item name="textColorHint">?textColorHintInverse</item>
- <item name="textColorHighlight">?textColorHighlightInverse</item>
- <item name="textColorLink">?textColorLinkInverse</item>
- </style>
-
<style name="TextAppearance.Quantum.Small.Inverse">
- <item name="textColor">?textColorSecondaryInverse</item>
- <item name="textColorHint">?textColorHintInverse</item>
- <item name="textColorHighlight">?textColorHighlightInverse</item>
- <item name="textColorLink">?textColorLinkInverse</item>
+ <item name="textColor">?attr/textColorSecondaryInverse</item>
+ <item name="textColorHint">?attr/textColorHintInverse</item>
+ <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+ <item name="textColorLink">?attr/textColorLinkInverse</item>
</style>
<style name="TextAppearance.Quantum.SearchResult">
<item name="textStyle">normal</item>
- <item name="textColor">?textColorPrimary</item>
- <item name="textColorHint">?textColorHint</item>
+ <item name="textColor">?attr/textColorPrimary</item>
+ <item name="textColorHint">?attr/textColorHint</item>
</style>
<style name="TextAppearance.Quantum.SearchResult.Title">
@@ -137,54 +138,26 @@
<style name="TextAppearance.Quantum.SearchResult.Subtitle">
<item name="textSize">14sp</item>
- <item name="textColor">?textColorSecondary</item>
+ <item name="textColor">?attr/textColorSecondary</item>
</style>
<style name="TextAppearance.Quantum.Widget" parent="TextAppearance.Widget"/>
- <style name="TextAppearance.Quantum.Widget.Button" parent="TextAppearance.Quantum.Small.Inverse">
- <item name="textColor">@color/primary_text_light_nodisable</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.IconMenu.Item" parent="TextAppearance.Quantum.Small">
- <item name="textColor">?textColorPrimary</item>
- </style>
-
- <!-- This style is for smaller screens; values-xlarge defines a version
- for larger screens. -->
- <style name="TextAppearance.Quantum.Widget.TabWidget">
- <item name="textSize">14sp</item>
+ <style name="TextAppearance.Quantum.Widget.Button">
+ <item name="fontFamily">@string/font_family_button_quantum</item>
+ <item name="textSize">@dimen/text_size_button_quantum</item>
+ <item name="textAllCaps">true</item>
+ <item name="textColor">?attr/textColorPrimary</item>
<item name="textStyle">normal</item>
- <item name="textColor">@color/tab_indicator_text</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.TextView">
- <item name="textColor">?textColorPrimaryDisableOnly</item>
- <item name="textColorHint">?textColorHint</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.TextView.PopupMenu">
- <item name="textSize">18sp</item>
- <item name="textColor">?textColorPrimaryDisableOnly</item>
- <item name="textColorHint">?textColorHint</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.DropDownHint">
- <item name="textColor">?textColorPrimary</item>
- <item name="textSize">14sp</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.DropDownItem">
- <item name="textColor">?textColorPrimaryDisableOnly</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.TextView.SpinnerItem">
- <item name="textColor">?textColorPrimaryDisableOnly</item>
</style>
<style name="TextAppearance.Quantum.Widget.EditText">
- <item name="textColor">@color/bright_foreground_light</item>
- <item name="textColorHint">@color/hint_foreground_quantum_light</item>
+ <item name="textColor">?textColorPrimaryInverse</item>
+ <item name="textColorHint">?textColorHintInverse</item>
+ </style>
+
+ <style name="TextAppearance.Quantum.Widget.Switch" parent="TextAppearance.Quantum.Small">
+ <item name="textColor">@color/secondary_text_quantum_dark</item>
</style>
<style name="TextAppearance.Quantum.Widget.PopupMenu" parent="TextAppearance.Widget.PopupMenu">
@@ -199,75 +172,89 @@
<item name="textSize">14sp</item>
</style>
- <style name="TextAppearance.Quantum.Widget.ActionBar.Title"
- parent="TextAppearance.Quantum.Medium">
- <item name="textSize">@dimen/action_bar_title_text_size</item>
+ <style name="TextAppearance.Quantum.Widget.DropDownHint">
+ <item name="textColor">?attr/textColorPrimary</item>
+ <item name="textSize">14sp</item>
+ </style>
+ <style name="TextAppearance.Quantum.Widget.IconMenu.Item" parent="TextAppearance.Quantum.Small">
+ <item name="textColor">?attr/textColorPrimary</item>
</style>
- <style name="TextAppearance.Quantum.Widget.ActionBar.Subtitle"
- parent="TextAppearance.Quantum.Small">
- <item name="textSize">@dimen/action_bar_subtitle_text_size</item>
+ <!-- This style is for smaller screens; values-xlarge defines a version
+ for larger screens. -->
+ <style name="TextAppearance.Quantum.Widget.TabWidget">
+ <item name="textSize">14sp</item>
+ <item name="textStyle">normal</item>
+ <item name="textColor">@color/tab_indicator_text</item>
</style>
- <style name="TextAppearance.Quantum.Widget.ActionBar.Title.Inverse"
- parent="TextAppearance.Quantum.Medium.Inverse">
- <item name="textSize">@dimen/action_bar_title_text_size</item>
+ <style name="TextAppearance.Quantum.Widget.TextView">
+ <item name="textColor">?attr/textColorPrimaryDisableOnly</item>
+ <item name="textColorHint">?attr/textColorHint</item>
</style>
- <style name="TextAppearance.Quantum.Widget.ActionBar.Subtitle.Inverse"
- parent="TextAppearance.Quantum.Small.Inverse">
- <item name="textSize">@dimen/action_bar_subtitle_text_size</item>
+ <style name="TextAppearance.Quantum.Widget.TextView.PopupMenu">
+ <item name="textSize">18sp</item>
</style>
- <style name="TextAppearance.Quantum.Widget.ActionBar.Menu"
- parent="TextAppearance.Quantum.Small">
+ <style name="TextAppearance.Quantum.Widget.TextView.SpinnerItem" />
+
+ <style name="TextAppearance.Quantum.Widget.DropDownItem">
+ <item name="textColor">?attr/textColorPrimaryDisableOnly</item>
+ </style>
+
+ <style name="TextAppearance.Quantum.Widget.ActionMode"/>
+
+ <style name="TextAppearance.Quantum.Widget.ActionMode.Title" parent="TextAppearance.Quantum.Medium">
+ <item name="textSize">@dimen/action_bar_title_text_size_quantum</item>
+ </style>
+
+ <style name="TextAppearance.Quantum.Widget.ActionMode.Subtitle" parent="TextAppearance.Quantum.Small">
+ <item name="textSize">@dimen/action_bar_subtitle_text_size_quantum</item>
+ </style>
+
+ <!-- Text styles with no light versions -->
+
+ <style name="TextAppearance.Quantum.Widget.ActionBar.Title" parent="TextAppearance.Quantum.Medium">
+ <item name="textSize">@dimen/action_bar_title_text_size_quantum</item>
+ </style>
+
+ <style name="TextAppearance.Quantum.Widget.ActionBar.Subtitle" parent="TextAppearance.Quantum.Small">
+ <item name="textSize">@dimen/action_bar_subtitle_text_size_quantum</item>
+ </style>
+
+ <style name="TextAppearance.Quantum.Widget.ActionBar.Title.Inverse" parent="TextAppearance.Quantum.Medium.Inverse">
+ <item name="textSize">@dimen/action_bar_title_text_size_quantum</item>
+ </style>
+
+ <style name="TextAppearance.Quantum.Widget.ActionBar.Subtitle.Inverse" parent="TextAppearance.Quantum.Small.Inverse">
+ <item name="textSize">@dimen/action_bar_subtitle_text_size_quantum</item>
+ </style>
+
+ <style name="TextAppearance.Quantum.Widget.ActionBar.Menu" parent="TextAppearance.Quantum.Small">
<item name="textSize">12sp</item>
<item name="textStyle">bold</item>
<item name="textColor">?attr/actionMenuTextColor</item>
<item name="textAllCaps">@bool/config_actionMenuItemAllCaps</item>
</style>
- <style name="TextAppearance.Quantum.Widget.ActionMode"/>
-
- <style name="TextAppearance.Quantum.Widget.ActionMode.Title"
- parent="TextAppearance.Quantum.Medium">
- <item name="textSize">@dimen/action_bar_title_text_size</item>
+ <style name="TextAppearance.Quantum.Widget.ActionMode.Title.Inverse" parent="TextAppearance.Quantum.Medium.Inverse">
+ <item name="textSize">@dimen/action_bar_title_text_size_quantum</item>
</style>
- <style name="TextAppearance.Quantum.Widget.ActionMode.Subtitle"
- parent="TextAppearance.Quantum.Small">
- <item name="textSize">@dimen/action_bar_subtitle_text_size</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.ActionMode.Title.Inverse"
- parent="TextAppearance.Quantum.Medium.Inverse">
- <item name="textSize">@dimen/action_bar_title_text_size</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.ActionMode.Subtitle.Inverse"
- parent="TextAppearance.Quantum.Small.Inverse">
- <item name="textSize">@dimen/action_bar_subtitle_text_size</item>
- </style>
-
- <style name="TextAppearance.Quantum.Widget.Switch" parent="TextAppearance.Quantum.Small">
- <!-- Switch thumb asset presents a dark background. -->
- <item name="textColor">@color/secondary_text_quantum_dark</item>
- </style>
-
- <style name="TextAppearance.Quantum.Light.Widget.Switch" parent="TextAppearance.Quantum.Small">
- <!-- Switch thumb asset presents a dark background. -->
- <item name="textColor">@color/primary_text_quantum_dark</item>
+ <style name="TextAppearance.Quantum.Widget.ActionMode.Subtitle.Inverse" parent="TextAppearance.Quantum.Small.Inverse">
+ <item name="textSize">@dimen/action_bar_subtitle_text_size_quantum</item>
</style>
<style name="TextAppearance.Quantum.WindowTitle">
- <item name="textColor">#fff</item>
+ <item name="textColor">?attr/textColorPrimary</item>
<item name="textSize">14sp</item>
<item name="textStyle">bold</item>
</style>
<style name="TextAppearance.Quantum.DialogWindowTitle">
<item name="textSize">22sp</item>
- <item name="textColor">@color/holo_blue_light</item>
+ <item name="textColor">?attr/textColorPrimary</item>
</style>
<style name="TextAppearance.Quantum.CalendarViewWeekDayView" parent="TextAppearance.Small.CalendarViewWeekDayView">
@@ -277,12 +264,7 @@
<!-- Light text styles -->
<style name="TextAppearance.Quantum.Light" parent="TextAppearance.Quantum"/>
- <style name="TextAppearance.Quantum.Light.Inverse">
- <item name="textColor">?textColorPrimaryInverse</item>
- <item name="textColorHint">?textColorHintInverse</item>
- <item name="textColorHighlight">?textColorHighlightInverse</item>
- <item name="textColorLink">?textColorLinkInverse</item>
- </style>
+ <style name="TextAppearance.Quantum.Light.Inverse" parent="TextAppearance.Quantum.Inverse" />
<style name="TextAppearance.Quantum.Light.Large" parent="TextAppearance.Quantum.Large"/>
@@ -290,48 +272,26 @@
<style name="TextAppearance.Quantum.Light.Small" parent="TextAppearance.Quantum.Small"/>
- <style name="TextAppearance.Quantum.Light.Large.Inverse">
- <item name="textColor">?textColorPrimaryInverse</item>
- <item name="textColorHint">?textColorHintInverse</item>
- <item name="textColorHighlight">?textColorHighlightInverse</item>
- <item name="textColorLink">?textColorLinkInverse</item>
- </style>
+ <style name="TextAppearance.Quantum.Light.Large.Inverse" parent="TextAppearance.Quantum.Large.Inverse" />
- <style name="TextAppearance.Quantum.Light.Medium.Inverse">
- <item name="textColor">?textColorPrimaryInverse</item>
- <item name="textColorHint">?textColorHintInverse</item>
- <item name="textColorHighlight">?textColorHighlightInverse</item>
- <item name="textColorLink">?textColorLinkInverse</item>
- </style>
+ <style name="TextAppearance.Quantum.Light.Medium.Inverse" parent="TextAppearance.Quantum.Medium.Inverse" />
- <style name="TextAppearance.Quantum.Light.Small.Inverse">
- <item name="textColor">?textColorPrimaryInverse</item>
- <item name="textColorHint">?textColorHintInverse</item>
- <item name="textColorHighlight">?textColorHighlightInverse</item>
- <item name="textColorLink">?textColorLinkInverse</item>
- </style>
+ <style name="TextAppearance.Quantum.Light.Small.Inverse" parent="TextAppearance.Quantum.Small.Inverse" />
- <style name="TextAppearance.Quantum.Light.SearchResult" parent="TextAppearance.Quantum.SearchResult">
- <item name="textColor">?textColorPrimary</item>
- <item name="textColorHint">?textColorHint</item>
- </style>
+ <style name="TextAppearance.Quantum.Light.SearchResult" parent="TextAppearance.Quantum.SearchResult" />
- <style name="TextAppearance.Quantum.Light.SearchResult.Title">
- <item name="textSize">18sp</item>
- </style>
+ <style name="TextAppearance.Quantum.Light.SearchResult.Title" parent="TextAppearance.Quantum.SearchResult.Title" />
- <style name="TextAppearance.Quantum.Light.SearchResult.Subtitle">
- <item name="textSize">14sp</item>
- <item name="textColor">?textColorSecondary</item>
- </style>
+ <style name="TextAppearance.Quantum.Light.SearchResult.Subtitle" parent="TextAppearance.Quantum.SearchResult.Subtitle" />
<style name="TextAppearance.Quantum.Light.Widget" parent="TextAppearance.Widget"/>
- <style name="TextAppearance.Quantum.Light.Widget.Button"/>
+ <style name="TextAppearance.Quantum.Light.Widget.Button" parent="TextAppearance.Quantum.Widget.Button" />
- <style name="TextAppearance.Quantum.Light.Widget.EditText">
- <item name="textColor">@color/bright_foreground_dark</item>
- <item name="textColorHint">@color/hint_foreground_quantum_dark</item>
+ <style name="TextAppearance.Quantum.Light.Widget.EditText" parent="TextAppearance.Quantum.Widget.EditText" />
+
+ <style name="TextAppearance.Quantum.Light.Widget.Switch" parent="TextAppearance.Quantum.Small">
+ <item name="textColor">@color/secondary_text_quantum_dark</item>
</style>
<style name="TextAppearance.Quantum.Light.Widget.PopupMenu" parent="TextAppearance.Quantum.Widget.PopupMenu"/>
@@ -346,57 +306,59 @@
<style name="TextAppearance.Quantum.Light.Widget.ActionMode.Subtitle" parent="TextAppearance.Widget.ActionMode.Subtitle"/>
- <style name="TextAppearance.Quantum.Light.WindowTitle">
- <item name="textColor">#fff</item>
- <item name="textSize">14sp</item>
- <item name="textStyle">bold</item>
- </style>
+ <style name="TextAppearance.Quantum.Light.WindowTitle" parent="TextAppearance.Quantum.WindowTitle" />
- <style name="TextAppearance.Quantum.Light.DialogWindowTitle">
- <item name="textSize">22sp</item>
- <item name="textColor">@color/holo_blue_light</item>
- </style>
+ <style name="TextAppearance.Quantum.Light.DialogWindowTitle" parent="TextAppearance.Quantum.DialogWindowTitle" />
<style name="TextAppearance.Quantum.Light.CalendarViewWeekDayView" parent="TextAppearance.Small.CalendarViewWeekDayView"/>
<!-- Widget Styles -->
- <style name="Widget.Quantum" parent="Widget"/>
<style name="Quantum" />
<style name="Quantum.Light" />
+ <style name="Widget.Quantum" parent="Widget" />
+
+ <!-- Bordered ink button -->
<style name="Widget.Quantum.Button" parent="Widget.Button">
<item name="background">@drawable/btn_default_quantum_dark</item>
- <item name="textAppearance">?attr/textAppearanceMedium</item>
- <item name="textColor">@color/primary_text_quantum_dark</item>
+ <item name="textAppearance">?attr/textAppearanceButton</item>
<item name="minHeight">48dip</item>
- <item name="minWidth">64dip</item>
+ <item name="minWidth">96dip</item>
</style>
- <style name="Widget.Quantum.StackView">
- <item name="resOutColor">@color/holo_blue_light</item>
- <item name="clickColor">@color/holo_blue_light</item>
- </style>
-
- <style name="Widget.Quantum.Button.Borderless">
- <item name="background">?attr/selectableItemBackground</item>
- <item name="paddingStart">4dip</item>
- <item name="paddingEnd">4dip</item>
- </style>
-
- <style name="Widget.Quantum.Button.Borderless.Small">
- <item name="textSize">14sp</item>
- </style>
-
+ <!-- Small bordered ink button -->
<style name="Widget.Quantum.Button.Small">
- <item name="background">@drawable/btn_default_quantum_dark</item>
- <item name="textAppearance">?attr/textAppearanceSmall</item>
- <item name="textColor">@color/primary_text_quantum_dark</item>
<item name="minHeight">48dip</item>
<item name="minWidth">48dip</item>
</style>
+ <!-- Bordered paper button -->
+ <style name="Widget.Quantum.Button.Paper">
+ <!-- TODO: Specify pressed state animation. -->
+ </style>
+
+ <!-- Bordered paper button with color -->
+ <style name="Widget.Quantum.Button.Paper.Color">
+ <item name="background">@drawable/btn_color_quantum_dark</item>
+ </style>
+
+ <!-- Borderless ink button -->
+ <style name="Widget.Quantum.Button.Borderless">
+ <item name="background">@drawable/btn_borderless_quantum_dark</item>
+ </style>
+
+ <!-- Small borderless ink button -->
+ <style name="Widget.Quantum.Button.Borderless.Small">
+ <item name="minHeight">48dip</item>
+ <item name="minWidth">48dip</item>
+ </style>
+
+ <!-- Borderless paper button -->
+ <style name="Widget.Quantum.Button.Borderless.Paper">
+ <!-- TODO: Specify pressed state animation. -->
+ </style>
<style name="Widget.Quantum.Button.Inset">
<item name="background">@drawable/button_inset</item>
</style>
@@ -405,7 +367,6 @@
<item name="background">@drawable/btn_toggle_holo_dark</item>
<item name="textOn">@string/capital_on</item>
<item name="textOff">@string/capital_off</item>
- <item name="disabledAlpha">?attr/disabledAlpha</item>
<item name="textAppearance">?attr/textAppearanceSmall</item>
<item name="minHeight">48dip</item>
</style>
@@ -430,12 +391,17 @@
<item name="dividerPadding">0dp</item>
</style>
+ <style name="Widget.Quantum.StackView">
+ <item name="resOutColor">@color/holo_blue_light</item>
+ <item name="clickColor">@color/holo_blue_light</item>
+ </style>
+
<style name="Widget.Quantum.TextView" parent="Widget.TextView"/>
<style name="Widget.Quantum.CheckedTextView" parent="Widget.CheckedTextView"/>
<style name="Widget.Quantum.TextView.ListSeparator" parent="Widget.TextView.ListSeparator">
- <item name="background">@drawable/list_section_divider_holo_dark</item>
+ <item name="background">@drawable/list_section_divider_quantum_dark</item>
<item name="textAllCaps">true</item>
</style>
@@ -446,8 +412,8 @@
<style name="Widget.Quantum.AbsListView" parent="Widget.AbsListView"/>
<style name="Widget.Quantum.AutoCompleteTextView" parent="Widget.AutoCompleteTextView">
- <item name="dropDownSelector">@drawable/list_selector_quantum_dark</item>
- <item name="popupBackground">@drawable/menu_dropdown_panel_holo_dark</item>
+ <item name="dropDownSelector">@drawable/list_selector_holo_dark</item>
+ <item name="popupBackground">?attr/colorBackground</item>
</style>
<style name="Widget.Quantum.CompoundButton" parent="Widget.CompoundButton"/>
@@ -459,7 +425,7 @@
<style name="Widget.Quantum.EditText" parent="Widget.EditText"/>
<style name="Widget.Quantum.ExpandableListView" parent="Widget.Quantum.ListView">
- <item name="groupIndicator">@drawable/expander_group_holo_dark</item>
+ <item name="groupIndicator">@drawable/expander_group_quantum_dark</item>
<item name="indicatorLeft">?attr/expandableListPreferredItemIndicatorLeft</item>
<item name="indicatorRight">?attr/expandableListPreferredItemIndicatorRight</item>
<item name="childDivider">?attr/listDivider</item>
@@ -545,7 +511,7 @@
</style>
<style name="Widget.Quantum.ProgressBar.Horizontal" parent="Widget.ProgressBar.Horizontal">
- <item name="progressDrawable">@drawable/progress_horizontal_holo_dark</item>
+ <item name="progressDrawable">@drawable/progress_horizontal_quantum_dark</item>
<item name="indeterminateDrawable">@drawable/progress_indeterminate_horizontal_holo</item>
<item name="minHeight">16dip</item>
<item name="maxHeight">16dip</item>
@@ -569,11 +535,11 @@
<style name="Widget.Quantum.SeekBar">
<item name="indeterminateOnly">false</item>
- <item name="progressDrawable">@drawable/scrubber_progress_horizontal_holo_dark</item>
- <item name="indeterminateDrawable">@drawable/scrubber_progress_horizontal_holo_dark</item>
+ <item name="progressDrawable">@drawable/scrubber_progress_horizontal_quantum_dark</item>
+ <item name="indeterminateDrawable">@drawable/scrubber_progress_horizontal_quantum_dark</item>
<item name="minHeight">13dip</item>
<item name="maxHeight">13dip</item>
- <item name="thumb">@drawable/scrubber_control_selector_holo</item>
+ <item name="thumb">@drawable/scrubber_control_selector_quantum_dark</item>
<item name="thumbOffset">16dip</item>
<item name="focusable">true</item>
<item name="paddingStart">16dip</item>
@@ -607,9 +573,9 @@
<style name="Widget.Quantum.HorizontalScrollView" parent="Widget.HorizontalScrollView"/>
<style name="Widget.Quantum.Spinner" parent="Widget.Spinner.DropDown">
- <item name="background">@drawable/spinner_background_holo_dark</item>
- <item name="dropDownSelector">@drawable/list_selector_quantum_dark</item>
- <item name="popupBackground">@drawable/menu_dropdown_panel_holo_dark</item>
+ <item name="background">@drawable/spinner_background_quantum_dark</item>
+ <item name="dropDownSelector">@drawable/list_selector_holo_dark</item>
+ <item name="popupBackground">?attr/colorBackground</item>
<item name="dropDownVerticalOffset">0dip</item>
<item name="dropDownHorizontalOffset">0dip</item>
<item name="dropDownWidth">wrap_content</item>
@@ -621,11 +587,11 @@
<style name="Widget.Quantum.Spinner.DropDown"/>
<style name="Widget.Quantum.Spinner.DropDown.ActionBar">
- <item name="background">@drawable/spinner_ab_holo_dark</item>
+ <item name="background">@drawable/spinner_background_quantum_dark</item>
</style>
<style name="Widget.Quantum.CompoundButton.Star" parent="Widget.CompoundButton.Star">
- <item name="button">@drawable/btn_star_holo_dark</item>
+ <item name="button">@drawable/btn_star_quantum_dark</item>
</style>
<style name="Widget.Quantum.TabWidget" parent="Widget.TabWidget">
@@ -640,7 +606,7 @@
</style>
<style name="Widget.Quantum.Tab" parent="Widget.Quantum.ActionBar.TabView">
- <item name="background">@drawable/tab_indicator_holo</item>
+ <item name="background">@drawable/tab_indicator_quantum_dark</item>
<item name="layout_width">0dip</item>
<item name="layout_weight">1</item>
<item name="minWidth">80dip</item>
@@ -683,8 +649,8 @@
<style name="Widget.Quantum.QuickContactBadgeSmall.WindowLarge" parent="Widget.QuickContactBadgeSmall.WindowLarge"/>
<style name="Widget.Quantum.ListPopupWindow" parent="Widget.ListPopupWindow">
- <item name="dropDownSelector">@drawable/list_selector_quantum_dark</item>
- <item name="popupBackground">@drawable/menu_panel_holo_dark</item>
+ <item name="dropDownSelector">@drawable/list_selector_holo_dark</item>
+ <item name="popupBackground">?attr/colorBackground</item>
<item name="dropDownVerticalOffset">0dip</item>
<item name="dropDownHorizontalOffset">0dip</item>
<item name="dropDownWidth">wrap_content</item>
@@ -708,7 +674,7 @@
</style>
<style name="Widget.Quantum.ActionButton.Overflow">
- <item name="src">@drawable/ic_menu_moreoverflow_holo_dark</item>
+ <item name="src">@drawable/ic_menu_moreoverflow_quantum_dark</item>
<item name="background">?attr/actionBarItemBackground</item>
<item name="contentDescription">@string/action_menu_overflow_description</item>
</style>
@@ -716,7 +682,7 @@
<style name="Widget.Quantum.ActionButton.TextButton" parent="Widget.Quantum.ButtonBar.Button"/>
<style name="Widget.Quantum.ActionBar.TabView" parent="Widget.ActionBar.TabView">
- <item name="background">@drawable/tab_indicator_ab_holo</item>
+ <item name="background">@drawable/tab_indicator_quantum_dark</item>
<item name="paddingStart">16dip</item>
<item name="paddingEnd">16dip</item>
</style>
@@ -749,7 +715,7 @@
<style name="Widget.Quantum.ActionBar" parent="Widget.ActionBar">
<item name="titleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Title</item>
<item name="subtitleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Subtitle</item>
- <item name="background">@drawable/ab_transparent_dark_holo</item>
+ <item name="background">@drawable/ab_transparent_quantum_dark</item>
<item name="backgroundStacked">@drawable/ab_stacked_transparent_dark_holo</item>
<item name="backgroundSplit">@drawable/ab_bottom_transparent_dark_holo</item>
<item name="divider">?attr/dividerVertical</item>
@@ -773,53 +739,65 @@
</style>
<style name="Widget.Quantum.CompoundButton.Switch">
- <item name="track">@drawable/switch_track_holo_dark</item>
- <item name="thumb">@drawable/switch_inner_holo_dark</item>
+ <item name="track">@drawable/switch_track_quantum_dark</item>
+ <item name="thumb">@drawable/switch_inner_quantum_dark</item>
<item name="switchTextAppearance">@style/TextAppearance.Quantum.Widget.Switch</item>
- <item name="textOn">@string/capital_on</item>
- <item name="textOff">@string/capital_off</item>
+ <item name="textOn"></item>
+ <item name="textOff"></item>
<item name="thumbTextPadding">12dip</item>
- <item name="switchMinWidth">96dip</item>
+ <item name="switchMinWidth">72dip</item>
<item name="switchPadding">16dip</item>
</style>
<!-- Light widget styles -->
- <style name="Widget.Quantum.Light"/>
+ <style name="Widget.Quantum.Light" parent="Widget" />
- <style name="Widget.Quantum.Light.Button" parent="Widget.Button">
+ <!-- Bordered ink button -->
+ <style name="Widget.Quantum.Light.Button" parent="Widget.Quantum.Button">
<item name="background">@drawable/btn_default_quantum_light</item>
- <item name="textAppearance">?attr/textAppearanceMediumInverse</item>
- <item name="textColor">@color/primary_text_quantum_light</item>
+ <item name="textAppearance">?attr/textAppearanceButton</item>
<item name="minHeight">48dip</item>
- <item name="minWidth">64dip</item>
+ <item name="minWidth">96dip</item>
</style>
- <style name="Widget.Quantum.Light.Button.Borderless">
- <item name="background">?attr/selectableItemBackground</item>
- <item name="paddingStart">4dip</item>
- <item name="paddingEnd">4dip</item>
- </style>
-
- <style name="Widget.Quantum.Light.Button.Borderless.Small">
- <item name="textSize">14sp</item>
- </style>
-
+ <!-- Small bordered ink button -->
<style name="Widget.Quantum.Light.Button.Small">
- <item name="background">@drawable/btn_default_quantum_light</item>
- <item name="textAppearance">?attr/textAppearanceSmall</item>
- <item name="textColor">@color/primary_text_quantum_light</item>
<item name="minHeight">48dip</item>
<item name="minWidth">48dip</item>
</style>
+ <!-- Bordered paper button -->
+ <style name="Widget.Quantum.Light.Button.Paper">
+ <!-- TODO: Specify pressed state animation. -->
+ </style>
+
+ <!-- Bordered paper button with color -->
+ <style name="Widget.Quantum.Light.Button.Paper.Color">
+ <item name="background">@drawable/btn_color_quantum_light</item>
+ </style>
+
+ <!-- Borderless ink button -->
+ <style name="Widget.Quantum.Light.Button.Borderless">
+ <item name="background">@drawable/btn_borderless_quantum_light</item>
+ </style>
+
+ <!-- Small borderless ink button -->
+ <style name="Widget.Quantum.Light.Button.Borderless.Small">
+ <item name="minHeight">48dip</item>
+ <item name="minWidth">48dip</item>
+ </style>
+
+ <!-- Borderless paper button -->
+ <style name="Widget.Quantum.Light.Button.Borderless.Paper">
+ <!-- TODO: Specify pressed state animation. -->
+ </style>
<style name="Widget.Quantum.Light.Button.Inset"/>
<style name="Widget.Quantum.Light.Button.Toggle">
<item name="background">@drawable/btn_toggle_holo_light</item>
<item name="textOn">@string/capital_on</item>
<item name="textOff">@string/capital_off</item>
- <item name="disabledAlpha">?attr/disabledAlpha</item>
<item name="textAppearance">?attr/textAppearanceSmall</item>
<item name="minHeight">48dip</item>
</style>
@@ -840,7 +818,7 @@
<style name="Widget.Quantum.Light.CheckedTextView" parent="Widget.CheckedTextView"/>
<style name="Widget.Quantum.Light.TextView.ListSeparator" parent="Widget.TextView.ListSeparator">
- <item name="background">@drawable/list_section_divider_holo_light</item>
+ <item name="background">@drawable/list_section_divider_quantum_light</item>
<item name="textAllCaps">true</item>
</style>
@@ -851,8 +829,8 @@
<style name="Widget.Quantum.Light.AbsListView" parent="Widget.AbsListView"/>
<style name="Widget.Quantum.Light.AutoCompleteTextView" parent="Widget.AutoCompleteTextView">
- <item name="dropDownSelector">@drawable/list_selector_quantum_light</item>
- <item name="popupBackground">@drawable/menu_dropdown_panel_holo_light</item>
+ <item name="dropDownSelector">@drawable/list_selector_holo_light</item>
+ <item name="popupBackground">?attr/colorBackground</item>
</style>
<style name="Widget.Quantum.Light.CompoundButton.CheckBox" parent="Widget.CompoundButton.CheckBox"/>
@@ -862,7 +840,7 @@
<style name="Widget.Quantum.Light.EditText" parent="Widget.Quantum.EditText"/>
<style name="Widget.Quantum.Light.ExpandableListView" parent="Widget.Quantum.Light.ListView">
- <item name="groupIndicator">@drawable/expander_group_holo_light</item>
+ <item name="groupIndicator">@drawable/expander_group_quantum_light</item>
<item name="indicatorLeft">?attr/expandableListPreferredItemIndicatorLeft</item>
<item name="indicatorRight">?attr/expandableListPreferredItemIndicatorRight</item>
<item name="childDivider">?attr/listDivider</item>
@@ -930,7 +908,7 @@
<style name="Widget.Quantum.Light.ProgressBar" parent="Widget.Quantum.ProgressBar"/>
<style name="Widget.Quantum.Light.ProgressBar.Horizontal" parent="Widget.Quantum.ProgressBar.Horizontal">
- <item name="progressDrawable">@drawable/progress_horizontal_holo_light</item>
+ <item name="progressDrawable">@drawable/progress_horizontal_quantum_light</item>
</style>
<style name="Widget.Quantum.Light.ProgressBar.Small" parent="Widget.Quantum.ProgressBar.Small"/>
@@ -946,8 +924,9 @@
<style name="Widget.Quantum.Light.ProgressBar.Large.Inverse" parent="Widget.Quantum.ProgressBar.Large.Inverse"/>
<style name="Widget.Quantum.Light.SeekBar" parent="Widget.Quantum.SeekBar">
- <item name="progressDrawable">@drawable/scrubber_progress_horizontal_holo_light</item>
- <item name="indeterminateDrawable">@drawable/scrubber_progress_horizontal_holo_light</item>
+ <item name="progressDrawable">@drawable/scrubber_progress_horizontal_quantum_light</item>
+ <item name="indeterminateDrawable">@drawable/scrubber_progress_horizontal_quantum_light</item>
+ <item name="thumb">@drawable/scrubber_control_selector_quantum_light</item>
</style>
<style name="Widget.Quantum.Light.RatingBar" parent="Widget.RatingBar">
@@ -976,9 +955,9 @@
<style name="Widget.Quantum.Light.HorizontalScrollView" parent="Widget.HorizontalScrollView"/>
<style name="Widget.Quantum.Light.Spinner" parent="Widget.Quantum.Spinner">
- <item name="background">@drawable/spinner_background_holo_light</item>
- <item name="dropDownSelector">@drawable/list_selector_quantum_light</item>
- <item name="popupBackground">@drawable/menu_dropdown_panel_holo_light</item>
+ <item name="background">@drawable/spinner_background_quantum_light</item>
+ <item name="dropDownSelector">@drawable/list_selector_holo_light</item>
+ <item name="popupBackground">?attr/colorBackground</item>
<item name="dropDownVerticalOffset">0dip</item>
<item name="dropDownHorizontalOffset">0dip</item>
<item name="dropDownWidth">wrap_content</item>
@@ -988,11 +967,11 @@
<style name="Widget.Quantum.Light.Spinner.DropDown"/>
<style name="Widget.Quantum.Light.Spinner.DropDown.ActionBar">
- <item name="background">@drawable/spinner_ab_holo_light</item>
+ <item name="background">@drawable/spinner_background_quantum_light</item>
</style>
<style name="Widget.Quantum.Light.CompoundButton.Star" parent="Widget.CompoundButton.Star">
- <item name="button">@drawable/btn_star_holo_light</item>
+ <item name="button">@drawable/btn_star_quantum_light</item>
</style>
<style name="Widget.Quantum.Light.TabWidget" parent="Widget.Quantum.TabWidget"/>
@@ -1022,8 +1001,8 @@
<style name="Widget.Quantum.Light.QuickContactBadgeSmall.WindowLarge" parent="Widget.QuickContactBadgeSmall.WindowLarge"/>
<style name="Widget.Quantum.Light.ListPopupWindow" parent="Widget.ListPopupWindow">
- <item name="dropDownSelector">@drawable/list_selector_quantum_light</item>
- <item name="popupBackground">@drawable/menu_panel_holo_light</item>
+ <item name="dropDownSelector">@drawable/list_selector_holo_light</item>
+ <item name="popupBackground">?attr/colorBackground</item>
<item name="dropDownVerticalOffset">0dip</item>
<item name="dropDownHorizontalOffset">0dip</item>
<item name="dropDownWidth">wrap_content</item>
@@ -1034,14 +1013,15 @@
<style name="Widget.Quantum.Light.ActionButton" parent="Widget.Quantum.ActionButton"/>
<style name="Widget.Quantum.Light.ActionButton.Overflow">
- <item name="src">@drawable/ic_menu_moreoverflow_holo_light</item>
+ <item name="src">@drawable/ic_menu_moreoverflow_quantum_light</item>
<item name="contentDescription">@string/action_menu_overflow_description</item>
</style>
- <style name="Widget.Quantum.Light.ActionBar.TabView" parent="Widget.Quantum.ActionBar.TabView"/>
+ <style name="Widget.Quantum.Light.ActionBar.TabView" parent="Widget.Quantum.ActionBar.TabView">
+ <item name="background">@drawable/tab_indicator_quantum_light</item>
+ </style>
<style name="Widget.Quantum.Light.Tab" parent="Widget.Quantum.Light.ActionBar.TabView">
- <item name="background">@drawable/tab_indicator_holo</item>
<item name="layout_width">0dip</item>
<item name="layout_weight">1</item>
<item name="minWidth">80dip</item>
@@ -1076,10 +1056,10 @@
<style name="Widget.Quantum.Light.ActionBar" parent="Widget.Quantum.ActionBar">
<item name="titleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Title</item>
<item name="subtitleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Subtitle</item>
- <item name="background">@drawable/ab_transparent_light_holo</item>
+ <item name="background">@drawable/ab_transparent_quantum_light</item>
<item name="backgroundStacked">@drawable/ab_stacked_transparent_light_holo</item>
<item name="backgroundSplit">@drawable/ab_bottom_transparent_light_holo</item>
- <item name="homeAsUpIndicator">@drawable/ic_ab_back_holo_light</item>
+ <item name="homeAsUpIndicator">@drawable/ic_ab_back_quantum_light</item>
<item name="progressBarStyle">@style/Widget.Quantum.Light.ProgressBar.Horizontal</item>
<item name="indeterminateProgressStyle">@style/Widget.Quantum.Light.ProgressBar</item>
</style>
@@ -1103,7 +1083,7 @@
<item name="background">@drawable/ab_solid_dark_holo</item>
<item name="backgroundStacked">@drawable/ab_stacked_solid_dark_holo</item>
<item name="backgroundSplit">@drawable/ab_bottom_solid_inverse_holo</item>
- <item name="divider">@drawable/list_divider_holo_dark</item>
+ <item name="divider">@drawable/list_divider_quantum_dark</item>
<item name="progressBarStyle">@style/Widget.Quantum.ProgressBar.Horizontal</item>
<item name="indeterminateProgressStyle">@style/Widget.Quantum.ProgressBar</item>
<item name="progressBarPadding">32dip</item>
@@ -1111,11 +1091,11 @@
</style>
<style name="Widget.Quantum.Light.CompoundButton.Switch" parent="Widget.CompoundButton.Switch">
- <item name="track">@drawable/switch_track_holo_light</item>
- <item name="thumb">@drawable/switch_inner_holo_light</item>
+ <item name="track">@drawable/switch_track_quantum_light</item>
+ <item name="thumb">@drawable/switch_inner_quantum_light</item>
<item name="switchTextAppearance">@style/TextAppearance.Quantum.Light.Widget.Switch</item>
- <item name="textOn">@string/capital_on</item>
- <item name="textOff">@string/capital_off</item>
+ <item name="textOn"></item>
+ <item name="textOff"></item>
<item name="thumbTextPadding">12dip</item>
<item name="switchMinWidth">96dip</item>
<item name="switchPadding">16dip</item>
@@ -1132,16 +1112,16 @@
<!-- Dialog styles -->
<style name="AlertDialog.Quantum" parent="AlertDialog">
- <item name="fullDark">@drawable/dialog_full_holo_dark</item>
- <item name="topDark">@drawable/dialog_top_holo_dark</item>
- <item name="centerDark">@drawable/dialog_middle_holo_dark</item>
- <item name="bottomDark">@drawable/dialog_bottom_holo_dark</item>
- <item name="fullBright">@drawable/dialog_full_holo_dark</item>
- <item name="topBright">@drawable/dialog_top_holo_dark</item>
- <item name="centerBright">@drawable/dialog_middle_holo_dark</item>
- <item name="bottomBright">@drawable/dialog_bottom_holo_dark</item>
- <item name="bottomMedium">@drawable/dialog_bottom_holo_dark</item>
- <item name="centerMedium">@drawable/dialog_middle_holo_dark</item>
+ <item name="fullDark">?attr/colorBackground</item>
+ <item name="topDark">?attr/colorBackground</item>
+ <item name="centerDark">?attr/colorBackground</item>
+ <item name="bottomDark">?attr/colorBackground</item>
+ <item name="fullBright">?attr/colorBackground</item>
+ <item name="topBright">?attr/colorBackground</item>
+ <item name="centerBright">?attr/colorBackground</item>
+ <item name="bottomBright">?attr/colorBackground</item>
+ <item name="bottomMedium">?attr/colorBackground</item>
+ <item name="centerMedium">?attr/colorBackground</item>
<item name="layout">@layout/alert_dialog_holo</item>
<item name="listLayout">@layout/select_dialog_holo</item>
<item name="progressLayout">@layout/progress_dialog_holo</item>
@@ -1151,18 +1131,7 @@
<item name="singleChoiceItemLayout">@layout/select_dialog_singlechoice_holo</item>
</style>
- <style name="AlertDialog.Quantum.Light">
- <item name="fullDark">@drawable/dialog_full_holo_light</item>
- <item name="topDark">@drawable/dialog_top_holo_light</item>
- <item name="centerDark">@drawable/dialog_middle_holo_light</item>
- <item name="bottomDark">@drawable/dialog_bottom_holo_light</item>
- <item name="fullBright">@drawable/dialog_full_holo_light</item>
- <item name="topBright">@drawable/dialog_top_holo_light</item>
- <item name="centerBright">@drawable/dialog_middle_holo_light</item>
- <item name="bottomBright">@drawable/dialog_bottom_holo_light</item>
- <item name="bottomMedium">@drawable/dialog_bottom_holo_light</item>
- <item name="centerMedium">@drawable/dialog_middle_holo_light</item>
- </style>
+ <style name="AlertDialog.Quantum.Light" />
<!-- Window title -->
<style name="WindowTitleBackground.Quantum">
diff --git a/core/res/res/values/themes_micro.xml b/core/res/res/values/themes_micro.xml
index be5fa99..b174d22 100644
--- a/core/res/res/values/themes_micro.xml
+++ b/core/res/res/values/themes_micro.xml
@@ -14,14 +14,24 @@
limitations under the License.
-->
<resources>
- <style name="Theme.Micro" parent="Theme.Holo" />
+ <style name="Theme.Micro" parent="Theme.Holo">
+ <item name="numberPickerStyle">@android:style/Widget.Micro.NumberPicker</item>
+ </style>
- <style name="Theme.Micro.Light" parent="Theme.Holo.Light"/>
+ <style name="Theme.Micro.NoActionBar" parent="Theme.Holo.NoActionBar">
+ <item name="textViewStyle">@android:style/Widget.Micro.TextView</item>
+ <item name="numberPickerStyle">@android:style/Widget.Micro.NumberPicker</item>
+ </style>
+ <style name="Theme.Micro.Light" parent="Theme.Holo.Light">
+ <item name="numberPickerStyle">@android:style/Widget.Micro.NumberPicker</item>
+ </style>
<style name="Theme.Micro.Light.NoActionBar" parent="Theme.Holo.Light.NoActionBar">
<item name="textViewStyle">@android:style/Widget.Micro.TextView</item>
+ <item name="numberPickerStyle">@android:style/Widget.Micro.NumberPicker</item>
</style>
<style name="Theme.Micro.Light.DarkActionBar" parent="Theme.Holo.Light.DarkActionBar">
<item name="textViewStyle">@android:style/Widget.Micro.TextView</item>
+ <item name="numberPickerStyle">@android:style/Widget.Micro.NumberPicker</item>
</style>
</resources>
diff --git a/core/res/res/values/themes_quantum.xml b/core/res/res/values/themes_quantum.xml
index f0db46c..d2eee28 100644
--- a/core/res/res/values/themes_quantum.xml
+++ b/core/res/res/values/themes_quantum.xml
@@ -49,42 +49,31 @@
<item name="disabledAlpha">0.5</item>
<item name="backgroundDimAmount">0.6</item>
- <item name="colorPressedHighlight">@color/holo_gray_light</item>
- <item name="colorLongPressedHighlight">@color/holo_gray_bright</item>
- <item name="colorFocusedHighlight">@color/holo_blue_dark</item>
- <item name="colorMultiSelectHighlight">@color/holo_green_light</item>
- <item name="colorActivatedHighlight">@color/holo_blue_dark</item>
-
<!-- Text styles -->
<item name="textAppearance">@style/TextAppearance.Quantum</item>
<item name="textAppearanceInverse">@style/TextAppearance.Quantum.Inverse</item>
<item name="textColorPrimary">@color/primary_text_quantum_dark</item>
- <item name="textColorSecondary">@color/secondary_text_quantum_dark</item>
- <item name="textColorTertiary">@color/tertiary_text_quantum_dark</item>
<item name="textColorPrimaryInverse">@color/primary_text_quantum_light</item>
- <item name="textColorSecondaryInverse">@color/secondary_text_quantum_light</item>
- <item name="textColorTertiaryInverse">@color/tertiary_text_quantum_light</item>
<item name="textColorPrimaryDisableOnly">@color/primary_text_disable_only_quantum_dark</item>
- <item name="textColorPrimaryInverseDisableOnly">@color/primary_text_disable_only_quantum_light</item>
- <item name="textColorPrimaryNoDisable">@color/primary_text_nodisable_quantum_dark</item>
- <item name="textColorSecondaryNoDisable">@color/secondary_text_nodisable_quantum_dark</item>
- <item name="textColorPrimaryInverseNoDisable">@color/primary_text_nodisable_quantum_light</item>
- <item name="textColorSecondaryInverseNoDisable">@color/secondary_text_nodisable_quantum_light</item>
+ <item name="textColorSecondary">@color/secondary_text_quantum_dark</item>
+ <item name="textColorSecondaryInverse">@color/secondary_text_quantum_light</item>
+ <item name="textColorTertiary">@color/tertiary_text_quantum_dark</item>
+ <item name="textColorTertiaryInverse">@color/tertiary_text_quantum_light</item>
<item name="textColorHint">@color/hint_foreground_quantum_dark</item>
<item name="textColorHintInverse">@color/hint_foreground_quantum_light</item>
- <item name="textColorSearchUrl">@color/search_url_text_quantum_dark</item>
<item name="textColorHighlight">@color/highlighted_text_quantum_dark</item>
<item name="textColorHighlightInverse">@color/highlighted_text_quantum_light</item>
- <item name="textColorLink">@color/holo_blue_light</item>
- <item name="textColorLinkInverse">@color/holo_blue_light</item>
+ <item name="textColorLink">@color/quantum_teal_500</item>
+ <item name="textColorLinkInverse">@color/quantum_teal_500</item>
+ <item name="textColorSearchUrl">@color/search_url_text_quantum_dark</item>
<item name="textColorAlertDialogListItem">@color/primary_text_quantum_dark</item>
<item name="textAppearanceLarge">@style/TextAppearance.Quantum.Large</item>
- <item name="textAppearanceMedium">@style/TextAppearance.Quantum.Medium</item>
- <item name="textAppearanceSmall">@style/TextAppearance.Quantum.Small</item>
<item name="textAppearanceLargeInverse">@style/TextAppearance.Quantum.Large.Inverse</item>
+ <item name="textAppearanceMedium">@style/TextAppearance.Quantum.Medium</item>
<item name="textAppearanceMediumInverse">@style/TextAppearance.Quantum.Medium.Inverse</item>
+ <item name="textAppearanceSmall">@style/TextAppearance.Quantum.Small</item>
<item name="textAppearanceSmallInverse">@style/TextAppearance.Quantum.Small.Inverse</item>
<item name="textAppearanceSearchResultTitle">@style/TextAppearance.Quantum.SearchResult.Title</item>
<item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.Quantum.SearchResult.Subtitle</item>
@@ -92,7 +81,7 @@
<item name="textAppearanceButton">@style/TextAppearance.Quantum.Widget.Button</item>
<item name="editTextColor">?attr/textColorPrimary</item>
- <item name="editTextBackground">@drawable/edit_text_holo_dark</item>
+ <item name="editTextBackground">@drawable/edit_text_quantum_dark</item>
<item name="candidatesTextStyleSpans">@string/candidates_style</item>
@@ -104,17 +93,16 @@
<!-- Button styles -->
<item name="buttonStyle">@style/Widget.Quantum.Button</item>
-
<item name="buttonStyleSmall">@style/Widget.Quantum.Button.Small</item>
<item name="buttonStyleInset">@style/Widget.Quantum.Button.Inset</item>
-
<item name="buttonStyleToggle">@style/Widget.Quantum.Button.Toggle</item>
+
<item name="switchStyle">@style/Widget.Quantum.CompoundButton.Switch</item>
<item name="mediaRouteButtonStyle">@style/Widget.Quantum.MediaRouteButton</item>
<item name="selectableItemBackground">@drawable/item_background_quantum_dark</item>
<item name="borderlessButtonStyle">@style/Widget.Quantum.Button.Borderless</item>
- <item name="homeAsUpIndicator">@drawable/ic_ab_back_holo_dark</item>
+ <item name="homeAsUpIndicator">@drawable/ic_ab_back_quantum_dark</item>
<!-- List attributes -->
<item name="listPreferredItemHeight">64dip</item>
@@ -129,17 +117,17 @@
<!-- @hide -->
<item name="searchResultListItemHeight">58dip</item>
- <item name="listDivider">@drawable/list_divider_holo_dark</item>
+ <item name="listDivider">@drawable/list_divider_quantum_dark</item>
<item name="listSeparatorTextViewStyle">@style/Widget.Quantum.TextView.ListSeparator</item>
- <item name="listChoiceIndicatorSingle">@drawable/btn_radio_holo_dark</item>
- <item name="listChoiceIndicatorMultiple">@drawable/btn_check_holo_dark</item>
+ <item name="listChoiceIndicatorSingle">@drawable/btn_radio_quantum_dark</item>
+ <item name="listChoiceIndicatorMultiple">@drawable/btn_check_quantum_dark</item>
- <item name="listChoiceBackgroundIndicator">@drawable/list_selector_quantum_dark</item>
+ <item name="listChoiceBackgroundIndicator">@drawable/list_selector_holo_dark</item>
- <item name="activatedBackgroundIndicator">@drawable/activated_background_holo_dark</item>
+ <item name="activatedBackgroundIndicator">@drawable/activated_background_quantum_dark</item>
- <item name="listDividerAlertDialog">@drawable/list_divider_holo_dark</item>
+ <item name="listDividerAlertDialog">@drawable/list_divider_quantum_dark</item>
<item name="expandableListPreferredItemPaddingLeft">40dip</item>
<item name="expandableListPreferredChildPaddingLeft">?attr/expandableListPreferredItemPaddingLeft</item>
@@ -148,8 +136,8 @@
<item name="expandableListPreferredItemIndicatorRight">0dip</item>
<item name="expandableListPreferredChildIndicatorLeft">?attr/expandableListPreferredItemIndicatorLeft</item>
<item name="expandableListPreferredChildIndicatorRight">?attr/expandableListPreferredItemIndicatorRight</item>
- <item name="findOnPageNextDrawable">@drawable/ic_find_next_holo_dark</item>
- <item name="findOnPagePreviousDrawable">@drawable/ic_find_previous_holo_dark</item>
+ <item name="findOnPageNextDrawable">@drawable/ic_find_next_quantum_dark</item>
+ <item name="findOnPagePreviousDrawable">@drawable/ic_find_previous_quantum_dark</item>
<!-- Gallery attributes -->
<item name="galleryItemBackground">@drawable/gallery_item_background</item>
@@ -182,7 +170,7 @@
<item name="alertDialogTheme">@style/Theme.Quantum.Dialog.Alert</item>
<item name="alertDialogStyle">@style/AlertDialog.Quantum</item>
<item name="alertDialogCenterButtons">false</item>
- <item name="alertDialogIcon">@drawable/ic_dialog_alert_holo_dark</item>
+ <item name="alertDialogIcon">@drawable/ic_dialog_alert_quantum_dark</item>
<!-- Presentation attributes -->
<item name="presentationTheme">@style/Theme.Quantum.Dialog.Presentation</item>
@@ -191,7 +179,7 @@
<item name="toastFrameBackground">@drawable/toast_frame</item>
<!-- Panel attributes -->
- <item name="panelBackground">@drawable/menu_hardkey_panel_holo_dark</item>
+ <item name="panelBackground">?attr/colorBackground</item>
<item name="panelFullBackground">@drawable/menu_background_fill_parent_width</item>
<!-- These three attributes do not seems to be used by the framework. Declared public though -->
<item name="panelColorBackground">#000</item>
@@ -206,8 +194,8 @@
<item name="scrollbarFadeDuration">250</item>
<item name="scrollbarDefaultDelayBeforeFade">300</item>
<item name="scrollbarSize">10dip</item>
- <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_holo_dark</item>
- <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_holo_dark</item>
+ <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_quantum_dark</item>
+ <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_quantum_dark</item>
<item name="scrollbarTrackHorizontal">@null</item>
<item name="scrollbarTrackVertical">@null</item>
@@ -217,7 +205,7 @@
<item name="textSelectHandle">@drawable/text_select_handle_middle</item>
<item name="textSelectHandleWindowStyle">@style/Widget.Quantum.TextSelectHandle</item>
<item name="textSuggestionsWindowStyle">@style/Widget.Quantum.TextSuggestionsPopupWindow</item>
- <item name="textCursorDrawable">@drawable/text_cursor_holo_dark</item>
+ <item name="textCursorDrawable">@drawable/text_cursor_quantum_dark</item>
<!-- Widget styles -->
<item name="absListViewStyle">@style/Widget.Quantum.AbsListView</item>
@@ -291,7 +279,7 @@
<item name="editTextPreferenceStyle">@style/Preference.Quantum.DialogPreference.EditTextPreference</item>
<item name="ringtonePreferenceStyle">@style/Preference.Quantum.RingtonePreference</item>
<item name="preferenceLayoutChild">@layout/preference_child_holo</item>
- <item name="detailsElementBackground">@drawable/panel_bg_holo_dark</item>
+ <item name="detailsElementBackground">?attr/colorBackground</item>
<!-- Search widget styles -->
<item name="searchWidgetCorpusItemBackground">@color/search_widget_corpus_item_background</item>
@@ -300,9 +288,9 @@
<item name="actionDropDownStyle">@style/Widget.Quantum.Spinner.DropDown.ActionBar</item>
<item name="actionButtonStyle">@style/Widget.Quantum.ActionButton</item>
<item name="actionOverflowButtonStyle">@style/Widget.Quantum.ActionButton.Overflow</item>
- <item name="actionModeBackground">@drawable/cab_background_top_holo_dark</item>
- <item name="actionModeSplitBackground">@drawable/cab_background_bottom_holo_dark</item>
- <item name="actionModeCloseDrawable">@drawable/ic_cab_done_holo_dark</item>
+ <item name="actionModeBackground">@color/theme_color_700</item>
+ <item name="actionModeSplitBackground">@color/theme_color_700</item>
+ <item name="actionModeCloseDrawable">@drawable/ic_cab_done_quantum_dark</item>
<item name="actionBarTabStyle">@style/Widget.Quantum.ActionBar.TabView</item>
<item name="actionBarTabBarStyle">@style/Widget.Quantum.ActionBar.TabBar</item>
<item name="actionBarTabTextStyle">@style/Widget.Quantum.ActionBar.TabText</item>
@@ -312,14 +300,15 @@
<item name="actionBarSize">@dimen/action_bar_default_height</item>
<item name="actionModePopupWindowStyle">@style/Widget.Quantum.PopupWindow.ActionMode</item>
<item name="actionBarWidgetTheme">@null</item>
+ <item name="actionBarItemBackground">@drawable/item_background_borderless_quantum_dark</item>
- <item name="actionModeCutDrawable">@drawable/ic_menu_cut_holo_dark</item>
- <item name="actionModeCopyDrawable">@drawable/ic_menu_copy_holo_dark</item>
- <item name="actionModePasteDrawable">@drawable/ic_menu_paste_holo_dark</item>
- <item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_holo_dark</item>
- <item name="actionModeShareDrawable">@drawable/ic_menu_share_holo_dark</item>
- <item name="actionModeFindDrawable">@drawable/ic_menu_find_holo_dark</item>
- <item name="actionModeWebSearchDrawable">@drawable/ic_menu_search_holo_dark</item>
+ <item name="actionModeCutDrawable">@drawable/ic_menu_cut_quantum_dark</item>
+ <item name="actionModeCopyDrawable">@drawable/ic_menu_copy_quantum_dark</item>
+ <item name="actionModePasteDrawable">@drawable/ic_menu_paste_quantum_dark</item>
+ <item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_quantum_dark</item>
+ <item name="actionModeShareDrawable">@drawable/ic_menu_share_quantum_dark</item>
+ <item name="actionModeFindDrawable">@drawable/ic_menu_find_quantum_dark</item>
+ <item name="actionModeWebSearchDrawable">@drawable/ic_menu_search_quantum_dark</item>
<item name="dividerVertical">?attr/listDivider</item>
<item name="dividerHorizontal">?attr/listDivider</item>
@@ -359,12 +348,12 @@
<!-- DatePicker style -->
<item name="datePickerStyle">@style/Widget.Quantum.DatePicker</item>
- <item name="fastScrollThumbDrawable">@drawable/fastscroll_thumb_holo</item>
+ <!-- TODO: This belongs in a FastScroll style -->
+ <item name="fastScrollThumbDrawable">@drawable/fastscroll_thumb_quantum_light</item>
<item name="fastScrollPreviewBackgroundLeft">@drawable/fastscroll_label_left_holo_dark</item>
<item name="fastScrollPreviewBackgroundRight">@drawable/fastscroll_label_right_holo_dark</item>
- <item name="fastScrollTrackDrawable">@drawable/fastscroll_track_holo_dark</item>
+ <item name="fastScrollTrackDrawable">@drawable/fastscroll_track_quantum_dark</item>
<item name="fastScrollOverlayPosition">atThumb</item>
-
</style>
<!-- Quantum Paper theme (light version). -->
@@ -376,42 +365,32 @@
<item name="disabledAlpha">0.5</item>
<item name="backgroundDimAmount">0.6</item>
- <item name="colorPressedHighlight">@color/holo_gray_light</item>
- <item name="colorLongPressedHighlight">@color/holo_gray_bright</item>
- <item name="colorFocusedHighlight">@color/holo_blue_dark</item>
- <item name="colorMultiSelectHighlight">@color/holo_green_light</item>
- <item name="colorActivatedHighlight">@color/holo_blue_dark</item>
-
<!-- Text styles -->
<item name="textAppearance">@style/TextAppearance.Quantum.Light</item>
<item name="textAppearanceInverse">@style/TextAppearance.Quantum.Light.Inverse</item>
<item name="textColorPrimary">@color/primary_text_quantum_light</item>
- <item name="textColorSecondary">@color/secondary_text_quantum_light</item>
- <item name="textColorTertiary">@color/tertiary_text_quantum_light</item>
<item name="textColorPrimaryInverse">@color/primary_text_quantum_dark</item>
+ <item name="textColorSecondary">@color/secondary_text_quantum_light</item>
<item name="textColorSecondaryInverse">@color/secondary_text_quantum_dark</item>
+ <item name="textColorTertiary">@color/tertiary_text_quantum_light</item>
<item name="textColorTertiaryInverse">@color/tertiary_text_quantum_dark</item>
<item name="textColorPrimaryDisableOnly">@color/primary_text_disable_only_quantum_light</item>
<item name="textColorPrimaryInverseDisableOnly">@color/primary_text_disable_only_quantum_dark</item>
- <item name="textColorPrimaryNoDisable">@color/primary_text_nodisable_quantum_light</item>
- <item name="textColorSecondaryNoDisable">@color/secondary_text_nodisable_quantum_light</item>
- <item name="textColorPrimaryInverseNoDisable">@color/primary_text_nodisable_quantum_dark</item>
- <item name="textColorSecondaryInverseNoDisable">@color/secondary_text_nodisable_quantum_dark</item>
<item name="textColorHint">@color/hint_foreground_quantum_light</item>
<item name="textColorHintInverse">@color/hint_foreground_quantum_dark</item>
- <item name="textColorSearchUrl">@color/search_url_text_quantum_light</item>
<item name="textColorHighlight">@color/highlighted_text_quantum_light</item>
<item name="textColorHighlightInverse">@color/highlighted_text_quantum_dark</item>
- <item name="textColorLink">@color/holo_blue_light</item>
- <item name="textColorLinkInverse">@color/holo_blue_light</item>
+ <item name="textColorLink">@color/quantum_teal_500</item>
+ <item name="textColorLinkInverse">@color/quantum_teal_500</item>
+ <item name="textColorSearchUrl">@color/search_url_text_quantum_light</item>
<item name="textColorAlertDialogListItem">@color/primary_text_quantum_light</item>
<item name="textAppearanceLarge">@style/TextAppearance.Quantum.Light.Large</item>
- <item name="textAppearanceMedium">@style/TextAppearance.Quantum.Light.Medium</item>
- <item name="textAppearanceSmall">@style/TextAppearance.Quantum.Light.Small</item>
<item name="textAppearanceLargeInverse">@style/TextAppearance.Quantum.Light.Large.Inverse</item>
+ <item name="textAppearanceMedium">@style/TextAppearance.Quantum.Light.Medium</item>
<item name="textAppearanceMediumInverse">@style/TextAppearance.Quantum.Light.Medium.Inverse</item>
+ <item name="textAppearanceSmall">@style/TextAppearance.Quantum.Light.Small</item>
<item name="textAppearanceSmallInverse">@style/TextAppearance.Quantum.Light.Small.Inverse</item>
<item name="textAppearanceSearchResultTitle">@style/TextAppearance.Quantum.Light.SearchResult.Title</item>
<item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.Quantum.Light.SearchResult.Subtitle</item>
@@ -419,7 +398,7 @@
<item name="textAppearanceButton">@style/TextAppearance.Quantum.Light.Widget.Button</item>
<item name="editTextColor">?attr/textColorPrimary</item>
- <item name="editTextBackground">@drawable/edit_text_holo_light</item>
+ <item name="editTextBackground">@drawable/edit_text_quantum_light</item>
<item name="candidatesTextStyleSpans">@string/candidates_style</item>
@@ -441,7 +420,7 @@
<item name="selectableItemBackground">@drawable/item_background_quantum_light</item>
<item name="borderlessButtonStyle">@style/Widget.Quantum.Light.Button.Borderless</item>
- <item name="homeAsUpIndicator">@drawable/ic_ab_back_holo_light</item>
+ <item name="homeAsUpIndicator">@drawable/ic_ab_back_quantum_light</item>
<!-- List attributes -->
<item name="listPreferredItemHeight">64dip</item>
@@ -456,15 +435,15 @@
<!-- @hide -->
<item name="searchResultListItemHeight">58dip</item>
- <item name="listDivider">@drawable/list_divider_holo_light</item>
+ <item name="listDivider">@drawable/list_divider_quantum_light</item>
<item name="listSeparatorTextViewStyle">@style/Widget.Quantum.Light.TextView.ListSeparator</item>
- <item name="listChoiceIndicatorSingle">@drawable/btn_radio_holo_light</item>
- <item name="listChoiceIndicatorMultiple">@drawable/btn_check_holo_light</item>
+ <item name="listChoiceIndicatorSingle">@drawable/btn_radio_quantum_light</item>
+ <item name="listChoiceIndicatorMultiple">@drawable/btn_check_quantum_light</item>
- <item name="listChoiceBackgroundIndicator">@drawable/list_selector_quantum_light</item>
+ <item name="listChoiceBackgroundIndicator">@drawable/list_selector_holo_light</item>
- <item name="activatedBackgroundIndicator">@drawable/activated_background_holo_light</item>
+ <item name="activatedBackgroundIndicator">@drawable/activated_background_quantum_light</item>
<item name="expandableListPreferredItemPaddingLeft">40dip</item>
<item name="expandableListPreferredChildPaddingLeft">?attr/expandableListPreferredItemPaddingLeft</item>
@@ -474,9 +453,9 @@
<item name="expandableListPreferredChildIndicatorLeft">?attr/expandableListPreferredItemIndicatorLeft</item>
<item name="expandableListPreferredChildIndicatorRight">?attr/expandableListPreferredItemIndicatorRight</item>
- <item name="listDividerAlertDialog">@drawable/list_divider_holo_light</item>
- <item name="findOnPageNextDrawable">@drawable/ic_find_next_holo_light</item>
- <item name="findOnPagePreviousDrawable">@drawable/ic_find_previous_holo_light</item>
+ <item name="listDividerAlertDialog">@drawable/list_divider_quantum_light</item>
+ <item name="findOnPageNextDrawable">@drawable/ic_find_next_quantum_light</item>
+ <item name="findOnPagePreviousDrawable">@drawable/ic_find_previous_quantum_light</item>
<!-- Gallery attributes -->
<item name="galleryItemBackground">@drawable/gallery_item_background</item>
@@ -488,7 +467,7 @@
<item name="windowFullscreen">false</item>
<item name="windowOverscan">false</item>
<item name="windowIsFloating">false</item>
- <item name="windowContentOverlay">@drawable/ab_solid_shadow_holo</item>
+ <item name="windowContentOverlay">@drawable/ab_solid_shadow_qntm</item>
<item name="windowShowWallpaper">false</item>
<item name="windowTitleStyle">@style/WindowTitle.Quantum</item>
<item name="windowTitleSize">25dip</item>
@@ -508,7 +487,7 @@
<item name="alertDialogTheme">@style/Theme.Quantum.Light.Dialog.Alert</item>
<item name="alertDialogStyle">@style/AlertDialog.Quantum.Light</item>
<item name="alertDialogCenterButtons">false</item>
- <item name="alertDialogIcon">@drawable/ic_dialog_alert_holo_light</item>
+ <item name="alertDialogIcon">@drawable/ic_dialog_alert_quantum_light</item>
<!-- Presentation attributes -->
<item name="presentationTheme">@style/Theme.Quantum.Light.Dialog.Presentation</item>
@@ -517,7 +496,7 @@
<item name="toastFrameBackground">@drawable/toast_frame</item>
<!-- Panel attributes -->
- <item name="panelBackground">@drawable/menu_hardkey_panel_holo_light</item>
+ <item name="panelBackground">?attr/colorBackground</item>
<item name="panelFullBackground">@drawable/menu_background_fill_parent_width</item>
<!-- These three attributes do not seems to be used by the framework. Declared public though -->
<item name="panelColorBackground">#000</item>
@@ -532,8 +511,8 @@
<item name="scrollbarFadeDuration">250</item>
<item name="scrollbarDefaultDelayBeforeFade">300</item>
<item name="scrollbarSize">10dip</item>
- <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_holo_light</item>
- <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_holo_light</item>
+ <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_quantum_light</item>
+ <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_quantum_light</item>
<item name="scrollbarTrackHorizontal">@null</item>
<item name="scrollbarTrackVertical">@null</item>
@@ -543,7 +522,7 @@
<item name="textSelectHandle">@drawable/text_select_handle_middle</item>
<item name="textSelectHandleWindowStyle">@style/Widget.Quantum.TextSelectHandle</item>
<item name="textSuggestionsWindowStyle">@style/Widget.Quantum.Light.TextSuggestionsPopupWindow</item>
- <item name="textCursorDrawable">@drawable/text_cursor_holo_light</item>
+ <item name="textCursorDrawable">@drawable/text_cursor_quantum_light</item>
<!-- Widget styles -->
<item name="absListViewStyle">@style/Widget.Quantum.Light.AbsListView</item>
@@ -617,7 +596,7 @@
<item name="editTextPreferenceStyle">@style/Preference.Quantum.DialogPreference.EditTextPreference</item>
<item name="ringtonePreferenceStyle">@style/Preference.Quantum.RingtonePreference</item>
<item name="preferenceLayoutChild">@layout/preference_child_holo</item>
- <item name="detailsElementBackground">@drawable/panel_bg_holo_light</item>
+ <item name="detailsElementBackground">?attr/colorBackground</item>
<!-- PreferenceFrameLayout attributes -->
<item name="preferenceFrameLayoutStyle">@style/Widget.Quantum.PreferenceFrameLayout</item>
@@ -631,7 +610,7 @@
<item name="actionOverflowButtonStyle">@style/Widget.Quantum.Light.ActionButton.Overflow</item>
<item name="actionModeBackground">@drawable/cab_background_top_holo_light</item>
<item name="actionModeSplitBackground">@drawable/cab_background_bottom_holo_light</item>
- <item name="actionModeCloseDrawable">@drawable/ic_cab_done_holo_light</item>
+ <item name="actionModeCloseDrawable">@drawable/ic_cab_done_quantum_light</item>
<item name="actionBarTabStyle">@style/Widget.Quantum.Light.ActionBar.TabView</item>
<item name="actionBarTabBarStyle">@style/Widget.Quantum.Light.ActionBar.TabBar</item>
<item name="actionBarTabTextStyle">@style/Widget.Quantum.Light.ActionBar.TabText</item>
@@ -641,14 +620,15 @@
<item name="actionBarSize">@dimen/action_bar_default_height</item>
<item name="actionModePopupWindowStyle">@style/Widget.Quantum.Light.PopupWindow.ActionMode</item>
<item name="actionBarWidgetTheme">@null</item>
+ <item name="actionBarItemBackground">@drawable/item_background_borderless_quantum_light</item>
- <item name="actionModeCutDrawable">@drawable/ic_menu_cut_holo_light</item>
- <item name="actionModeCopyDrawable">@drawable/ic_menu_copy_holo_light</item>
- <item name="actionModePasteDrawable">@drawable/ic_menu_paste_holo_light</item>
- <item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_holo_light</item>
- <item name="actionModeShareDrawable">@drawable/ic_menu_share_holo_light</item>
- <item name="actionModeFindDrawable">@drawable/ic_menu_find_holo_light</item>
- <item name="actionModeWebSearchDrawable">@drawable/ic_menu_search_holo_light</item>
+ <item name="actionModeCutDrawable">@drawable/ic_menu_cut_quantum_light</item>
+ <item name="actionModeCopyDrawable">@drawable/ic_menu_copy_quantum_light</item>
+ <item name="actionModePasteDrawable">@drawable/ic_menu_paste_quantum_light</item>
+ <item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_quantum_light</item>
+ <item name="actionModeShareDrawable">@drawable/ic_menu_share_quantum_light</item>
+ <item name="actionModeFindDrawable">@drawable/ic_menu_find_quantum_light</item>
+ <item name="actionModeWebSearchDrawable">@drawable/ic_menu_search_quantum_light</item>
<item name="dividerVertical">?attr/listDivider</item>
<item name="dividerHorizontal">?attr/listDivider</item>
@@ -685,45 +665,18 @@
<!-- DatePicker style -->
<item name="datePickerStyle">@style/Widget.Quantum.Light.DatePicker</item>
- <item name="fastScrollThumbDrawable">@drawable/fastscroll_thumb_holo</item>
+ <item name="fastScrollThumbDrawable">@drawable/fastscroll_thumb_quantum_light</item>
<item name="fastScrollPreviewBackgroundLeft">@drawable/fastscroll_label_left_holo_light</item>
<item name="fastScrollPreviewBackgroundRight">@drawable/fastscroll_label_right_holo_light</item>
- <item name="fastScrollTrackDrawable">@drawable/fastscroll_track_holo_light</item>
+ <item name="fastScrollTrackDrawable">@drawable/fastscroll_track_quantum_light</item>
<item name="fastScrollOverlayPosition">atThumb</item>
-
</style>
<!-- Variant of the quantum (light) theme that has a solid (opaque) action bar
with an inverse color profile. The dark action bar sharply stands out against
the light content. -->
<style name="Theme.Quantum.Light.DarkActionBar">
- <item name="windowContentOverlay">@drawable/ab_solid_shadow_holo</item>
- <item name="actionBarStyle">@style/Widget.Quantum.Light.ActionBar.Solid.Inverse</item>
- <item name="actionBarWidgetTheme">@style/Theme.Quantum</item>
-
- <item name="actionDropDownStyle">@style/Widget.Quantum.Spinner.DropDown.ActionBar</item>
- <item name="actionButtonStyle">@style/Widget.Quantum.ActionButton</item>
- <item name="actionOverflowButtonStyle">@style/Widget.Quantum.ActionButton.Overflow</item>
- <item name="actionModeBackground">@drawable/cab_background_top_holo_dark</item>
- <item name="actionModeSplitBackground">@drawable/cab_background_bottom_holo_dark</item>
- <item name="actionModeCloseDrawable">@drawable/ic_cab_done_holo_dark</item>
- <item name="homeAsUpIndicator">@drawable/ic_ab_back_holo_dark</item>
- <item name="actionBarTabStyle">@style/Widget.Quantum.Light.ActionBar.TabView.Inverse</item>
- <item name="actionBarTabBarStyle">@style/Widget.Quantum.Light.ActionBar.TabBar.Inverse</item>
- <item name="actionBarTabTextStyle">@style/Widget.Quantum.Light.ActionBar.TabText.Inverse</item>
- <item name="actionBarDivider">@drawable/list_divider_holo_dark</item>
- <item name="actionMenuTextColor">?attr/textColorPrimaryInverse</item>
- <item name="actionModeStyle">@style/Widget.Quantum.Light.ActionMode.Inverse</item>
- <item name="actionModeCloseButtonStyle">@style/Widget.Quantum.ActionButton.CloseMode</item>
- <item name="actionModePopupWindowStyle">@style/Widget.Quantum.PopupWindow.ActionMode</item>
-
- <item name="actionModeCutDrawable">@drawable/ic_menu_cut_holo_dark</item>
- <item name="actionModeCopyDrawable">@drawable/ic_menu_copy_holo_dark</item>
- <item name="actionModePasteDrawable">@drawable/ic_menu_paste_holo_dark</item>
- <item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_holo_dark</item>
- <item name="actionModeShareDrawable">@drawable/ic_menu_share_holo_dark</item>
- <item name="actionModeFindDrawable">@drawable/ic_menu_find_holo_dark</item>
- <item name="actionModeWebSearchDrawable">@drawable/ic_menu_search_holo_dark</item>
+ <item name="actionBarTheme">@style/Theme.Quantum</item>
</style>
<!-- Variant of the quantum (dark) theme with no action bar. -->
@@ -877,7 +830,7 @@
<style name="Theme.Quantum.Dialog">
<item name="windowFrame">@null</item>
<item name="windowTitleStyle">@style/DialogWindowTitle.Quantum</item>
- <item name="windowBackground">@drawable/dialog_full_holo_dark</item>
+ <item name="windowBackground">?attr/colorBackground</item>
<item name="windowIsFloating">true</item>
<item name="windowContentOverlay">@null</item>
<item name="windowAnimationStyle">@style/Animation.Quantum.Dialog</item>
@@ -999,7 +952,7 @@
<style name="Theme.Quantum.Light.Dialog">
<item name="windowFrame">@null</item>
<item name="windowTitleStyle">@style/DialogWindowTitle.Quantum.Light</item>
- <item name="windowBackground">@drawable/dialog_full_holo_light</item>
+ <item name="windowBackground">?attr/colorBackground</item>
<item name="windowIsFloating">true</item>
<item name="windowContentOverlay">@null</item>
<item name="windowAnimationStyle">@style/Animation.Quantum.Dialog</item>
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java
index 04ce4b7..91c3093 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java
@@ -27,6 +27,7 @@
import android.net.wifi.WifiManager;
import android.os.Environment;
import android.os.PowerManager;
+import android.os.SystemClock;
import android.provider.Settings;
import android.view.KeyEvent;
import android.test.suitebuilder.annotation.LargeTest;
@@ -52,6 +53,7 @@
extends ConnectivityManagerTestBase {
private final static String TAG = "WifiStressTest";
+ private final static long SCREEN_OFF_TIMER = 500; //500ms
/**
* Wi-Fi idle time for default sleep policy
*/
@@ -157,11 +159,11 @@
writeOutput(String.format("average scanning time is %d", averageScanTime));
writeOutput(String.format("ssid appear %d out of %d scan iterations",
ssidAppearInScanResultsCount, i));
- long startTime = System.currentTimeMillis();
+ long startTime = SystemClock.uptimeMillis();
scanResultAvailable = false;
assertTrue("start scan failed", mWifiManager.startScan());
while (true) {
- if ((System.currentTimeMillis() - startTime) >
+ if ((SystemClock.uptimeMillis() - startTime) >
WIFI_SCAN_TIMEOUT) {
fail("Wifi scanning takes more than " + WIFI_SCAN_TIMEOUT + " ms");
}
@@ -172,7 +174,7 @@
e.printStackTrace();
}
if (scanResultAvailable) {
- long scanTime = (System.currentTimeMillis() - startTime);
+ long scanTime = (SystemClock.uptimeMillis() - startTime);
scanTimeSum += scanTime;
break;
}
@@ -255,8 +257,13 @@
i, mReconnectIterations));
log("iteration: " + i);
turnScreenOff();
+ // Use clock time since boot for intervals.
+ long start = SystemClock.uptimeMillis();
PowerManager pm =
(PowerManager)mRunner.getContext().getSystemService(Context.POWER_SERVICE);
+ while (pm.isScreenOn() && ((SystemClock.uptimeMillis() - start) < SCREEN_OFF_TIMER)) {
+ sleep(100, "wait for screen off");
+ }
assertFalse(pm.isScreenOn());
sleep(WIFI_IDLE_MS + WIFI_SHUTDOWN_DELAY, "Interruped while wait for wifi to be idle");
assertTrue("Wait for Wi-Fi to idle timeout",
@@ -287,14 +294,14 @@
mRunner.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
// Measure the time for Wi-Fi to get connected
- long startTime = System.currentTimeMillis();
+ long startTime = SystemClock.uptimeMillis();
assertTrue("Wait for Wi-Fi enable timeout after wake up",
waitForWifiState(WifiManager.WIFI_STATE_ENABLED,
SHORT_TIMEOUT));
assertTrue("Wait for Wi-Fi connection timeout after wake up",
waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
WIFI_CONNECTION_TIMEOUT));
- long connectionTime = System.currentTimeMillis() - startTime;
+ long connectionTime = SystemClock.uptimeMillis() - startTime;
sum += connectionTime;
log("average reconnection time is: " + sum/(i+1));
diff --git a/core/tests/inputmethodtests/src/android/os/InputMethodTest.java b/core/tests/inputmethodtests/src/android/os/InputMethodTest.java
index 3083f35..fa1bd8f 100644
--- a/core/tests/inputmethodtests/src/android/os/InputMethodTest.java
+++ b/core/tests/inputmethodtests/src/android/os/InputMethodTest.java
@@ -101,20 +101,15 @@
final List<InputMethodInfo> clonedList = cloneViaParcel(originalList);
assertNotNull(clonedList);
- assertEquals(originalList.size(), clonedList.size());
+ final List<InputMethodInfo> clonedClonedList = cloneViaParcel(clonedList);
+ assertNotNull(clonedClonedList);
assertEquals(originalList, clonedList);
-
+ assertEquals(clonedList, clonedClonedList);
+ assertEquals(originalList.size(), clonedList.size());
+ assertEquals(clonedList.size(), clonedClonedList.size());
for (int imeIndex = 0; imeIndex < originalList.size(); ++imeIndex) {
- final InputMethodInfo original = originalList.get(imeIndex);
- final InputMethodInfo cloned = clonedList.get(imeIndex);
- assertEquals(original, cloned);
- assertEquals(original.getSubtypeCount(), cloned.getSubtypeCount());
- for (int subtypeIndex = 0; subtypeIndex < original.getSubtypeCount(); ++subtypeIndex) {
- final InputMethodSubtype originalSubtype = original.getSubtypeAt(subtypeIndex);
- final InputMethodSubtype clonedSubtype = cloned.getSubtypeAt(subtypeIndex);
- assertEquals(originalSubtype, clonedSubtype);
- assertEquals(originalSubtype.hashCode(), clonedSubtype.hashCode());
- }
+ verifyEquality(originalList.get(imeIndex), clonedList.get(imeIndex));
+ verifyEquality(clonedList.get(imeIndex), clonedClonedList.get(imeIndex));
}
}
@@ -132,6 +127,17 @@
}
}
+ private static void verifyEquality(InputMethodInfo expected, InputMethodInfo actual) {
+ assertEquals(expected, actual);
+ assertEquals(expected.getSubtypeCount(), actual.getSubtypeCount());
+ for (int subtypeIndex = 0; subtypeIndex < expected.getSubtypeCount(); ++subtypeIndex) {
+ final InputMethodSubtype expectedSubtype = expected.getSubtypeAt(subtypeIndex);
+ final InputMethodSubtype actualSubtype = actual.getSubtypeAt(subtypeIndex);
+ assertEquals(expectedSubtype, actualSubtype);
+ assertEquals(expectedSubtype.hashCode(), actualSubtype.hashCode());
+ }
+ }
+
private static InputMethodInfo createDummyInputMethodInfo(String packageName, String name,
CharSequence label, boolean isAuxIme, boolean isDefault,
List<InputMethodSubtype> subtypes) {
diff --git a/data/fonts/system_fonts.xml b/data/fonts/system_fonts.xml
index 16e4c7c..549f061b 100644
--- a/data/fonts/system_fonts.xml
+++ b/data/fonts/system_fonts.xml
@@ -75,7 +75,6 @@
<name>baskerville</name>
<name>goudy</name>
<name>fantasy</name>
- <name>cursive</name>
<name>ITC Stone Serif</name>
</nameset>
<fileset>
@@ -108,4 +107,32 @@
</fileset>
</family>
+ <family>
+ <nameset>
+ <name>casual</name>
+ </nameset>
+ <fileset>
+ <file>ComingSoon.ttf</file>
+ </fileset>
+ </family>
+
+ <family>
+ <nameset>
+ <name>cursive</name>
+ </nameset>
+ <fileset>
+ <file>DancingScript-Regular.ttf</file>
+ <file>DancingScript-Bold.ttf</file>
+ </fileset>
+ </family>
+
+ <family>
+ <nameset>
+ <name>sans-serif-smallcaps</name>
+ </nameset>
+ <fileset>
+ <file>CarroisGothicSC-Regular.ttf</file>
+ </fileset>
+ </family>
+
</familyset>
diff --git a/docs/html/about/dashboards/index.jd b/docs/html/about/dashboards/index.jd
index bcd4607..6d29c69 100644
--- a/docs/html/about/dashboards/index.jd
+++ b/docs/html/about/dashboards/index.jd
@@ -61,7 +61,7 @@
</div>
-<p style="clear:both"><em>Data collected during a 7-day period ending on February 4, 2014.
+<p style="clear:both"><em>Data collected during a 7-day period ending on March 3, 2014.
<br/>Any versions with less than 0.1% distribution are not shown.</em>
</p>
@@ -92,7 +92,7 @@
</div>
-<p style="clear:both"><em>Data collected during a 7-day period ending on February 4, 2014.
+<p style="clear:both"><em>Data collected during a 7-day period ending on March 3, 2014.
<br/>Any screen configurations with less than 0.1% distribution are not shown.</em></p>
@@ -133,17 +133,17 @@
</tr>
<tr>
<td>2.0</th>
-<td>92.3%</td>
+<td>91.1%</td>
</tr>
<tr>
<td>3.0</th>
-<td>7.6%</td>
+<td>8.8%</td>
</tr>
</table>
-<p style="clear:both"><em>Data collected during a 7-day period ending on February 4, 2014</em></p>
+<p style="clear:both"><em>Data collected during a 7-day period ending on March 3, 2014</em></p>
@@ -161,17 +161,17 @@
var VERSION_DATA =
[
{
- "chart": "//chart.googleapis.com/chart?cht=p&chs=500x250&chl=Froyo%7CGingerbread%7CHoneycomb%7CIce%20Cream%20Sandwich%7CJelly%20Bean%7CKitKat&chf=bg%2Cs%2C00000000&chd=t%3A1.3%2C20.0%2C0.1%2C16.1%2C60.7%2C1.8&chco=c4df9b%2C6fad0c",
+ "chart": "//chart.googleapis.com/chart?chl=Froyo%7CGingerbread%7CHoneycomb%7CIce%20Cream%20Sandwich%7CJelly%20Bean%7CKitKat&chd=t%3A1.2%2C19.0%2C0.1%2C15.2%2C62.0%2C2.5&chf=bg%2Cs%2C00000000&chco=c4df9b%2C6fad0c&chs=500x250&cht=p",
"data": [
{
"api": 8,
"name": "Froyo",
- "perc": "1.3"
+ "perc": "1.2"
},
{
"api": 10,
"name": "Gingerbread",
- "perc": "20.0"
+ "perc": "19.0"
},
{
"api": 13,
@@ -181,27 +181,27 @@
{
"api": 15,
"name": "Ice Cream Sandwich",
- "perc": "16.1"
+ "perc": "15.2"
},
{
"api": 16,
"name": "Jelly Bean",
- "perc": "35.5"
+ "perc": "35.3"
},
{
"api": 17,
"name": "Jelly Bean",
- "perc": "16.3"
+ "perc": "17.1"
},
{
"api": 18,
"name": "Jelly Bean",
- "perc": "8.9"
+ "perc": "9.6"
},
{
"api": 19,
"name": "KitKat",
- "perc": "1.8"
+ "perc": "2.5"
}
]
}
@@ -217,17 +217,17 @@
"data": {
"Large": {
"hdpi": "0.6",
- "ldpi": "0.8",
- "mdpi": "4.4",
- "tvdpi": "1.6",
+ "ldpi": "0.7",
+ "mdpi": "4.3",
+ "tvdpi": "1.5",
"xhdpi": "0.6"
},
"Normal": {
- "hdpi": "33.3",
- "ldpi": "0.1",
- "mdpi": "13.9",
- "xhdpi": "20.2",
- "xxhdpi": "11.3"
+ "hdpi": "33.7",
+ "ldpi": "0.2",
+ "mdpi": "13.6",
+ "xhdpi": "19.9",
+ "xxhdpi": "11.9"
},
"Small": {
"ldpi": "8.1"
@@ -235,12 +235,12 @@
"Xlarge": {
"hdpi": "0.3",
"ldpi": "0.1",
- "mdpi": "4.5",
+ "mdpi": "4.3",
"xhdpi": "0.2"
}
},
- "densitychart": "//chart.googleapis.com/chart?cht=p&chs=400x250&chl=ldpi%7Cmdpi%7Ctvdpi%7Chdpi%7Cxhdpi%7Cxxhdpi&chf=bg%2Cs%2C00000000&chd=t%3A9.1%2C22.8%2C1.6%2C34.3%2C21.0%2C11.3&chco=c4df9b%2C6fad0c",
- "layoutchart": "//chart.googleapis.com/chart?cht=p&chs=400x250&chl=Xlarge%7CLarge%7CNormal%7CSmall&chf=bg%2Cs%2C00000000&chd=t%3A5.1%2C8.0%2C78.9%2C8.1&chco=c4df9b%2C6fad0c"
+ "densitychart": "//chart.googleapis.com/chart?chl=ldpi%7Cmdpi%7Ctvdpi%7Chdpi%7Cxhdpi%7Cxxhdpi&chd=t%3A9.1%2C22.2%2C1.5%2C34.6%2C20.7%2C11.9&chf=bg%2Cs%2C00000000&chco=c4df9b%2C6fad0c&chs=400x250&cht=p",
+ "layoutchart": "//chart.googleapis.com/chart?chl=Xlarge%7CLarge%7CNormal%7CSmall&chd=t%3A4.9%2C7.7%2C79.3%2C8.1&chf=bg%2Cs%2C00000000&chco=c4df9b%2C6fad0c&chs=400x250&cht=p"
}
];
diff --git a/docs/html/distribute/googleplay/promote/badge-files.jd b/docs/html/distribute/googleplay/promote/badge-files.jd
index ede1e21..03ebd01 100644
--- a/docs/html/distribute/googleplay/promote/badge-files.jd
+++ b/docs/html/distribute/googleplay/promote/badge-files.jd
@@ -18,107 +18,112 @@
<div class="col-4" style="margin-left:0">
- <a href="{@docRoot}downloads/brand/en_generic_rgb_wo.ai">English (English)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/english_get.ai">English (English)</a><br/>
+
+ <a href="{@docRoot}downloads/brand/v2/amharic_get.ai">ኣማርኛ (Amharic)</a><br/>
<a href="{@docRoot}downloads/brand/af_generic_rgb_wo.ai">Afrikaans (Afrikaans)</a><br/>
<!--
<a href="{@docRoot}downloads/brand/ar_generic_rgb_wo.ai">العربية (Arabic)</a><br/>
-->
- <a href="{@docRoot}downloads/brand/be_generic_rgb_wo.ai">Беларуская (Belarusian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/belarusian_get.ai">Беларуская (Belarusian)</a><br/>
- <a href="{@docRoot}downloads/brand/bg_generic_rgb_wo.ai">български (Bulgarian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/bulgarian_get.ai">български (Bulgarian)</a><br/>
- <a href="{@docRoot}downloads/brand/ca_generic_rgb_wo.ai">Català (Catalan)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/catalan_get.ai">Català (Catalan)</a><br/>
- <a href="{@docRoot}downloads/brand/zh-cn_generic_rgb_wo.ai">中文 (中国) (Chinese)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/traditional_chinese_get.ai">中文 (中国) (Chinese)</a><br/>
- <a href="{@docRoot}downloads/brand/zh-hk_generic_rgb_wo.ai">中文(香港) (Chinese Hong Kong)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/hongkong_chinese_get.ai">中文(香港) (Chinese Hong Kong)</a><br/>
- <a href="{@docRoot}downloads/brand/zh-tw_generic_rgb_wo.ai">中文 (台灣) (Chinese Taiwan)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/taiwan_chinese_get.ai">中文 (台灣) (Chinese Taiwan)</a><br/>
- <a href="{@docRoot}downloads/brand/hr_generic_rgb_wo.ai">Hrvatski (Croatian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/croatian_get.ai">Hrvatski (Croatian)</a><br/>
- <a href="{@docRoot}downloads/brand/cs_generic_rgb_wo.ai">Česky (Czech)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/czech_get.ai">Česky (Czech)</a><br/>
- <a href="{@docRoot}downloads/brand/da_generic_rgb_wo.ai">Dansk (Danish)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/danish_get.ai">Dansk (Danish)</a><br/>
- <a href="{@docRoot}downloads/brand/nl_generic_rgb_wo.ai">Nederlands (Dutch)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/dutch_get.ai">Nederlands (Dutch)</a><br/>
- <a href="{@docRoot}downloads/brand/et_generic_rgb_wo.ai">Eesti keel (Estonian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/estonian_get.ai">Eesti keel (Estonian)</a><br/>
- <a href="{@docRoot}downloads/brand/fa_generic_rgb_wo.ai">فارسی (Farsi Persian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/farsi_get.ai">فارسی (Farsi Persian)</a><br/>
- <a href="{@docRoot}downloads/brand/fil_generic_rgb_wo.ai">Tagalog (Filipino)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/filipino_get.ai">Tagalog (Filipino)</a><br/>
- <a href="{@docRoot}downloads/brand/fi_generic_rgb_wo.ai">Suomi (Finnish)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/finnish_get.ai">Suomi (Finnish)</a><br/>
</div>
<div class="col-4">
- <a href="{@docRoot}downloads/brand/fr_generic_rgb_wo.ai">Français (French)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/french_get.ai">Français (French)</a><br/>
- <a href="{@docRoot}downloads/brand/de_generic_rgb_wo.ai">Deutsch (German)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/german_get.ai">Deutsch (German)</a><br/>
- <a href="{@docRoot}downloads/brand/el_generic_rgb_wo.ai">Ελληνικά (Greek)</a><br/>
-<!--
- <a href="{@docRoot}downloads/brand/iw-he_generic_rgb_wo.ai">עברית (Hebrew)</a><br/>
--->
- <a href="{@docRoot}downloads/brand/hu_generic_rgb_wo.ai">Magyar (Hungarian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/greek_get.ai">Ελληνικά (Greek)</a><br/>
- <a href="{@docRoot}downloads/brand/id-in_generic_rgb_wo.ai">Bahasa Indonesia (Indonesian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/hebrew_get.ai">עברית (Hebrew)</a><br/>
- <a href="{@docRoot}downloads/brand/it_generic_rgb_wo.ai">Italiano (Italian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/hindi_get.ai">हिन्दी (Hindi)</a><br/>
- <a href="{@docRoot}downloads/brand/ja_generic_rgb_wo.ai">日本語 (Japanese)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/hungarian_get.ai">Magyar (Hungarian)</a><br/>
- <a href="{@docRoot}downloads/brand/ko_generic_rgb_wo.ai">한국어 (Korean)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/indonesian_get.ai">Bahasa Indonesia (Indonesian)</a><br/>
- <a href="{@docRoot}downloads/brand/lv_generic_rgb_wo.ai">Latviski (Latvian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/italian_get.ai">Italiano (Italian)</a><br/>
- <a href="{@docRoot}downloads/brand/lt_generic_rgb_wo.ai">Lietuviškai (Lithuanian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/japanese_get.ai">日本語 (Japanese)</a><br/>
- <a href="{@docRoot}downloads/brand/ms_generic_rgb_wo.ai">Bahasa Melayu (Malay)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/kazakh_get.ai">Қазақ тілі (Kazakh)</a><br/>
- <a href="{@docRoot}downloads/brand/no_generic_rgb_wo.ai">Norsk (Norwegian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/korean_get.ai">한국어 (Korean)</a><br/>
- <a href="{@docRoot}downloads/brand/pl_generic_rgb_wo.ai">Polski (Polish)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/latvian_get.ai">Latviski (Latvian)</a><br/>
- <a href="{@docRoot}downloads/brand/pt-pt_generic_rgb_wo.ai">Português (Portuguese)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/lithuanian_get.ai">Lietuviškai (Lithuanian)</a><br/>
- <a href="{@docRoot}downloads/brand/pt-br_generic_rgb_wo.ai">Português Brasil (Portuguese Brazil)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/malay_get.ai">Bahasa Melayu (Malay)</a><br/>
+
+ <a href="{@docRoot}downloads/brand/v2/norwegian_get.ai">Norsk (Norwegian)</a><br/>
+
+ <a href="{@docRoot}downloads/brand/v2/polish_get.ai">Polski (Polish)</a><br/>
</div>
<div class="col-4" style="margin-right:0">
- <a href="{@docRoot}downloads/brand/ro_generic_rgb_wo.ai">Românã (Romanian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/portugal_portuguese_get.ai">Português (Portuguese)</a><br/>
- <a href="{@docRoot}downloads/brand/ru_generic_rgb_wo.ai">Pусский (Russian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/brazilian_portuguese_get.ai">Português Brasil (Portuguese Brazil)</a><br/>
- <a href="{@docRoot}downloads/brand/sr_generic_rgb_wo.ai">Српски / srpski (Serbian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/romanian_get.ai">Românã (Romanian)</a><br/>
- <a href="{@docRoot}downloads/brand/sk_generic_rgb_wo.ai">Slovenčina (Slovak)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/russian_get.ai">Pусский (Russian)</a><br/>
- <a href="{@docRoot}downloads/brand/sl_generic_rgb_wo.ai">Slovenščina (Slovenian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/serbian_get.ai">Српски / srpski (Serbian)</a><br/>
+
+ <a href="{@docRoot}downloads/brand/v2/slovak_get.ai">Slovenčina (Slovak)</a><br/>
+
+ <a href="{@docRoot}downloads/brand/v2/slovenian_get.ai">Slovenščina (Slovenian)</a><br/>
- <a href="{@docRoot}downloads/brand/es_generic_rgb_wo.ai">Español (Spanish)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/spanish_get.ai">Español (Spanish)</a><br/>
- <a href="{@docRoot}downloads/brand/es-419_generic_rgb_wo.ai">Español Latinoamérica (Spanish Latin America)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/spanish_latam_get.ai">Español Latinoamérica (Spanish Latin America)</a><br/>
- <a href="{@docRoot}downloads/brand/sv_generic_rgb_wo.ai">Svenska (Swedish)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/swahili_get.ai">Kiswahili (Swahili)</a><br/>
- <a href="{@docRoot}downloads/brand/sw_generic_rgb_wo.ai">Kiswahili (Swahili)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/swedish_get.ai">Svenska (Swedish)</a><br/>
- <a href="{@docRoot}downloads/brand/th_generic_rgb_wo.ai">ภาษาไทย (Thai)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/thai_get.ai">ภาษาไทย (Thai)</a><br/>
- <a href="{@docRoot}downloads/brand/tr_generic_rgb_wo.ai">Türkçe (Turkish)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/turkish_get.ai">Türkçe (Turkish)</a><br/>
<a href="{@docRoot}downloads/brand/uk_generic_rgb_wo.ai">Українська (Ukrainian)</a><br/>
-
<a href="{@docRoot}downloads/brand/vi_generic_rgb_wo.ai">Tiếng Việt (Vietnamese)</a><br/>
- <a href="{@docRoot}downloads/brand/zu_generic_rgb_wo.ai">isiZulu (Zulu)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/zulu_get.ai">isiZulu (Zulu)</a><br/>
</div>
<div style="clear:left"> </div>
@@ -128,126 +133,122 @@
+
+
+
<hr>
<img src="{@docRoot}images/brand/en_app_rgb_wo_60.png" alt="Android App On Google Play">
<div style="clear:left"> </div>
-<div class="col-8" style="margin-left:0">
+<div class="col-4" style="margin-left:0">
- <a href="{@docRoot}downloads/brand/en_app_rgb_wo.ai">English (English)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/english_app.ai">English (English)</a><br/>
+
+ <a href="{@docRoot}downloads/brand/v2/afrikaans_app.ai">Afrikaans (Afrikaans)</a><br/>
+
+ <a href="{@docRoot}downloads/brand/v2/amharic_app.ai">ኣማርኛ (Amharic)</a><br/>
+
+ <a href="{@docRoot}downloads/brand/v2/arabic_app.ai">العربية (Arabic)</a><br/>
+
+ <a href="{@docRoot}downloads/brand/v2/belarusian_app.ai">Беларуская (Belarusian)</a><br/>
-<!--
- <a href="{@docRoot}downloads/brand/af_app_rgb_wo.ai">Afrikaans (Afrikaans)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/bulgarian_app.ai">български (Bulgarian)</a><br/>
- <a href="{@docRoot}downloads/brand/ar_app_rgb_wo.ai">العربية (Arabic)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/catalan_app.ai">Català (Catalan)</a><br/>
- <a href="{@docRoot}downloads/brand/be_app_rgb_wo.ai">Беларуская (Belarusian)</a><br/>
-
- <a href="{@docRoot}downloads/brand/bg_app_rgb_wo.ai">български (Bulgarian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/traditional_chinese_app.ai">中文 (中国) (Chinese)</a><br/>
- <a href="{@docRoot}downloads/brand/ca_app_rgb_wo.ai">Català (Catalan)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/hongkong_chinese_app.ai">中文(香港) (Chinese Hong Kong)</a><br/>
- <a href="{@docRoot}downloads/brand/zh-cn_app_rgb_wo.ai">中文 (中国) (Chinese)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/taiwan_chinese_app.ai">中文 (台灣) (Chinese Taiwan)</a><br/>
- <a href="{@docRoot}downloads/brand/zh-hk_app_rgb_wo.ai">中文(香港) (Chinese Hong Kong)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/croatian_app.ai">Hrvatski (Croatian)</a><br/>
- <a href="{@docRoot}downloads/brand/zh-tw_app_rgb_wo.ai">中文 (台灣) (Chinese Taiwan)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/czech_app.ai">Česky (Czech)</a><br/>
- <a href="{@docRoot}downloads/brand/hr_app_rgb_wo.ai">Hrvatski (Croatian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/danish_app.ai">Dansk (Danish)</a><br/>
- <a href="{@docRoot}downloads/brand/cs_app_rgb_wo.ai">Česky (Czech)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/dutch_app.ai">Nederlands (Dutch)</a><br/>
- <a href="{@docRoot}downloads/brand/da_app_rgb_wo.ai">Dansk (Danish)</a><br/>
--->
+ <a href="{@docRoot}downloads/brand/v2/estonian_app.ai">Eesti keel (Estonian)</a><br/>
- <a href="{@docRoot}downloads/brand/nl_app_rgb_wo.ai">Nederlands (Dutch)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/farsi_app.ai">فارسی (Farsi Persian)</a><br/>
-<!--
- <a href="{@docRoot}downloads/brand/et_app_rgb_wo.ai">Eesti keel (Estonian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/filipino_app.ai">Tagalog (Filipino)</a><br/>
- <a href="{@docRoot}downloads/brand/fa_app_rgb_wo.ai">فارسی (Farsi Persian)</a><br/>
-
- <a href="{@docRoot}downloads/brand/fil_app_rgb_wo.ai">Tagalog (Filipino)</a><br/>
-
- <a href="{@docRoot}downloads/brand/fi_app_rgb_wo.ai">Suomi (Finnish)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/finnish_app.ai">Suomi (Finnish)</a><br/>
</div>
<div class="col-4">
--->
- <a href="{@docRoot}downloads/brand/fr_app_rgb_wo.ai">Français (French)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/french_app.ai">Français (French)</a><br/>
- <a href="{@docRoot}downloads/brand/de_app_rgb_wo.ai">Deutsch (German)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/german_app.ai">Deutsch (German)</a><br/>
-<!--
- <a href="{@docRoot}downloads/brand/el_app_rgb_wo.ai">Ελληνικά (Greek)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/greek_app.ai">Ελληνικά (Greek)</a><br/>
- <a href="{@docRoot}downloads/brand/iw-he_app_rgb_wo.ai">עברית (Hebrew)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/hebrew_app.ai">עברית (Hebrew)</a><br/>
- <a href="{@docRoot}downloads/brand/hu_app_rgb_wo.ai">Magyar (Hungarian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/hindi_app.ai">हिन्दी (Hindi)</a><br/>
- <a href="{@docRoot}downloads/brand/id-in_app_rgb_wo.ai">Bahasa Indonesia (Indonesian)</a><br/>
--->
+ <a href="{@docRoot}downloads/brand/v2/hungarian_app.ai">Magyar (Hungarian)</a><br/>
- <a href="{@docRoot}downloads/brand/it_app_rgb_wo.ai">Italiano (Italian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/indonesian_app.ai">Bahasa Indonesia (Indonesian)</a><br/>
- <a href="{@docRoot}downloads/brand/ja_app_rgb_wo.ai">日本語 (Japanese)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/italian_app.ai">Italiano (Italian)</a><br/>
- <a href="{@docRoot}downloads/brand/ko_app_rgb_wo.ai">한국어 (Korean)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/japanese_app.ai">日本語 (Japanese)</a><br/>
-<!--
- <a href="{@docRoot}downloads/brand/lv_app_rgb_wo.ai">Latviski (Latvian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/korean_app.ai">한국어 (Korean)</a><br/>
- <a href="{@docRoot}downloads/brand/lt_app_rgb_wo.ai">Lietuviškai (Lithuanian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/latvian_app.ai">Latviski (Latvian)</a><br/>
- <a href="{@docRoot}downloads/brand/ms_app_rgb_wo.ai">Bahasa Melayu (Malay)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/lithuanian_app.ai">Lietuviškai (Lithuanian)</a><br/>
- <a href="{@docRoot}downloads/brand/no_app_rgb_wo.ai">Norsk (Norwegian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/malay_app.ai">Bahasa Melayu (Malay)</a><br/>
- <a href="{@docRoot}downloads/brand/pl_app_rgb_wo.ai">Polski (Polish)</a><br/>
--->
+ <a href="{@docRoot}downloads/brand/v2/norwegian_app.ai">Norsk (Norwegian)</a><br/>
- <a href="{@docRoot}downloads/brand/pt-pt_app_rgb_wo.ai">Português (Portuguese)</a><br/>
-
- <a href="{@docRoot}downloads/brand/pt-br_app_rgb_wo.ai">Português Brasil (Portuguese Brazil)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/polish_app.ai">Polski (Polish)</a><br/>
-<!--
</div>
<div class="col-4" style="margin-right:0">
- <a href="{@docRoot}downloads/brand/ro_app_rgb_wo.ai">Românã (Romanian)</a><br/>
- <a href="{@docRoot}downloads/brand/ru_app_rgb_wo.ai">Pусский (Russian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/portugal_portuguese_app.ai">Português (Portuguese)</a><br/>
- <a href="{@docRoot}downloads/brand/sr_app_rgb_wo.ai">Српски / srpski (Serbian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/brazilian_portuguese_app.ai">Português Brasil (Portuguese Brazil)</a><br/>
- <a href="{@docRoot}downloads/brand/sk_app_rgb_wo.ai">Slovenčina (Slovak)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/romanian_app.ai">Românã (Romanian)</a><br/>
- <a href="{@docRoot}downloads/brand/sl_app_rgb_wo.ai">Slovenščina (Slovenian)</a><br/>
--->
+ <a href="{@docRoot}downloads/brand/v2/russian_app.ai">Pусский (Russian)</a><br/>
- <a href="{@docRoot}downloads/brand/es_app_rgb_wo.ai">Español (Spanish)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/serbian_app.ai">Српски / srpski (Serbian)</a><br/>
- <a href="{@docRoot}downloads/brand/es-419_app_rgb_wo.ai">Español Latinoamérica (Spanish Latin America)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/slovak_app.ai">Slovenčina (Slovak)</a><br/>
-<!--
- <a href="{@docRoot}downloads/brand/sv_app_rgb_wo.ai">Svenska (Swedish)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/slovenian_app.ai">Slovenščina (Slovenian)</a><br/>
- <a href="{@docRoot}downloads/brand/sw_app_rgb_wo.ai">Kiswahili (Swahili)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/spanish_app.ai">Español (Spanish)</a><br/>
+
+ <a href="{@docRoot}downloads/brand/v2/spanish_latam_app.ai">Español Latinoamérica (Spanish Latin America)</a><br/>
+
+ <a href="{@docRoot}downloads/brand/v2/swahili_app.ai">Kiswahili (Swahili)</a><br/>
+
+ <a href="{@docRoot}downloads/brand/v2/swedish_app.ai">Svenska (Swedish)</a><br/>
- <a href="{@docRoot}downloads/brand/th_app_rgb_wo.ai">ภาษาไทย (Thai)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/thai_app.ai">ภาษาไทย (Thai)</a><br/>
- <a href="{@docRoot}downloads/brand/tr_app_rgb_wo.ai">Türkçe (Turkish)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/turkish_app.ai">Türkçe (Turkish)</a><br/>
- <a href="{@docRoot}downloads/brand/uk_app_rgb_wo.ai">Українська (Ukrainian)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/ukranian_app.ai">Українська (Ukrainian)</a><br/>
- <a href="{@docRoot}downloads/brand/vi_app_rgb_wo.ai">Tiếng Việt (Vietnamese)</a><br/>
+ <a href="{@docRoot}downloads/brand/v2/vietnamese_app.ai">Tiếng Việt (Vietnamese)</a><br/>
- <a href="{@docRoot}downloads/brand/zu_app_rgb_wo.ai">isiZulu (Zulu)</a><br/>
--->
+ <a href="{@docRoot}downloads/brand/v2/zulu_app.ai">isiZulu (Zulu)</a><br/>
</div>
<div style="clear:left"> </div>
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index bc22416..bc793f1 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -27,21 +27,21 @@
-sdk.linux_download=android-sdk_r22.3-linux.tgz
-sdk.linux_bytes=100968558
-sdk.linux_checksum=6ae581a906d6420ad67176dff25a31cc
+sdk.linux_download=android-sdk_r22.6-linux.tgz
+sdk.linux_bytes=100992666
+sdk.linux_checksum=dde27b72715e52693c1ebc908742fc40
-sdk.mac_download=android-sdk_r22.3-macosx.zip
-sdk.mac_bytes=74893875
-sdk.mac_checksum=ecde88ca1f05955826697848fcb4a9e7
+sdk.mac_download=android-sdk_r22.6-macosx.zip
+sdk.mac_bytes=74547402
+sdk.mac_checksum=10c0e2ab65444c4911d69356ca2343f5
-sdk.win_download=android-sdk_r22.3-windows.zip
-sdk.win_bytes=108847452
-sdk.win_checksum=9f0fe8c8884d6aee2b298fee203c62dc
+sdk.win_download=android-sdk_r22.6-windows.zip
+sdk.win_bytes=108862292
+sdk.win_checksum=6faa487d328be352a456c53d9cbf0e3d
-sdk.win_installer=installer_r22.3-windows.exe
-sdk.win_installer_bytes=88845794
-sdk.win_installer_checksum=ad50c4dd9e23cee65a1ed740ff3345fa
+sdk.win_installer=installer_r22.6-windows.exe
+sdk.win_installer_bytes=88856450
+sdk.win_installer_checksum=6e5351b414bd554f3ac4c79f9dd4d213
@@ -363,8 +363,8 @@
<div class="col-6 reqs" style="margin:0 0 15px 20px;display:none;">
<h5>Eclipse IDE</h5>
<ul>
- <li><a href="http://eclipse.org/mobile/">Eclipse</a> 3.6.2 (Helios) or greater
-<p class="note"><strong>Note:</strong> Eclipse 3.5 (Galileo) is no longer
+ <li><a href="http://eclipse.org/mobile/">Eclipse</a> 3.7.2 (Indigo) or greater
+<p class="note"><strong>Note:</strong> Eclipse 3.6 (Helios) is no longer
supported with the latest version of ADT.</p></li>
<li>Eclipse <a href="http://www.eclipse.org/jdt">JDT</a> plugin (included
in most Eclipse IDE packages) </li>
diff --git a/docs/html/sdk/installing/installing-adt.jd b/docs/html/sdk/installing/installing-adt.jd
index 66c3034..42cb92c 100644
--- a/docs/html/sdk/installing/installing-adt.jd
+++ b/docs/html/sdk/installing/installing-adt.jd
@@ -1,8 +1,8 @@
page.title=Installing the Eclipse Plugin
-adt.zip.version=22.3.0
-adt.zip.download=ADT-22.3.0.zip
-adt.zip.bytes=14493723
-adt.zip.checksum=0189080b23dfa0f866adafaaafcc34ab
+adt.zip.version=22.6.0
+adt.zip.download=ADT-22.6.0.zip
+adt.zip.bytes=14585211
+adt.zip.checksum=d95c6d8e678881f6c89f063b58d4162f
@jd:body
diff --git a/docs/html/tools/revisions/build-tools.jd b/docs/html/tools/revisions/build-tools.jd
index 749808f..c3c83ef 100644
--- a/docs/html/tools/revisions/build-tools.jd
+++ b/docs/html/tools/revisions/build-tools.jd
@@ -77,6 +77,18 @@
<div class="toggle-content opened">
<p><a href="#" onclick="return toggleContent(this)">
<img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img"
+ alt=""/>Build Tools, Revision 19.0.3</a> <em>(March 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+
+ <p>Fixed an issue with RenderScript support.</p>
+
+ </div>
+</div>
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
alt=""/>Build Tools, Revision 19.0.2</a> <em>(February 2014)</em>
</p>
<div class="toggle-content-toggleme">
diff --git a/docs/html/tools/sdk/eclipse-adt.jd b/docs/html/tools/sdk/eclipse-adt.jd
index c584ae5..d711e44 100644
--- a/docs/html/tools/sdk/eclipse-adt.jd
+++ b/docs/html/tools/sdk/eclipse-adt.jd
@@ -53,10 +53,73 @@
<p>For a summary of all known issues in ADT, see <a
href="http://tools.android.com/knownissues">http://tools.android.com/knownissues</a>.</p>
-
<div class="toggle-content opened">
<p><a href="#" onclick="return toggleContent(this)">
<img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img"
+ alt=""/>ADT 22.6.0</a> <em>(March 2014)</em>
+ </p>
+
+ <div class="toggle-content-toggleme">
+<dl>
+ <dt>Dependencies:</dt>
+
+ <dd>
+ <ul>
+ <li>Java 1.6 or higher is required.</li>
+ <li>Eclipse Indigo (Version 3.7.2) or higher is required.</li>
+ <li>This version of ADT is designed for use with
+ <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r22.6</a>.
+ If you haven't already installed SDK Tools r22.6 into your SDK, use the
+ Android SDK Manager to do so.</li>
+ </ul>
+ </dd>
+
+ <dt>General Notes:</dt>
+ <dd>
+ <ul>
+ <li><p>Added support for Java 7 language features like multi-catch, try-with-resources,
+ and the diamond operator. These features require version 19 or higher
+ of the Build Tools. Try-with-resources requires <code>minSdkVersion</code>
+ 19; the rest of the new language features require
+ <code>minSdkVersion</code> 8 or higher.</p>
+ <p>To use the new language features after installing ADT 22.6.0, ensure
+ that you run Eclipse on JDK 7 and change your application project settings
+ to use JDK 7.</p>
+ </li>
+ <li>Added new lint checks:
+ <ul>
+ <li>Security:
+ <ul>
+ <li>Look for code potentially affected by a <code>SecureRandom</code>
+ vulnerability.</li>
+ <li>Check that calls to <code>checkPermission</code> use the return
+ value.</li>
+ </ul>
+ </li>
+ <li>Check that production builds do not use mock location providers.</li>
+ </ul>
+ </li>
+ <li>Updated the New Project templates to include the
+ <a href="{@docRoot}tools/support-library/features.html#v7-appcompat">
+ v7 appcompat Support Library</a>.</li>
+ <li>Updated the Android tools libraries to include the rendering sandbox,
+ improvements for converting resource XML string declarations to layout
+ strings, and other updates.</li>
+ <li>Improved the Gradle export wizard. Note that the new importer in Android
+ Studio is the preferred way to migrate existing projects to Gradle.</li>
+ <li>Fixed a deadlock during startup.</li>
+ <li>Fixed an issue with RenderScript support. Using RenderScript support mode
+ now requires version 19.0.3 of the Build Tools.</li>
+ </ul>
+ </dd>
+
+</dl>
+</div>
+</div>
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img"
alt=""/>ADT 22.3.0</a> <em>(October 2013)</em>
</p>
diff --git a/docs/html/tools/sdk/ndk/index.jd b/docs/html/tools/sdk/ndk/index.jd
index 4e50d98..a22dc90 100644
--- a/docs/html/tools/sdk/ndk/index.jd
+++ b/docs/html/tools/sdk/ndk/index.jd
@@ -2,33 +2,33 @@
page.template=sdk
-ndk.mac64_download=android-ndk-r9c-darwin-x86_64.tar.bz2
-ndk.mac64_bytes=358350393
-ndk.mac64_checksum=154bc0248671b8609037218d3faa47f5
+ndk.mac64_download=android-ndk-r9d-darwin-x86_64.tar.bz2
+ndk.mac64_bytes=400339614
+ndk.mac64_checksum=c914164b1231c574dbe40debef7048be
-ndk.mac32_download=android-ndk-r9c-darwin-x86.tar.bz2
-ndk.mac32_bytes=352900444
-ndk.mac32_checksum=0ba391eb12d4eed6bd7dbff5d8804e0f
+ndk.mac32_download=android-ndk-r9d-darwin-x86.tar.bz2
+ndk.mac32_bytes=393866116
+ndk.mac32_checksum=ee6544bd8093c79ea08c2e3a6ffe3573
-ndk.linux64_download=android-ndk-r9c-linux-x86_64.tar.bz2
-ndk.linux64_bytes=371254928
-ndk.linux64_checksum=e9c3fd9881c811753bb57f701b3e05b1
+ndk.linux64_download=android-ndk-r9d-linux-x86_64.tar.bz2
+ndk.linux64_bytes=412879983
+ndk.linux64_checksum=c7c775ab3342965408d20fd18e71aa45
-ndk.linux32_download=android-ndk-r9c-linux-x86.tar.bz2
-ndk.linux32_bytes=365412557
-ndk.linux32_checksum=93d2aa9a40501b568037642cdb174643
+ndk.linux32_download=android-ndk-r9d-linux-x86.tar.bz2
+ndk.linux32_bytes=405218267
+ndk.linux32_checksum=6c1d7d99f55f0c17ecbcf81ba0eb201f
-ndk.win64_download=android-ndk-r9c-windows-x86_64.zip
-ndk.win64_bytes=483804820
-ndk.win64_checksum=9e84d0d59ce7d4a24370b619fb8799e4
+ndk.win64_download=android-ndk-r9d-windows-x86_64.zip
+ndk.win64_bytes=520997454
+ndk.win64_checksum=8cd244fc799d0e6e59d65a59a8692588
-ndk.win32_download=android-ndk-r9c-windows-x86.zip
-ndk.win32_bytes=460676475
-ndk.win32_checksum=863b5ab371b63c3e9bf0d39e47903763
+ndk.win32_download=android-ndk-r9d-windows-x86.zip
+ndk.win32_bytes=491440074
+ndk.win32_checksum=b16516b611841a075685a10c59d6d7a2
-ndk.debug_info_download=android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip
-ndk.debug_info_bytes=100364569
-ndk.debug_info_checksum=37911716e1fd2fe3abb8a410750d73e6
+ndk.debug_info_download=android-ndk-r9d-cxx-stl-libs-with-debug-info.zip
+ndk.debug_info_bytes=104947363
+ndk.debug_info_checksum=906c8d88e0f02295c3bfe6b8e98a1a35
page.title=Android NDK
@@ -272,19 +272,84 @@
<p>
<a href="#" onclick="return toggleContent(this)"> <img
src="/assets/images/triangle-opened.png" class="toggle-content-img" alt=""
- >Android NDK, Revision 9c</a> <em>(December 2013)</em>
+ >Android NDK, Revision 9d</a> <em>(March 2014)</em>
</p>
<div class="toggle-content-toggleme">
-<p>This is a bug-fix-only release.</p>
+ <dl>
+ <dt>Important changes:</dt>
+ <dd>
+ <ul>
+ <li>Added support for the Clang 3.4 compiler. The
+<code>NDK_TOOLCHAIN_VERSION=clang</code> option now picks Clang 3.4. GCC 4.6 is
+still the default compiler.</li>
+ <li>Added <code>APP_ABI=armeabi-v7a-hard</code>, with
+additional multilib option <code>-mfloat-abi=hard</code>. These options are for
+use with ARM GCC 4.6/4.8 and clang 3.3/3.4 (which use 4.8's assembler, linker,
+and libs). When using these options, note the following changes:</li>
+ <ul>
+ <li> When executing the <code>ndk-build</code> script, add the
+following options for armeabi-v7a target:
+<pre>TARGET_CFLAGS += -mhard-float -D_NDK_MATH_NO_SOFTFP=1
+TARGET_LDFLAGS += -Wl,--no-warn-mismatch -lm_hard</pre>
+The built library is copied to <code>libs/armeabi-v7a</code>. For make to
+behave as expected, you cannot specify both <code>armeabi-v7a</code> and
+<code>armeabi-v7a-hard</code> as make targets (i.e., on the APP_ABI= line).
+Doing so causes one of them to be ignored. Note that <code>APP_ABI=all</code>
+is still equivalent to
+<code>armeabi armeabi-v7a x86 mips</code>.</li>
+ <li>The <code>make-standalone-toolchain.sh</code> script copies
+additional libaries under <code>/hard</code> directories.
+ Add the above <code>CFLAGS</code> and <code>LFLAGS</code> to your
+makefile to enable GCC or Clang to link with
+ libraries in <code>/hard</code>.</li>
+ </ul>
+ <li>Added the yasm assembler, as well as <code>LOCAL_ASMFLAGS</code>
+and <code>EXPORT_ASMFLAGS</code> flags for x86
+targets. The <code>ndk-build</code> script uses
+<code>prebuilts/*/bin/yasm*</code> to build <code>LOCAL_SRC_FILES</code> that
+have the <code>.asm</code> extension.</li>
+ <li>Updated MClinker to 2.6.0, which adds <code>-gc-sections</code>
+support.</li>
+ <li>Added experimental libc++ support (upstream r201101). Use this new
+feature by following these steps:
+ <ul>
+ <li>Add <code>APP_STL := c++_static</code> or <code>APP_STL :=
+c++_shared</code> in <code>Application.mk</code>.
+ You may rebuild from source via <code>LIBCXX_FORCE_REBUILD :=
+true</code></li>
+ <li>Execute <code>make-standalone-toolchain.sh --stl=libc++</code>
+to create a standalone toolchain with libc++ headers/lib.</li>
+ </ul>
+ For more information, see
+<code>CPLUSPLUS-SUPPORT.html</code>.
+(Issue <a href="b.android.com/36496">36496</a>)</li>
+ </ul>
+ </dd>
<dl>
<dt>Important bug fixes:</dt>
<dd>
<ul>
- <li>Fixed a problem with GCC 4.8 ARM, in which the stack pointer is restored too early. This problem prevented the frame pointer from reliably accessing a variable in the stack frame. For more information, see <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854">http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854</a>.</li>
-<li>- Fixed a problem with GCC 4.8 libstdc++, in which a bug in std::nth_element was causing generation of code that produced a random segfault. For more information, see <a href="https://code.google.com/p/android/issues/detail?id=62910">https://code.google.com/p/android/issues/detail?id=62910</a>.</li>
- <li>Fixed GCC 4.8 ICE in cc1/cc1plus with <code>-fuse-ld=mcld</code>, so that the following error no longer occurs:
-<pre>cc1: internal compiler error: in common_handle_option, at opts.c:1774</pre></li>
- <li>Fixed <code>-mhard-float</code> support for <code>__builtin</code> math functions. For ongoing information on fixes for -mhard-float with STL, please follow <a href="http://b.android.com/61784">http://b.android.com/61784</a>.</li>
+ <li>Fixed an uncaught throw from an unexpected
+exception handler for GCC 4.6/4.8 ARM EABI. (GCC Issue <a
+href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59392">59392</a>)</li>
+ <li>Fixed GCC 4.8 so that it now correctly resolves partial
+specialization of a template with
+ a dependent, non-type template argument. (GCC Issue <a
+href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59052">59052</a>)</li>
+ <li>Added more modules to prebuilt python (Issue <a
+href="b.android.com/59902">59902</a>):
+ <ul>
+ <li>Mac OS X: <code>zlib</code>, <code>bz2</code>,
+<code>_curses</code>, <code>_curses_panel</code>, <code>_hashlib</code>,
+<code>_ssl</code></li>
+ <li>Linux: <code>zlib</code>, <code>nis</code>,
+<code>crypt</code>, <code>_curses</code>, and <code>_curses_panel</code></li>
+ </ul>
+ <li>Fixed the x86 and MIPS gdbserver
+<code>event_getmsg_helper</code>.</li>
+ <li>Fixed numerous issues in the RenderScript NDK toolchain, including
+issues with compatibility across older devices and C++ reflection.</li>
+<br>
</ul>
</dd>
@@ -293,33 +358,187 @@
<ul>
<li>Header fixes:
<ul>
- <li>Changed prototype of <code>poll</code> to <code>poll(struct pollfd *, nfds_t, int);</code> in <code>poll.h</code>.</li>
- <li>Added <code>utimensat</code> to <code>libc.so</code> in API levels 12 and 19. It is now present in levels 12-19.</li>
-<li>Introduced <code>futimens</code> into <code>libc.so</code>, as of API level 19.</li>
-<li>Added missing <code>clock_settime()</code> and <code>clock_nanosleep()</code> to <code>time.h</code> for API 8 and higher.</li>
-<li>Added <code>CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE, CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,</code> and <code>CLOCK_BOOTTIME_ALARM</code> in <code>time.h.</code></li>
-<li>Removed obsolete <code>CLOCK_REALTIME_HR</code> and <code>CLOCK_MONOTONIC_HR.</code></li>
+ <li>Fixed a missing <code>#include <sys/types.h></code> in
+<code>android/asset_manager.h</code> for Android API level 13 and higher.
+ (Issue <a href="http://b.android.com/64988">64988</a>)</li>
+ <li>Fixed a missing <code>#include <stdint.h></code> in
+<code>android/rect_manager.h</code> for Android API level 14 and higher.</li>
+ <li>Added <code>JNICALL</code> to <code>JNI_OnLoad</code> and
+<code>JNI_OnUnload</code> in <code>jni.h</code>. Note that <code>JNICALL</code>
+ is defined as <code>__NDK_FPABI__</code> For more information, see
+<code>sys/cdefs.h</code>.</li>
+ <li>Updated the following headers so that they can be included
+without the need to
+manually include their dependencies (Issue <a
+href="http://b.android.com/64679">64679</a>):</li>
+<pre>
+android/tts.h
+EGL/eglext.h
+fts.h
+GLES/glext.h
+GLES2/gl2ext.h
+OMXAL/OpenMAXSL_Android.h
+SLES/OpenSLES_Android.h
+sys/prctl.h
+sys/utime.h
+</pre>
+ <li>Added <code>sys/cachectl.h</code> for all architectures. MIPS
+developers can now include this header instead of writing <code>#ifdef
+__mips__</code>.</li>
+ <li></code>Fixed <code>platforms/android-18/include/android/input.h
+</code> by adding <code>__NDK_FPABI__</code> to functions taking or returning
+float or double values.</li>
+ <li>Fixed MIPS <code>struct stat</code>, which was incorrectly set
+to its 64-bit counterpart for Android API level 12 and later. This wrong
+setting was a
+regression introduced in release r9c.</li>
+ <li>Defined <code>__PTHREAD_MUTEX_INIT_VALUE</code>,
+<code>__PTHREAD_RECURSIVE_MUTEX_INIT_VALUE</code>,
+ and <code>__PTHREAD_ERRORCHECK_MUTEX_INIT_VALUE</code> for Android API
+level 9 and lower.</li>
+ <li>Added <code>scalbln</code>, <code>scalblnf</code>, and
+<code>scalblnl</code> to x86 <code>libm.so</code> for APIs 18 and later.</li>
+ <li>Fixed a typo in
+<code>sources/android/support/include/iconv.h</code>.
+ (Issue <a href="http://b.android.com/63806">63806</a>)</li>
+
</ul>
</li>
- <li>Refactored samples Teapot, MoreTeapots, and <code>source/android/ndk_helper</code> as follows:
+ <li>Fixed gabi++ <code>std::unexpected()</code> to call
+<code>std::terminate()</code> so that
+ a user-defined <code>std::terminate()</code> handler has a chance to run.
+</li>
+ <li>Fixed gabi++ to catch <code>std::nullptr</code>.</li>
+ <li>Fixed samples Teapot and MoreTeapots:
<ul>
-<li>They now use a hard-float abi for armeabi-v7a.</li>
-<li>Android-19 now has immersive mode.</li>
-<li>Fixed a problem with <code>Check_ReleaseStringUTFChars</code> in <code>/system/lib/libdvm.so</code> that was causing crashes on x86 devices.</li>
+ <li>Solved a problem with Tegra 2 and 3 chips by changing specular
+variables to use medium precision. Values for specular power can now be less
+than 1.0. </li>
+ <li>Changed the samples so that pressing the volume button restores
+immersive mode and invalidates
+<code>SYSTEM_UI_FLAG_IMMERSIVE_STICKY</code>. Screen rotation does not
+trigger <code>onSystemUiVisibilityChange</code>, and so does not restore
+immersive mode.</li>
</ul>
</li>
-<li>Fixed ndk-build fails that happen in cygwin when the NDK package is referenced via symlink.</li>
-<li>Fixed ndk-build.cmd fails that happen in windows <code>cmd.exe</code> when <code>LOCAL_SRC_FILES</code> contains absolute paths. See <a href="https://android-review.googlesource.com/#/c/69992">https://android-review.googlesource.com/#/c/69992.</a></li>
-<li>Fixed ndk-stack to proceed even when it can't parse a frame due to inability to find a routine, filename, or line number. In any of those cases, it prints "??".</li>
-<li>Fixed ndk-stack windows-x64_64 so that it no longer erroneously matches a frame line with a line in the <code>stack:</code>
- section that doesn't contain <code>pc</code>, <code>eip</code>, or <code>ip</code>. For example:
-<pre>I/DEBUG ( 1151): #00 5f09db68 401f01c4 /system/lib/libc.so</pre></li>
+ <li>Fixed the <code>ndk-build</code> script to add
+<code>-rpath-link=$SYSROOT/usr/lib</code> and
+<code>-rpath-link=$TARGET_OUT</code> in order to use <code>ld.bfd</code> to
+link executables. (Issue <a href="http://b.android.com/64266">64266</a>)</li>
+ <li>Removed <code>-Bsymbolic</code> from all STL builds.</li>
+ <li>Fixed <code>ndk-gdb-py.cmd</code> by setting <code>SHELL</code> as
+an environment variable
+instead of passing it to
+ <code>python.exe</code>, which ignores the setting.
+ (Issue <a href="http://b.android.com/63054">63054</a>)</li>
+ <li>Fixed the <code>make-standalone-toolchain.sh</code> script so that
+the <code>--stl=stlport</code> option copies the gabi++ headers instead of
+symlinking them; the <code>cmd.exe</code> and MinGW shells do not understand
+symlinks created by cygwin.</li>
+ </ul>
+ </dd>
+
+ <dt>Other changes:</dt>
+ <dd>
+ <ul>
+ <li>Applied execution permissions to all <code>*cmd</code> scripts
+previously intended for use only in the <code>cmd.exe</code> shell, in case
+developers prefer to use <code>ndk-build.cmd</code> in cygwin instead of the
+recommended <code>ndk-build</code> script.</li>
+ <li>Improved the speed of the <code>make-standalone-toolchain.sh</code>
+script by moving instead of copying if the specified destination directory does
+not exist.</li>
+ </dd>
+ </ul>
+ </dl>
+ </div>
+</div>
+
+<div class="toggle-content closed">
+ <p>
+ <a href="#" onclick="return toggleContent(this)"> <img
+ src="/assets/images/triangle-closed.png" class="toggle-content-img" alt=""
+ >Android NDK, Revision 9c</a> <em>(December 2013)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+<p>This is a bug-fix-only release.</p>
+ <dl>
+ <dt>Important bug fixes:</dt>
+ <dd>
+ <ul>
+ <li>Fixed a problem with GCC 4.8 ARM, in which the stack pointer is
+restored too early. This problem prevented the frame pointer from reliably
+accessing a variable in the stack frame. (GCC Issue <a
+href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58854">58854</a>)</li>
+<li>Fixed a problem with GCC 4.8 libstdc++, in which a bug in
+std::nth_element was causing generation of code that produced a random
+segfault. (Issue <a
+href="https://code.google.com/p/android/issues/detail?id=62910">62910</a>)</li>
+ <li>Fixed GCC 4.8 ICE in cc1/cc1plus with
+<code>-fuse-ld=mcld</code>, so that the following error no longer occurs:
+<pre>cc1: internal compiler error: in common_handle_option, at
+opts.c:1774</pre></li>
+ <li>Fixed <code>-mhard-float</code> support for
+<code>__builtin</code> math functions. For ongoing information on fixes for
+<code>-mhard-float</code> with STL, please follow Issue <a
+href="http://b.android.com/61784">61784</a>.</li>
+ </ul>
+ </dd>
+
+ <dt>Other bug fixes:</dt>
+ <dd>
+ <ul>
+ <li>Header fixes:
+ <ul>
+ <li>Changed prototype of <code>poll</code> to <code>poll(struct
+pollfd *, nfds_t, int);</code> in <code>poll.h</code>.</li>
+ <li>Added <code>utimensat</code> to <code>libc.so</code> for Android
+API levels 12 and 19. These libraries are now included for all Android API
+levels 12 through 19.</li>
+<li>Introduced <code>futimens</code> into <code>libc.so</code>, for Android API
+level 19.</li>
+<li>Added missing <code>clock_settime()</code> and
+<code>clock_nanosleep()</code> to <code>time.h</code> for Android API level 8
+and higher.</li>
+<li>Added <code>CLOCK_MONOTONIC_RAW, CLOCK_REALTIME_COARSE,
+CLOCK_MONOTONIC_COARSE, CLOCK_BOOTTIME, CLOCK_REALTIME_ALARM,</code> and
+<code>CLOCK_BOOTTIME_ALARM</code> in <code>time.h.</code></li>
+<li>Removed obsolete <code>CLOCK_REALTIME_HR</code> and
+<code>CLOCK_MONOTONIC_HR.</code></li>
+ </ul>
+ </li>
+ <li>In samples Teapot, MoreTeapots, and
+<code>source/android/ndk_helper</code>:
+ <ul>
+<li>Changed them so that they now use a hard-float abi for armeabi-v7a.</li>
+<li>Updated them to use immersive mode on Android API level 19 and
+higher.</li>
+<li>Fixed a problem with <code>Check_ReleaseStringUTFChars</code> in
+<code>/system/lib/libdvm.so</code> that was causing crashes on x86 devices.</li>
+ </ul>
+ </li>
+<li>Fixed <code>ndk-build</code> fails that happen in cygwin when the NDK
+package is
+referenced via symlink.</li>
+<li>Fixed <code>ndk-build.cmd</code> fails that happen in windows
+<code>cmd.exe</code> when
+<code>LOCAL_SRC_FILES</code> contains absolute paths. (Issue <a
+href="https://android-review.googlesource.com/#/c/69992">69992</a>)</li>
+<li>Fixed the <code>ndk-stack</code> script to proceed even when it can't parse
+a frame due to inability to find a routine, filename, or line number. In any of
+these cases, it prints <code>??</code>.</li>
+<li>Fixed the <code>ndk-stack</code> stack for windows-x64_64 targets so that
+it no longer erroneously matches a frame line with a line in the
+<code>stack:</code> section that doesn't contain <code>pc</code>,
+<code>eip</code>, or <code>ip</code>. For example:
+<pre>I/DEBUG ( 1151): #00 5f09db68 401f01c4
+/system/lib/libc.so</pre></li>
<li>Fixed gabi++ so that it:
<ul>
<li>Does not use malloc() to allocate C++ thread-local
objects.</li>
- <li>Avoids deadlocks in gabi++ in cases where libc.debug.malloc is non-zero in
- userdebug/eng Android platform builds.</li>
+ <li>Avoids deadlocks in gabi++ in cases where libc.debug.malloc is
+non-zero in userdebug/eng Android platform builds.</li>
</ul>
</ul>
</dd>
@@ -328,12 +547,29 @@
<dd>
<ul>
<li>Added <code>LOCAL_EXPORT_LDFLAGS</code>.</li>
-<li>Introduced the <code>NDK_PROJECT_PATH=null</code> setting for use in an integrated build system where options are explicitly passed to <code>ndk-build</code>. With this setting, <code>ndk-build</code> makes no attempt to look for <code>NDK_PROJECT_PATH.</code> This setting also prevents variables from deriving default settings from NDK_PROJECT_PATH. As a result, the following variables must now be explicitly specified (with their default values if such exist): <code>NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT, NDK_DEBUG</code> (optional, default to 0), and other <code>APP_*</code>'s contained in <code>Application.mk</code>.</li>
-<li><code>APP_ABI</code> can now be enumerated in a comma-delimited list. For example:
+<li>Introduced the <code>NDK_PROJECT_PATH=null</code> setting for use in an
+integrated build system where options are explicitly passed to
+<code>ndk-build</code>. With this setting, <code>ndk-build</code> makes no
+attempt to look for <code>NDK_PROJECT_PATH.</code> This setting also prevents
+variables from deriving default settings from NDK_PROJECT_PATH. As a result,
+the following variables must now be explicitly specified (with their default
+values if such exist): <code>NDK_OUT, NDK_LIBS_OUT, APP_BUILD_SCRIPT,
+NDK_DEBUG</code> (optional, default to 0), and other <code>APP_*</code>'s
+contained in <code>Application.mk</code>.</li>
+<li><code>APP_ABI</code> can now be enumerated in a comma-delimited list. For
+example:
<pre>APP_ABI := "armeabi,armeabi-v7a"</pre></li>
-<li>Provided the ability (option <code>-g</code>) to rebuild all of STL with debugging info in an optional, separate package called <code>android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip</code>. This option helps ndk-stack to provide better a stack dump across STL. This change should not affect the code/size of the final, stripped file.</li>
-<li>Enhanced <code>hello-jni</code> samples to report <code>APP_ABI</code> at compilation.</li>
-<li>Used the <code>ar</code> tool in Deterministic mode (option <code>-D</code>) to build static libraries. For more information, see <a href="http://b.android.com/60705">http://b.android.com/60705</a>.</li>
+<li>Provided the ability to rebuild all of STL with debugging info in an
+optional, separate package called
+<code>android-ndk-r9c-cxx-stl-libs-with-debugging-info.zip</code>, using the
+<code>-g</code> option. This option
+helps the <code>ndk-stack</code> script provide better a stack dump across STL.
+This change should not affect the code/size of the final, stripped file.</li>
+<li>Enhanced <code>hello-jni</code> samples to report <code>APP_ABI</code> at
+compilation.</li>
+<li>Used the <code>ar</code> tool in Deterministic mode (option
+<code>-D</code>) to build static libraries. (Issue <a
+href="http://b.android.com/60705">60705</a>)</li>
</ul>
</dd>
@@ -360,7 +596,7 @@
(Issues <a href="http://b.android.com/47150">47150</a>,
<a href="http://b.android.com/58528">58528</a>, and
<a href="http://b.android.com/38423">38423</a>)</li>
- <li>Added support for API level 19, including Renderscript binding.</li>
+ <li>Added support for Android API level 19, including Renderscript binding.</li>
<li>Added support for <code>-mhard-float</code> in the existing armeabi-v7a ABI. For more
information and current restrictions on Clang, see
{@code tests/device/hard-float/jni/Android.mk}.</li>
@@ -2392,8 +2628,8 @@
dealing with signed chars.</li>
<li>Adds missing documentation for the
"gnustl_static" value for APP_STL, that allows you to link against
- a static library version of GNU libstdc++. </li>
- <li>The following <code>ndk-build</code> issues are fixed:
+ a static library version of GNU libstdc++. </li> the
+ <li>Fixed the following <code>ndk-build</code> issues:
<ul>
<li>A bug that created inconsistent dependency files when a
compilation error occured on Windows. This prevented a proper build after
diff --git a/docs/html/tools/sdk/tools-notes.jd b/docs/html/tools/sdk/tools-notes.jd
index c28b946..99f0b38 100644
--- a/docs/html/tools/sdk/tools-notes.jd
+++ b/docs/html/tools/sdk/tools-notes.jd
@@ -26,10 +26,92 @@
href="http://tools.android.com/knownissues">http://tools.android.com/knownissues</a>.</p>
-
<div class="toggle-content opened">
<p><a href="#" onclick="return toggleContent(this)">
<img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img"
+ alt=""/>SDK Tools, Revision 22.6</a> <em>(March 2014)</em>
+ </p>
+
+ <div class="toggle-content-toggleme">
+
+ <dl>
+ <dt>Dependencies:</dt>
+ <dd>
+ <ul>
+ <li>Android SDK Platform-tools revision 18 or later.</li>
+ <li>If you are developing in Eclipse with ADT, note that this version of SDK Tools is
+ designed for use with ADT 22.6.0 and later. If you haven't already, update your
+ <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 22.6.0.</li>
+ <li>If you are developing outside Eclipse, you must have
+ <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
+ </ul>
+ </dd>
+
+ <dt>General Notes:</dt>
+ <dd>
+ <ul>
+ <li><p>The command line <code>lint</code> script (<code>tools\lint.bat</code> on
+ Windows platforms, <code>tools/lint</code> on other platforms) and the
+ <code>lint</code> target on <code>ant</code> builds fail with the following
+ error:</p>
+ <p><code>Exception in thread "main" java.lang.NoClassDefFoundError:
+ lombok/ast/AstVisitor</code></p>
+ <p>As a temporary workaround, rename the file
+ <code>tools\lib\lombok-ast-0.2.2.jar</code> to
+ <code>tools\lib\lombok-ast.jar</code>.
+ We will release an updated version of the tools with a fix for
+ this issue as soon as possible.</p>
+ </li>
+ <li>Added support for Java 7 language features like multi-catch, try-with-resources,
+ and the diamond operator. These features require version 19 or higher
+ of the Build Tools. Try-with-resources requires <code>minSdkVersion</code>
+ 19; the rest of the new language features require
+ <code>minSdkVersion</code> 8 or higher.</li>
+ <li>Added new lint checks:
+ <ul>
+ <li>Security:
+ <ul>
+ <li>Look for code potentially affected by a <code>SecureRandom</code>
+ vulnerability.</li>
+ <li>Check that calls to <code>checkPermission</code> use the return value.</li>
+ </ul>
+ </li>
+ <li>Check that production builds do not use mock location providers.</li>
+ <li>Look for manifest values that are overwritten by values from Gradle build
+ scripts.</li>
+ </ul>
+ </li>
+ <li>Fixed a number of minor issues in the SDK and build system.</li>
+ <li>Emulator:
+ <ul>
+ <li>Fixed a problem with the emulator shutting down immediately for Android 1.5
+ on the Nexus One and Nexus S devices.
+ (<a href="http://b.android.com/64945">Issue 64945</a>)</li>
+ <li>Fixed a problem with port numbers longer than four digits.
+ (<a href="http://b.android.com/60024">Issue 60024</a>)</li>
+ <li>Fixed battery errors for the Nexus One and Nexus S devices.
+ (<a href="http://b.android.com/39959">Issue 39959</a>)</li>
+ <li>Fixed a problem with paths or arguments that contain
+ spaces on Windows platforms.
+ (<a href="http://b.android.com/18317">Issue 18317</a>)</li>
+ <li>Fixed a problem with long path values on Windows platforms.
+ (<a href="http://b.android.com/33336">Issue 33336</a>)</li>
+ <li>Fixed a problem with the {@code -snapshot-list} command line
+ option on 64-bit systems.
+ (<a href="http://b.android.com/34233">Issue 34233</a>)</li>
+ </ul>
+ </li>
+ <li>Fixed an issue with RenderScript support. Using RenderScript support mode
+ now requires version 19.0.3 of the Build Tools.</li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img"
alt=""/>SDK Tools, Revision 22.3</a> <em>(October 2013)</em>
</p>
diff --git a/libs/hwui/DisplayListOp.h b/libs/hwui/DisplayListOp.h
index b5a66f6..65eda29 100644
--- a/libs/hwui/DisplayListOp.h
+++ b/libs/hwui/DisplayListOp.h
@@ -788,7 +788,7 @@
deferInfo.mergeable = state.mMatrix.isSimple() && state.mMatrix.positiveScale() &&
!state.mClipSideFlags &&
OpenGLRenderer::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode &&
- (mBitmap->getConfig() != SkBitmap::kA8_Config);
+ (mBitmap->config() != SkBitmap::kA8_Config);
}
const SkBitmap* bitmap() { return mBitmap; }
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 1c59c30..b620b80 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -52,7 +52,12 @@
#define ALPHA_THRESHOLD 0
-#define FILTER(paint) (!paint || paint->isFilterBitmap() ? GL_LINEAR : GL_NEAREST)
+static GLenum getFilter(const SkPaint* paint) {
+ if (!paint || paint->getFilterLevel() != SkPaint::kNone_FilterLevel) {
+ return GL_LINEAR;
+ }
+ return GL_NEAREST;
+}
///////////////////////////////////////////////////////////////////////////////
// Globals
@@ -1973,7 +1978,7 @@
texture->setFilter(GL_NEAREST, true);
} else {
- texture->setFilter(FILTER(paint), true);
+ texture->setFilter(getFilter(paint), true);
}
// No need to check for a UV mapper on the texture object, only ARGB_8888
@@ -1998,7 +2003,7 @@
const AutoTexture autoCleanup(texture);
texture->setWrap(GL_CLAMP_TO_EDGE, true);
- texture->setFilter(pureTranslate ? GL_NEAREST : FILTER(paint), true);
+ texture->setFilter(pureTranslate ? GL_NEAREST : getFilter(paint), true);
const float x = (int) floorf(bounds.left + 0.5f);
const float y = (int) floorf(bounds.top + 0.5f);
@@ -2174,7 +2179,7 @@
const AutoTexture autoCleanup(texture);
texture->setWrap(GL_CLAMP_TO_EDGE, true);
- texture->setFilter(FILTER(paint), true);
+ texture->setFilter(getFilter(paint), true);
int alpha;
SkXfermode::Mode mode;
@@ -2259,10 +2264,10 @@
dstLeft = x;
dstTop = y;
- texture->setFilter(scaled ? FILTER(paint) : GL_NEAREST, true);
+ texture->setFilter(scaled ? getFilter(paint) : GL_NEAREST, true);
ignoreTransform = true;
} else {
- texture->setFilter(FILTER(paint), true);
+ texture->setFilter(getFilter(paint), true);
}
if (CC_UNLIKELY(useScaleTransform)) {
@@ -3382,7 +3387,7 @@
paint, texture->blend, vertices, texCoords,
GL_TRIANGLE_STRIP, gMeshCount, false, true);
} else {
- texture->setFilter(FILTER(paint), true);
+ texture->setFilter(getFilter(paint), true);
drawTextureMesh(left, top, right, bottom, texture->id, paint,
texture->blend, vertices, texCoords, GL_TRIANGLE_STRIP, gMeshCount);
}
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index ced3ec9..36778aa 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -28,6 +28,7 @@
import android.util.Log;
+import java.lang.SecurityException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -1104,13 +1105,18 @@
* unless they depend on provider-specific APIs such as
* {@link #requestLocationUpdates(String, long, float, LocationListener)}.
*
+ * <p>
+ * Before API version 20, this method would throw {@link SecurityException}
+ * if the location permissions were not sufficient to use the specified
+ * provider.
+ *
* @param provider the name of the provider
* @return true if the provider exists and is enabled
*
* @throws IllegalArgumentException if provider is null
- * @throws SecurityException if no suitable permission is present
*/
public boolean isProviderEnabled(String provider) {
+ // STOPSHIP: finalize API version number in javadoc
checkProvider(provider);
try {
diff --git a/location/java/android/location/SettingInjectorService.java b/location/java/android/location/SettingInjectorService.java
index 9f321f3..98c7864 100644
--- a/location/java/android/location/SettingInjectorService.java
+++ b/location/java/android/location/SettingInjectorService.java
@@ -26,7 +26,7 @@
import android.util.Log;
/**
- * Dynamically specifies the summary (subtitle) and enabled status of a preference injected into
+ * Dynamically specifies the enabled status of a preference injected into
* the list of app settings displayed by the system settings app
* <p/>
* For use only by apps that are included in the system image, for preferences that affect multiple
@@ -71,13 +71,12 @@
* </ul>
*
* To ensure a good user experience, your {@link android.app.Application#onCreate()},
- * {@link #onGetSummary()}, and {@link #onGetEnabled()} methods must all be fast. If any are slow,
- * it can delay the display of settings values for other apps as well. Note further that all are
- * called on your app's UI thread.
+ * and {@link #onGetEnabled()} methods must all be fast. If either is slow,
+ * it can delay the display of settings values for other apps as well. Note further that these
+ * methods are called on your app's UI thread.
* <p/>
* For compactness, only one copy of a given setting should be injected. If each account has a
- * distinct value for the setting, then the {@link #onGetSummary()} value should represent a summary
- * of the state across all of the accounts and {@code settingsActivity} should display the value for
+ * distinct value for the setting, then only {@code settingsActivity} should display the value for
* each account.
*/
public abstract class SettingInjectorService extends Service {
@@ -109,14 +108,6 @@
"android.location.InjectedSettingChanged";
/**
- * Name of the bundle key for the string specifying the summary for the setting (e.g., "ON" or
- * "OFF").
- *
- * @hide
- */
- public static final String SUMMARY_KEY = "summary";
-
- /**
* Name of the bundle key for the string specifying whether the setting is currently enabled.
*
* @hide
@@ -160,42 +151,31 @@
private void onHandleIntent(Intent intent) {
- String summary;
- try {
- summary = onGetSummary();
- } catch (RuntimeException e) {
- // Exception. Send status anyway, so that settings injector can immediately start
- // loading the status of the next setting.
- sendStatus(intent, null, true);
- throw e;
- }
-
boolean enabled;
try {
enabled = onGetEnabled();
} catch (RuntimeException e) {
// Exception. Send status anyway, so that settings injector can immediately start
// loading the status of the next setting.
- sendStatus(intent, summary, true);
+ sendStatus(intent, true);
throw e;
}
- sendStatus(intent, summary, enabled);
+ sendStatus(intent, enabled);
}
/**
- * Send the summary and enabled values back to the caller via the messenger encoded in the
+ * Send the enabled values back to the caller via the messenger encoded in the
* intent.
*/
- private void sendStatus(Intent intent, String summary, boolean enabled) {
+ private void sendStatus(Intent intent, boolean enabled) {
Message message = Message.obtain();
Bundle bundle = new Bundle();
- bundle.putString(SUMMARY_KEY, summary);
bundle.putBoolean(ENABLED_KEY, enabled);
message.setData(bundle);
if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, mName + ": received " + intent + ", summary=" + summary
+ Log.d(TAG, mName + ": received " + intent
+ ", enabled=" + enabled + ", sending message: " + message);
}
@@ -208,13 +188,18 @@
}
/**
- * Returns the {@link android.preference.Preference#getSummary()} value (allowed to be null or
- * empty). Should not perform unpredictably-long operations such as network access--see the
- * running-time comments in the class-level javadoc.
+ * This method is no longer called, because status values are no longer shown for any injected
+ * setting.
*
- * @return the {@link android.preference.Preference#getSummary()} value
+ * @return ignored
+ *
+ * @deprecated not called any more
*/
- protected abstract String onGetSummary();
+ @Deprecated
+ protected String onGetSummary() {
+ // Do not delete until no callers have @Override annotations for this method
+ return null;
+ }
/**
* Returns the {@link android.preference.Preference#isEnabled()} value. Should not perform
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index 3ce483d..b2fb2df 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -112,12 +112,35 @@
mLooper->registerHandler(this);
}
-JMediaCodec::~JMediaCodec() {
+void JMediaCodec::release() {
if (mCodec != NULL) {
mCodec->release();
mCodec.clear();
}
+ if (mLooper != NULL) {
+ mLooper->unregisterHandler(id());
+ mLooper->stop();
+ mLooper.clear();
+ }
+}
+
+JMediaCodec::~JMediaCodec() {
+ if (mCodec != NULL || mLooper != NULL) {
+ /* MediaCodec and looper should have been released explicitly already
+ * in setMediaCodec() (see comments in setMediaCodec()).
+ *
+ * Otherwise JMediaCodec::~JMediaCodec() might be called from within the
+ * message handler, doing release() there risks deadlock as MediaCodec::
+ * release() post synchronous message to the same looper.
+ *
+ * Print a warning and try to proceed with releasing.
+ */
+ ALOGW("try to release MediaCodec from JMediaCodec::~JMediaCodec()...");
+ release();
+ ALOGW("done releasing MediaCodec from JMediaCodec::~JMediaCodec().");
+ }
+
JNIEnv *env = AndroidRuntime::getJNIEnv();
env->DeleteWeakGlobalRef(mObject);
@@ -432,6 +455,12 @@
codec->incStrong(thiz);
}
if (old != NULL) {
+ /* release MediaCodec and stop the looper now before decStrong.
+ * otherwise JMediaCodec::~JMediaCodec() could be called from within
+ * its message handler, doing release() from there will deadlock
+ * (as MediaCodec::release() post synchronous message to the same looper)
+ */
+ old->release();
old->decStrong(thiz);
}
env->SetLongField(thiz, gFields.context, (jlong)codec.get());
diff --git a/media/jni/android_media_MediaCodec.h b/media/jni/android_media_MediaCodec.h
index 53254c9..2f2ea96 100644
--- a/media/jni/android_media_MediaCodec.h
+++ b/media/jni/android_media_MediaCodec.h
@@ -42,6 +42,7 @@
status_t initCheck() const;
void registerSelf();
+ void release();
status_t configure(
const sp<AMessage> &format,
diff --git a/packages/Keyguard/Android.mk b/packages/Keyguard/Android.mk
index 1f2b5fb..5b08674 100644
--- a/packages/Keyguard/Android.mk
+++ b/packages/Keyguard/Android.mk
@@ -16,7 +16,8 @@
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
-LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-subdir-Iaidl-files)
+LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-subdir-Iaidl-files) \
+ $(call all-proto-files-under,src)
LOCAL_PACKAGE_NAME := Keyguard
@@ -26,6 +27,9 @@
LOCAL_PROGUARD_FLAG_FILES := proguard.flags
+LOCAL_PROTOC_OPTIMIZE_TYPE := nano
+LOCAL_PROTO_JAVA_OUTPUT_PARAMS := optional_field_style=accessors
+
include $(BUILD_PACKAGE)
#include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
index 40087cd..8738288 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
@@ -21,11 +21,11 @@
import com.android.internal.policy.IKeyguardShowCallback;
import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.analytics.KeyguardAnalytics;
import org.xmlpull.v1.XmlPullParser;
import android.app.ActivityManager;
-import android.appwidget.AppWidgetManager;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.ActivityInfo;
@@ -76,6 +76,7 @@
private final Context mContext;
private final ViewManager mViewManager;
private final KeyguardViewMediator.ViewMediatorCallback mViewMediatorCallback;
+ private final KeyguardAnalytics.Callback mAnalyticsCallback;
private WindowManager.LayoutParams mWindowLayoutParams;
private boolean mNeedsInput = false;
@@ -107,11 +108,12 @@
*/
public KeyguardViewManager(Context context, ViewManager viewManager,
KeyguardViewMediator.ViewMediatorCallback callback,
- LockPatternUtils lockPatternUtils) {
+ LockPatternUtils lockPatternUtils, KeyguardAnalytics.Callback analyticsCallback) {
mContext = context;
mViewManager = viewManager;
mViewMediatorCallback = callback;
mLockPatternUtils = lockPatternUtils;
+ mAnalyticsCallback = analyticsCallback;
}
/**
@@ -120,6 +122,9 @@
*/
public synchronized void show(Bundle options) {
if (DEBUG) Log.d(TAG, "show(); mKeyguardView==" + mKeyguardView);
+ if (mAnalyticsCallback != null) {
+ mAnalyticsCallback.onShow();
+ }
boolean enableScreenRotation = shouldEnableScreenRotation();
@@ -262,6 +267,15 @@
}
return super.dispatchKeyEvent(event);
}
+
+ @Override
+ public boolean dispatchTouchEvent(MotionEvent ev) {
+ boolean result = false;
+ if (mAnalyticsCallback != null) {
+ result = mAnalyticsCallback.onTouchEvent(ev, getWidth(), getHeight()) || result;
+ }
+ return super.dispatchTouchEvent(ev) || result;
+ }
}
SparseArray<Parcelable> mStateContainer = new SparseArray<Parcelable>();
@@ -473,6 +487,9 @@
Slog.w(TAG, "Exception calling onShown():", e);
}
}
+ if (mAnalyticsCallback != null) {
+ mAnalyticsCallback.onScreenOn();
+ }
}
public synchronized void verifyUnlock() {
@@ -487,6 +504,10 @@
public synchronized void hide() {
if (DEBUG) Log.d(TAG, "hide()");
+ if (mAnalyticsCallback != null) {
+ mAnalyticsCallback.onHide();
+ }
+
if (mKeyguardHost != null) {
mKeyguardHost.setVisibility(View.GONE);
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
index 151177e..31e806c 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
@@ -19,6 +19,7 @@
import com.android.internal.policy.IKeyguardExitCallback;
import com.android.internal.policy.IKeyguardShowCallback;
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+import static com.android.keyguard.analytics.KeyguardAnalytics.SessionTypeAdapter;
import android.app.Activity;
import android.app.ActivityManagerNative;
@@ -33,6 +34,7 @@
import android.content.IntentFilter;
import android.media.AudioManager;
import android.media.SoundPool;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -54,6 +56,10 @@
import com.android.internal.telephony.IccCardConstants;
import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.analytics.Session;
+import com.android.keyguard.analytics.KeyguardAnalytics;
+
+import java.io.File;
/**
@@ -100,6 +106,7 @@
public class KeyguardViewMediator {
private static final int KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT = 30000;
final static boolean DEBUG = false;
+ private static final boolean ENABLE_ANALYTICS = Build.IS_DEBUGGABLE;
private final static boolean DBG_WAKE = false;
private final static String TAG = "KeyguardViewMediator";
@@ -161,6 +168,11 @@
*/
private static final boolean ALLOW_NOTIFICATIONS_DEFAULT = false;
+ /**
+ * Secure setting whether analytics are collected on the keyguard.
+ */
+ private static final String KEYGUARD_ANALYTICS_SETTING = "keyguard_analytics";
+
/** The stream type that the lock sounds are tied to. */
private int mMasterStreamType;
@@ -194,6 +206,8 @@
private KeyguardViewManager mKeyguardViewManager;
+ private final KeyguardAnalytics mKeyguardAnalytics;
+
// these are protected by synchronized (this)
/**
@@ -528,12 +542,25 @@
&& !mLockPatternUtils.isLockScreenDisabled();
WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
-
- mKeyguardViewManager = new KeyguardViewManager(context, wm, mViewMediatorCallback,
- mLockPatternUtils);
-
final ContentResolver cr = mContext.getContentResolver();
+ if (ENABLE_ANALYTICS && !LockPatternUtils.isSafeModeEnabled() &&
+ Settings.Secure.getInt(cr, KEYGUARD_ANALYTICS_SETTING, 0) == 1) {
+ mKeyguardAnalytics = new KeyguardAnalytics(context, new SessionTypeAdapter() {
+
+ @Override
+ public int getSessionType() {
+ return mLockPatternUtils.isSecure() ? Session.TYPE_KEYGUARD_SECURE
+ : Session.TYPE_KEYGUARD_INSECURE;
+ }
+ }, new File(mContext.getCacheDir(), "keyguard_analytics.bin"));
+ } else {
+ mKeyguardAnalytics = null;
+ }
+ mKeyguardViewManager = new KeyguardViewManager(context, wm, mViewMediatorCallback,
+ mLockPatternUtils,
+ mKeyguardAnalytics != null ? mKeyguardAnalytics.getCallback() : null);
+
mScreenOn = mPM.isScreenOn();
mLockSounds = new SoundPool(1, AudioManager.STREAM_SYSTEM, 0);
@@ -631,6 +658,9 @@
} else {
doKeyguardLocked(null);
}
+ if (ENABLE_ANALYTICS && mKeyguardAnalytics != null) {
+ mKeyguardAnalytics.getCallback().onScreenOff();
+ }
}
KeyguardUpdateMonitor.getInstance(mContext).dispatchScreenTurndOff(why);
}
@@ -869,6 +899,9 @@
updateActivityLockScreenState();
adjustStatusBarLocked();
}
+ if (ENABLE_ANALYTICS && mKeyguardAnalytics != null) {
+ mKeyguardAnalytics.getCallback().onSetHidden(isHidden);
+ }
}
}
diff --git a/packages/Keyguard/src/com/android/keyguard/analytics/KeyguardAnalytics.java b/packages/Keyguard/src/com/android/keyguard/analytics/KeyguardAnalytics.java
new file mode 100644
index 0000000..55750cc
--- /dev/null
+++ b/packages/Keyguard/src/com/android/keyguard/analytics/KeyguardAnalytics.java
@@ -0,0 +1,278 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.keyguard.analytics;
+
+import com.google.protobuf.nano.CodedOutputByteBufferNano;
+import com.google.protobuf.nano.MessageNano;
+
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.os.AsyncTask;
+import android.util.Log;
+import android.view.MotionEvent;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * Tracks sessions, touch and sensor events in Keyguard.
+ *
+ * A session starts when the user is presented with the Keyguard and ends when the Keyguard is no
+ * longer visible to the user.
+ */
+public class KeyguardAnalytics implements SensorEventListener {
+
+ private static final boolean DEBUG = false;
+ private static final String TAG = "KeyguardAnalytics";
+ private static final long TIMEOUT_MILLIS = 11000; // 11 seconds.
+
+ private static final int[] SENSORS = new int[] {
+ Sensor.TYPE_ACCELEROMETER,
+ Sensor.TYPE_GYROSCOPE,
+ Sensor.TYPE_PROXIMITY,
+ Sensor.TYPE_LIGHT,
+ Sensor.TYPE_ROTATION_VECTOR,
+ };
+
+ private Session mCurrentSession = null;
+ // Err on the side of caution, so logging is not started after a crash even tough the screen
+ // is off.
+ private boolean mScreenOn = false;
+ private boolean mHidden = false;
+
+ private final SensorManager mSensorManager;
+ private final SessionTypeAdapter mSessionTypeAdapter;
+ private final File mAnalyticsFile;
+
+ public KeyguardAnalytics(Context context, SessionTypeAdapter sessionTypeAdapter,
+ File analyticsFile) {
+ mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
+ mSessionTypeAdapter = sessionTypeAdapter;
+ mAnalyticsFile = analyticsFile;
+ }
+
+ public Callback getCallback() {
+ return mCallback;
+ }
+
+ public interface Callback {
+ public void onShow();
+ public void onHide();
+ public void onScreenOn();
+ public void onScreenOff();
+ public boolean onTouchEvent(MotionEvent ev, int width, int height);
+ public void onSetHidden(boolean hidden);
+ }
+
+ public interface SessionTypeAdapter {
+ public int getSessionType();
+ }
+
+ private void sessionEntrypoint() {
+ if (mCurrentSession == null && mScreenOn && !mHidden) {
+ onSessionStart();
+ }
+ }
+
+ private void sessionExitpoint(int result) {
+ if (mCurrentSession != null) {
+ onSessionEnd(result);
+ }
+ }
+
+ private void onSessionStart() {
+ int type = mSessionTypeAdapter.getSessionType();
+ mCurrentSession = new Session(System.currentTimeMillis(), System.nanoTime(), type);
+ if (type == Session.TYPE_KEYGUARD_SECURE) {
+ mCurrentSession.setRedactTouchEvents();
+ }
+ for (int sensorType : SENSORS) {
+ Sensor s = mSensorManager.getDefaultSensor(sensorType);
+ if (s != null) {
+ mSensorManager.registerListener(this, s, SensorManager.SENSOR_DELAY_GAME);
+ }
+ }
+ if (DEBUG) {
+ Log.d(TAG, "onSessionStart()");
+ }
+ }
+
+ private void onSessionEnd(int result) {
+ if (DEBUG) {
+ Log.d(TAG, String.format("onSessionEnd(success=%d)", result));
+ }
+ mSensorManager.unregisterListener(this);
+
+ Session session = mCurrentSession;
+ mCurrentSession = null;
+
+ session.end(System.currentTimeMillis(), result);
+ queueSession(session);
+ }
+
+ private void queueSession(final Session currentSession) {
+ if (DEBUG) {
+ Log.i(TAG, "Saving session.");
+ }
+ new AsyncTask<Void, Void, Void>() {
+ @Override
+ protected Void doInBackground(Void... params) {
+ try {
+ byte[] b = writeDelimitedProto(currentSession.toProto());
+ OutputStream os = new FileOutputStream(mAnalyticsFile, true /* append */);
+ if (DEBUG) {
+ Log.d(TAG, String.format("Serialized size: %d kB.", b.length / 1024));
+ }
+ try {
+ os.write(b);
+ os.flush();
+ } finally {
+ try {
+ os.close();
+ } catch (IOException e) {
+ Log.e(TAG, "Exception while closing file", e);
+ }
+ }
+ } catch (IOException e) {
+ Log.e(TAG, "Exception while writing file", e);
+ }
+ return null;
+ }
+
+ private byte[] writeDelimitedProto(MessageNano proto)
+ throws IOException {
+ byte[] result = new byte[CodedOutputByteBufferNano.computeMessageSizeNoTag(proto)];
+ CodedOutputByteBufferNano ob = CodedOutputByteBufferNano.newInstance(result);
+ ob.writeMessageNoTag(proto);
+ ob.checkNoSpaceLeft();
+ return result;
+ }
+ }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
+ }
+
+ @Override
+ public synchronized void onSensorChanged(SensorEvent event) {
+ if (false) {
+ Log.v(TAG, String.format(
+ "onSensorChanged(name=%s, values[0]=%f)",
+ event.sensor.getName(), event.values[0]));
+ }
+ if (mCurrentSession != null) {
+ mCurrentSession.addSensorEvent(event, System.nanoTime());
+ enforceTimeout();
+ }
+ }
+
+ private void enforceTimeout() {
+ if (System.currentTimeMillis() - mCurrentSession.getStartTimestampMillis()
+ > TIMEOUT_MILLIS) {
+ onSessionEnd(Session.RESULT_UNKNOWN);
+ if (DEBUG) {
+ Log.i(TAG, "Analytics timed out.");
+ }
+ }
+ }
+
+ @Override
+ public void onAccuracyChanged(Sensor sensor, int accuracy) {
+ }
+
+ private final Callback mCallback = new Callback() {
+ @Override
+ public void onShow() {
+ if (DEBUG) {
+ Log.d(TAG, "onShow()");
+ }
+ synchronized (KeyguardAnalytics.this) {
+ sessionEntrypoint();
+ }
+ }
+
+ @Override
+ public void onHide() {
+ if (DEBUG) {
+ Log.d(TAG, "onHide()");
+ }
+ synchronized (KeyguardAnalytics.this) {
+ sessionExitpoint(Session.RESULT_SUCCESS);
+ }
+ }
+
+ @Override
+ public void onScreenOn() {
+ if (DEBUG) {
+ Log.d(TAG, "onScreenOn()");
+ }
+ synchronized (KeyguardAnalytics.this) {
+ mScreenOn = true;
+ sessionEntrypoint();
+ }
+ }
+
+ @Override
+ public void onScreenOff() {
+ if (DEBUG) {
+ Log.d(TAG, "onScreenOff()");
+ }
+ synchronized (KeyguardAnalytics.this) {
+ mScreenOn = false;
+ sessionExitpoint(Session.RESULT_FAILURE);
+ }
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev, int width, int height) {
+ if (DEBUG) {
+ Log.v(TAG, "onTouchEvent(ev.action="
+ + MotionEvent.actionToString(ev.getAction()) + ")");
+ }
+ synchronized (KeyguardAnalytics.this) {
+ if (mCurrentSession != null) {
+ mCurrentSession.addMotionEvent(ev);
+ mCurrentSession.setTouchArea(width, height);
+ enforceTimeout();
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public void onSetHidden(boolean hidden) {
+ synchronized (KeyguardAnalytics.this) {
+ if (hidden != mHidden) {
+ if (DEBUG) {
+ Log.d(TAG, "onSetHidden(" + hidden + ")");
+ }
+ mHidden = hidden;
+ if (hidden) {
+ // Could have gone to camera on purpose / by falsing or an app could have
+ // launched on top of the lockscreen.
+ sessionExitpoint(Session.RESULT_UNKNOWN);
+ } else {
+ sessionEntrypoint();
+ }
+ }
+ }
+ }
+ };
+
+}
diff --git a/packages/Keyguard/src/com/android/keyguard/analytics/PointerTracker.java b/packages/Keyguard/src/com/android/keyguard/analytics/PointerTracker.java
new file mode 100644
index 0000000..e68f751
--- /dev/null
+++ b/packages/Keyguard/src/com/android/keyguard/analytics/PointerTracker.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.keyguard.analytics;
+
+import android.graphics.RectF;
+import android.util.FloatMath;
+import android.util.SparseArray;
+import android.view.MotionEvent;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static com.android.keyguard.analytics.KeyguardAnalyticsProtos.Session.TouchEvent.BoundingBox;
+
+/**
+ * Takes motion events and tracks the length and bounding box of each pointer gesture as well as
+ * the bounding box of the whole gesture.
+ */
+public class PointerTracker {
+ private SparseArray<Pointer> mPointerInfoMap = new SparseArray<Pointer>();
+ private RectF mTotalBoundingBox = new RectF();
+
+ public void addMotionEvent(MotionEvent ev) {
+ if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
+ float x = ev.getX();
+ float y = ev.getY();
+ mTotalBoundingBox.set(x, y, x, y);
+ }
+ for (int i = 0; i < ev.getPointerCount(); i++) {
+ int id = ev.getPointerId(i);
+ Pointer pointer = getPointer(id);
+ float x = ev.getX(i);
+ float y = ev.getY(i);
+ boolean down = ev.getActionMasked() == MotionEvent.ACTION_DOWN
+ || (ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN
+ && ev.getActionIndex() == i);
+ pointer.addPoint(x, y, down);
+ mTotalBoundingBox.union(x, y);
+ }
+ }
+
+ public float getPointerLength(int id) {
+ return getPointer(id).length;
+ }
+
+ public BoundingBox getBoundingBox() {
+ return boundingBoxFromRect(mTotalBoundingBox);
+ }
+
+ public BoundingBox getPointerBoundingBox(int id) {
+ return boundingBoxFromRect(getPointer(id).boundingBox);
+ }
+
+ private BoundingBox boundingBoxFromRect(RectF f) {
+ BoundingBox bb = new BoundingBox();
+ bb.setHeight(f.height());
+ bb.setWidth(f.width());
+ return bb;
+ }
+
+ private Pointer getPointer(int id) {
+ Pointer p = mPointerInfoMap.get(id);
+ if (p == null) {
+ p = new Pointer();
+ mPointerInfoMap.put(id, p);
+ }
+ return p;
+ }
+
+ private static class Pointer {
+ public float length;
+ public final RectF boundingBox = new RectF();
+
+ private float mLastX;
+ private float mLastY;
+
+ public void addPoint(float x, float y, boolean down) {
+ float deltaX;
+ float deltaY;
+ if (down) {
+ boundingBox.set(x, y, x, y);
+ length = 0f;
+ deltaX = 0;
+ deltaY = 0;
+ } else {
+ deltaX = x - mLastX;
+ deltaY = y - mLastY;
+ }
+ mLastX = x;
+ mLastY = y;
+ length += FloatMath.sqrt(deltaX * deltaX + deltaY * deltaY);
+ boundingBox.union(x, y);
+ }
+ }
+}
diff --git a/packages/Keyguard/src/com/android/keyguard/analytics/Session.java b/packages/Keyguard/src/com/android/keyguard/analytics/Session.java
new file mode 100644
index 0000000..05f9165
--- /dev/null
+++ b/packages/Keyguard/src/com/android/keyguard/analytics/Session.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.keyguard.analytics;
+
+import android.os.Build;
+import android.util.Slog;
+import android.view.MotionEvent;
+
+import java.util.ArrayList;
+
+import static com.android.keyguard.analytics.KeyguardAnalyticsProtos.Session.SensorEvent;
+import static com.android.keyguard.analytics.KeyguardAnalyticsProtos.Session.TouchEvent;
+
+/**
+ * Records data about one keyguard session.
+ *
+ * The recorded data contains start and end of the session, whether it unlocked the device
+ * successfully, sensor data and touch data.
+ *
+ * If the keyguard is secure, the recorded touch data will correlate or contain the user pattern or
+ * PIN. If this is not desired, the touch coordinates can be redacted before serialization.
+ */
+public class Session {
+
+ private static final String TAG = "KeyguardAnalytics";
+ private static final boolean DEBUG = false;
+
+ /**
+ * The user has failed to unlock the device in this session.
+ */
+ public static final int RESULT_FAILURE = KeyguardAnalyticsProtos.Session.FAILURE;
+ /**
+ * The user has succeeded in unlocking the device in this session.
+ */
+ public static final int RESULT_SUCCESS = KeyguardAnalyticsProtos.Session.SUCCESS;
+
+ /**
+ * It is unknown how the session with the keyguard ended.
+ */
+ public static final int RESULT_UNKNOWN = KeyguardAnalyticsProtos.Session.UNKNOWN;
+
+ /**
+ * This session took place on an insecure keyguard.
+ */
+ public static final int TYPE_KEYGUARD_INSECURE
+ = KeyguardAnalyticsProtos.Session.KEYGUARD_INSECURE;
+
+ /**
+ * This session took place on an secure keyguard.
+ */
+ public static final int TYPE_KEYGUARD_SECURE
+ = KeyguardAnalyticsProtos.Session.KEYGUARD_SECURE;
+
+ /**
+ * This session took place during a fake wake up of the device.
+ */
+ public static final int TYPE_RANDOM_WAKEUP = KeyguardAnalyticsProtos.Session.RANDOM_WAKEUP;
+
+
+ private final PointerTracker mPointerTracker = new PointerTracker();
+
+ private final long mStartTimestampMillis;
+ private final long mStartSystemTimeNanos;
+ private final int mType;
+
+ private boolean mRedactTouchEvents;
+ private ArrayList<TouchEvent> mMotionEvents = new ArrayList<TouchEvent>(200);
+ private ArrayList<SensorEvent> mSensorEvents = new ArrayList<SensorEvent>(600);
+ private int mTouchAreaHeight;
+ private int mTouchAreaWidth;
+
+ private long mEndTimestampMillis;
+ private int mResult;
+ private boolean mEnded;
+
+ public Session(long startTimestampMillis, long startSystemTimeNanos, int type) {
+ mStartTimestampMillis = startTimestampMillis;
+ mStartSystemTimeNanos = startSystemTimeNanos;
+ mType = type;
+ }
+
+ public void end(long endTimestampMillis, int result) {
+ mEnded = true;
+ mEndTimestampMillis = endTimestampMillis;
+ mResult = result;
+ }
+
+ public void addMotionEvent(MotionEvent motionEvent) {
+ if (mEnded) {
+ return;
+ }
+ mPointerTracker.addMotionEvent(motionEvent);
+ mMotionEvents.add(protoFromMotionEvent(motionEvent));
+ }
+
+ public void addSensorEvent(android.hardware.SensorEvent eventOrig, long systemTimeNanos) {
+ if (mEnded) {
+ return;
+ }
+ SensorEvent event = protoFromSensorEvent(eventOrig, systemTimeNanos);
+ mSensorEvents.add(event);
+ if (DEBUG) {
+ Slog.v(TAG, String.format("addSensorEvent(name=%s, values[0]=%f",
+ event.getType(), event.values[0]));
+ }
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder sb = new StringBuilder("Session{");
+ sb.append("mType=").append(mType);
+ sb.append(", mStartTimestampMillis=").append(mStartTimestampMillis);
+ sb.append(", mStartSystemTimeNanos=").append(mStartSystemTimeNanos);
+ sb.append(", mEndTimestampMillis=").append(mEndTimestampMillis);
+ sb.append(", mResult=").append(mResult);
+ sb.append(", mRedactTouchEvents=").append(mRedactTouchEvents);
+ sb.append(", mTouchAreaHeight=").append(mTouchAreaHeight);
+ sb.append(", mTouchAreaWidth=").append(mTouchAreaWidth);
+ sb.append(", mMotionEvents=[size=").append(mMotionEvents.size()).append("]");
+ sb.append(", mSensorEvents=[size=").append(mSensorEvents.size()).append("]");
+ sb.append('}');
+ return sb.toString();
+ }
+
+ public KeyguardAnalyticsProtos.Session toProto() {
+ KeyguardAnalyticsProtos.Session proto = new KeyguardAnalyticsProtos.Session();
+ proto.setStartTimestampMillis(mStartTimestampMillis);
+ proto.setDurationMillis(mEndTimestampMillis - mStartTimestampMillis);
+ proto.setBuild(Build.FINGERPRINT);
+ proto.setResult(mResult);
+ proto.sensorEvents = mSensorEvents.toArray(proto.sensorEvents);
+ proto.touchEvents = mMotionEvents.toArray(proto.touchEvents);
+ proto.setTouchAreaWidth(mTouchAreaWidth);
+ proto.setTouchAreaHeight(mTouchAreaHeight);
+ proto.setType(mType);
+ if (mRedactTouchEvents) {
+ redactTouchEvents(proto.touchEvents);
+ }
+ return proto;
+ }
+
+ private void redactTouchEvents(TouchEvent[] touchEvents) {
+ for (int i = 0; i < touchEvents.length; i++) {
+ TouchEvent t = touchEvents[i];
+ for (int j = 0; j < t.pointers.length; j++) {
+ TouchEvent.Pointer p = t.pointers[j];
+ p.clearX();
+ p.clearY();
+ }
+ t.setRedacted(true);
+ }
+ }
+
+ private SensorEvent protoFromSensorEvent(android.hardware.SensorEvent ev, long sysTimeNanos) {
+ SensorEvent proto = new SensorEvent();
+ proto.setType(ev.sensor.getType());
+ proto.setTimeOffsetNanos(sysTimeNanos - mStartSystemTimeNanos);
+ proto.setTimestamp(ev.timestamp);
+ proto.values = ev.values.clone();
+ return proto;
+ }
+
+ private TouchEvent protoFromMotionEvent(MotionEvent ev) {
+ int count = ev.getPointerCount();
+ TouchEvent proto = new TouchEvent();
+ proto.setTimeOffsetNanos(ev.getEventTimeNano() - mStartSystemTimeNanos);
+ proto.setAction(ev.getActionMasked());
+ proto.setActionIndex(ev.getActionIndex());
+ proto.pointers = new TouchEvent.Pointer[count];
+ for (int i = 0; i < count; i++) {
+ TouchEvent.Pointer p = new TouchEvent.Pointer();
+ p.setX(ev.getX(i));
+ p.setY(ev.getY(i));
+ p.setSize(ev.getSize(i));
+ p.setPressure(ev.getPressure(i));
+ p.setId(ev.getPointerId(i));
+ proto.pointers[i] = p;
+ if ((ev.getActionMasked() == MotionEvent.ACTION_POINTER_UP && ev.getActionIndex() == i)
+ || ev.getActionMasked() == MotionEvent.ACTION_UP) {
+ p.boundingBox = mPointerTracker.getPointerBoundingBox(p.getId());
+ p.setLength(mPointerTracker.getPointerLength(p.getId()));
+ }
+ }
+ if (ev.getActionMasked() == MotionEvent.ACTION_UP) {
+ proto.boundingBox = mPointerTracker.getBoundingBox();
+ }
+ return proto;
+ }
+
+ /**
+ * Discards the x / y coordinates of the touch events on serialization. Retained are the
+ * size of the individual and overall bounding boxes and the length of each pointer's gesture.
+ */
+ public void setRedactTouchEvents() {
+ mRedactTouchEvents = true;
+ }
+
+ public void setTouchArea(int width, int height) {
+ mTouchAreaWidth = width;
+ mTouchAreaHeight = height;
+ }
+
+ public long getStartTimestampMillis() {
+ return mStartTimestampMillis;
+ }
+}
diff --git a/packages/Keyguard/src/com/android/keyguard/analytics/keyguard_analytics.proto b/packages/Keyguard/src/com/android/keyguard/analytics/keyguard_analytics.proto
new file mode 100644
index 0000000..68b1590
--- /dev/null
+++ b/packages/Keyguard/src/com/android/keyguard/analytics/keyguard_analytics.proto
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+syntax = "proto2";
+
+package keyguard;
+
+option java_package = "com.android.keyguard.analytics";
+option java_outer_classname = "KeyguardAnalyticsProtos";
+
+message Session {
+ message TouchEvent {
+ message BoundingBox {
+ optional float width = 1;
+ optional float height = 2;
+ }
+
+ enum Action {
+ // Keep in sync with MotionEvent.
+ DOWN = 0;
+ UP = 1;
+ MOVE = 2;
+ CANCEL = 3;
+ OUTSIDE = 4;
+ POINTER_DOWN = 5;
+ POINTER_UP = 6;
+ }
+
+ message Pointer {
+ optional float x = 1;
+ optional float y = 2;
+ optional float size = 3;
+ optional float pressure = 4;
+ optional int32 id = 5;
+ optional float length = 6;
+ // Bounding box of the pointer. Only set on UP or POINTER_UP event of this pointer.
+ optional BoundingBox boundingBox = 7;
+ }
+
+ optional uint64 timeOffsetNanos = 1;
+ optional Action action = 2;
+ optional int32 actionIndex = 3;
+ repeated Pointer pointers = 4;
+ /* If true, the the x / y coordinates of the touch events were redacted. Retained are the
+ size of the individual and overall bounding boxes and the length of each pointer's
+ gesture. */
+ optional bool redacted = 5;
+ // Bounding box of the whole gesture. Only set on UP event.
+ optional BoundingBox boundingBox = 6;
+ }
+
+ message SensorEvent {
+ enum Type {
+ ACCELEROMETER = 1;
+ GYROSCOPE = 4;
+ LIGHT = 5;
+ PROXIMITY = 8;
+ ROTATION_VECTOR = 11;
+ }
+
+ optional Type type = 1;
+ optional uint64 timeOffsetNanos = 2;
+ repeated float values = 3;
+ optional uint64 timestamp = 4;
+ }
+
+ enum Result {
+ FAILURE = 0;
+ SUCCESS = 1;
+ UNKNOWN = 2;
+ }
+
+ enum Type {
+ KEYGUARD_INSECURE = 0;
+ KEYGUARD_SECURE = 1;
+ RANDOM_WAKEUP = 2;
+ }
+
+ optional uint64 startTimestampMillis = 1;
+ optional uint64 durationMillis = 2;
+ optional string build = 3;
+ optional Result result = 4;
+ repeated TouchEvent touchEvents = 5;
+ repeated SensorEvent sensorEvents = 6;
+
+ optional int32 touchAreaWidth = 9;
+ optional int32 touchAreaHeight = 10;
+ optional Type type = 11;
+}
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index 7410b9d..59b486f 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -186,4 +186,7 @@
<!-- Default for Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS, 1==on -->
<integer name="def_lock_screen_show_notifications">1</integer>
+ <!-- Default for Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, 1==on -->
+ <integer name="def_heads_up_enabled">1</integer>
+
</resources>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index b546689..55d7def 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -69,7 +69,7 @@
// database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
// is properly propagated through your change. Not doing so will result in a loss of user
// settings.
- private static final int DATABASE_VERSION = 99;
+ private static final int DATABASE_VERSION = 100;
private Context mContext;
private int mUserHandle;
@@ -1574,6 +1574,24 @@
upgradeVersion = 99;
}
+ if (upgradeVersion == 99) {
+ if (mUserHandle == UserHandle.USER_OWNER) {
+ db.beginTransaction();
+ SQLiteStatement stmt = null;
+ try {
+ stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
+ + " VALUES(?,?);");
+ loadIntegerSetting(stmt, Global.HEADS_UP_NOTIFICATIONS_ENABLED,
+ R.integer.def_heads_up_enabled);
+ db.setTransactionSuccessful();
+ } finally {
+ db.endTransaction();
+ if (stmt != null) stmt.close();
+ }
+ }
+ upgradeVersion = 100;
+ }
+
// *** Remember to update DATABASE_VERSION above!
if (upgradeVersion != currentVersion) {
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/heads_up_window_bg.9.png
new file mode 100644
index 0000000..b30cf15
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/heads_up_window_bg.9.png
Binary files differ
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 8509701..fb11743 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -96,7 +96,6 @@
protected static final boolean ENABLE_HEADS_UP = true;
// scores above this threshold should be displayed in heads up mode.
protected static final int INTERRUPTION_THRESHOLD = 11;
- protected static final String SETTING_HEADS_UP = "heads_up_enabled";
protected static final String SETTING_HEADS_UP_TICKER = "ticker_gets_heads_up";
// Should match the value in PhoneWindowManager
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index ae74407..237b7f7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -20,6 +20,7 @@
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
+import android.provider.Settings;
import android.util.AttributeSet;
import android.util.EventLog;
import android.view.MotionEvent;
@@ -58,7 +59,14 @@
mHandleView = findViewById(R.id.handle);
PanelHeaderView header = (PanelHeaderView) findViewById(R.id.header);
ZenModeView zenModeView = (ZenModeView) findViewById(R.id.zenmode);
- zenModeView.setAdapter( new ZenModeViewAdapter(mContext));
+ zenModeView.setAdapter(new ZenModeViewAdapter(mContext) {
+ @Override
+ public void configure() {
+ if (mStatusBar != null) {
+ mStatusBar.startSettingsActivity(Settings.ACTION_ZEN_MODE_SETTINGS);
+ }
+ }
+ });
header.setZenModeView(zenModeView);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 1464b39..6718de1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -312,15 +312,17 @@
@Override
public void onChange(boolean selfChange) {
boolean wasUsing = mUseHeadsUp;
- mUseHeadsUp = ENABLE_HEADS_UP && 0 != Settings.Global.getInt(
- mContext.getContentResolver(), SETTING_HEADS_UP, 0);
+ mUseHeadsUp = ENABLE_HEADS_UP && Settings.Global.HEADS_UP_OFF != Settings.Global.getInt(
+ mContext.getContentResolver(), Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED,
+ Settings.Global.HEADS_UP_OFF);
mHeadsUpTicker = mUseHeadsUp && 0 != Settings.Global.getInt(
mContext.getContentResolver(), SETTING_HEADS_UP_TICKER, 0);
Log.d(TAG, "heads up is " + (mUseHeadsUp ? "enabled" : "disabled"));
if (wasUsing != mUseHeadsUp) {
if (!mUseHeadsUp) {
Log.d(TAG, "dismissing any existing heads up notification on disable event");
- mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP);
+ setHeadsUpVisibility(false);
+ mHeadsUpNotificationView.setNotification(null);
removeHeadsUpView();
} else {
addHeadsUpView();
@@ -375,7 +377,7 @@
mHeadsUpObserver.onChange(true); // set up
if (ENABLE_HEADS_UP) {
mContext.getContentResolver().registerContentObserver(
- Settings.Global.getUriFor(SETTING_HEADS_UP), true,
+ Settings.Global.getUriFor(Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED), true,
mHeadsUpObserver);
mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(SETTING_HEADS_UP_TICKER), true,
@@ -2212,6 +2214,7 @@
pw.println(BarTransitions.modeToString(mStatusBarMode));
pw.print(" mZenMode=");
pw.println(Settings.Global.zenModeToString(mZenMode));
+ pw.print(" mUseHeadsUp=" + mUseHeadsUp);
dumpBarTransitions(pw, "mStatusBarView", mStatusBarView.getBarTransitions());
if (mNavigationBarView != null) {
pw.print(" mNavigationBarWindowState=");
@@ -2739,6 +2742,12 @@
|| (mDisabled & StatusBarManager.DISABLE_SEARCH) != 0;
}
+ public void startSettingsActivity(String action) {
+ if (mQS != null) {
+ mQS.startSettingsActivity(action);
+ }
+ }
+
private static class FastColorDrawable extends Drawable {
private final int mColor;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
index bcb818a..c1c8946 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
@@ -278,7 +278,7 @@
mTilesSetUp = true;
}
- private void startSettingsActivity(String action) {
+ public void startSettingsActivity(String action) {
Intent intent = new Intent(action);
startSettingsActivity(intent);
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeView.java
index f5dc4d9..c4d2cce 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeView.java
@@ -66,10 +66,7 @@
private static final long BOUNCE_DURATION = DURATION / 3;
private static final float BOUNCE_SCALE = 0.8f;
private static final float SETTINGS_ALPHA = 0.6f;
- private static final int INFO_WINDOW_DELAY = 2000;
- private static final String LIMITED_TEXT =
- "New notifications suppressed except calls, alarms & timers.";
private static final String FULL_TEXT =
"You won't hear any calls, alarms or timers.";
@@ -79,7 +76,6 @@
private final ModeSpinner mModeSpinner;
private final ImageView mCloseButton;
private final ImageView mSettingsButton;
- private final InfoWindow mInfoWindow;
private final Rect mLayoutRect = new Rect();
private final UntilPager mUntilPager;
private final AlarmWarning mAlarmWarning;
@@ -133,16 +129,12 @@
mSettingsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- if (mAdapter == null || mAdapter.getMode() != Adapter.MODE_LIMITED) {
- return;
- }
- if (!mInfoWindow.isShowing()) {
- mInfoWindow.show(mUntilPager);
+ if (mAdapter != null && mAdapter.getMode() == Adapter.MODE_LIMITED) {
+ mAdapter.configure();
}
bounce(mSettingsButton, null);
}
});
- mInfoWindow = new InfoWindow(mContext, LIMITED_TEXT);
mModeSpinner = new ModeSpinner(mContext);
mModeSpinner.setAlpha(0);
@@ -201,7 +193,6 @@
}).start();
mUntilPager.animate().alpha(0).start();
mAlarmWarning.animate().alpha(0).start();
- mInfoWindow.dismiss();
}
public void setAdapter(Adapter adapter) {
@@ -247,7 +238,6 @@
mBottom = getExpandedBottom();
setExpanded(1);
}
- mInfoWindow.dismiss();
}
}
@@ -271,10 +261,9 @@
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (DEBUG) log("onMeasure %s %s",
MeasureSpec.toString(widthMeasureSpec), MeasureSpec.toString(heightMeasureSpec));
- if (MeasureSpec.getMode(widthMeasureSpec) != MeasureSpec.EXACTLY) {
- throw new UnsupportedOperationException("Width must be exact");
- }
- if (widthMeasureSpec != mWidthSpec) {
+ final boolean widthExact = MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY;
+
+ if (!widthExact || (widthMeasureSpec != mWidthSpec)) {
if (DEBUG) log(" super.onMeasure");
final int hms = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
super.onMeasure(widthMeasureSpec, hms);
@@ -597,6 +586,7 @@
public static final int MODE_FULL = 2;
boolean isApplicable();
+ void configure();
int getMode();
void setMode(int mode);
void select(ExitCondition ec);
@@ -745,33 +735,4 @@
}
}
}
-
- private static class InfoWindow extends PopupWindow implements Runnable {
- private final TextView mText;
-
- public InfoWindow(Context context, String text) {
- mText = new TextView(context);
- mText.setTypeface(CONDENSED);
- mText.setBackgroundColor(0xbb000000);
- mText.setTextColor(0xffffffff);
- mText.setText(text);
- mText.setGravity(Gravity.CENTER);
- setAnimationStyle(android.R.style.Animation_Toast);
- setContentView(mText);
- }
-
- @Override
- public void run() {
- dismiss();
- }
-
- public void show(View over) {
- setWidth(over.getMeasuredWidth());
- setHeight(over.getMeasuredHeight());
- final int[] loc = new int[2];
- over.getLocationInWindow(loc);
- showAtLocation(over, Gravity.NO_GRAVITY, loc[0], loc[1]);
- over.postDelayed(this, INFO_WINDOW_DELAY);
- }
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeViewAdapter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeViewAdapter.java
index c9ac89f..39c4faa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeViewAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeViewAdapter.java
@@ -27,7 +27,7 @@
import java.util.Arrays;
import java.util.List;
-public class ZenModeViewAdapter implements ZenModeView.Adapter {
+public abstract class ZenModeViewAdapter implements ZenModeView.Adapter {
private static final String TAG = "ZenModeViewAdapter";
private final Context mContext;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java
index f4bc4a4..79932a7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java
@@ -73,19 +73,24 @@
public boolean setNotification(NotificationData.Entry headsUp) {
mHeadsUp = headsUp;
- mHeadsUp.row.setExpanded(true);
- mHeadsUp.row.setShowingPublic(false);
- if (mContentHolder == null) {
- // too soon!
- return false;
+ if (mContentHolder != null) {
+ mContentHolder.removeAllViews();
}
- mContentHolder.setX(0);
- mContentHolder.setVisibility(View.VISIBLE);
- mContentHolder.setAlpha(1f);
- mContentHolder.removeAllViews();
- mContentHolder.addView(mHeadsUp.row);
- mSwipeHelper.snapChild(mContentHolder, 1f);
- mStartTouchTime = System.currentTimeMillis() + mTouchSensitivityDelay;
+
+ if (mHeadsUp != null) {
+ mHeadsUp.row.setExpanded(true);
+ mHeadsUp.row.setShowingPublic(false);
+ if (mContentHolder == null) {
+ // too soon!
+ return false;
+ }
+ mContentHolder.setX(0);
+ mContentHolder.setVisibility(View.VISIBLE);
+ mContentHolder.setAlpha(1f);
+ mContentHolder.addView(mHeadsUp.row);
+ mSwipeHelper.snapChild(mContentHolder, 1f);
+ mStartTouchTime = System.currentTimeMillis() + mTouchSensitivityDelay;
+ }
return true;
}
diff --git a/rs/java/android/renderscript/BaseObj.java b/rs/java/android/renderscript/BaseObj.java
index b386dd7..1372ab7 100644
--- a/rs/java/android/renderscript/BaseObj.java
+++ b/rs/java/android/renderscript/BaseObj.java
@@ -181,6 +181,10 @@
if (this == obj)
return true;
+ if (obj == null) {
+ return false;
+ }
+
if (getClass() != obj.getClass()) {
return false;
}
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index 186ae1b..8eaefef 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -5803,19 +5803,25 @@
return;
}
+ boolean skip = false;
+
long restoreSet = getAvailableRestoreToken(packageName);
if (DEBUG) Slog.v(TAG, "restoreAtInstall pkg=" + packageName
+ " token=" + Integer.toHexString(token)
+ " restoreSet=" + Long.toHexString(restoreSet));
+ if (restoreSet == 0) {
+ if (MORE_DEBUG) Slog.i(TAG, "No restore set");
+ skip = true;
+ }
- if (mAutoRestore && mProvisioned && restoreSet != 0) {
- // Do we have a transport to fetch data for us?
- IBackupTransport transport = getTransport(mCurrentTransport);
- if (transport == null) {
- if (DEBUG) Slog.w(TAG, "No transport for install-time restore");
- return;
- }
+ // Do we have a transport to fetch data for us?
+ IBackupTransport transport = getTransport(mCurrentTransport);
+ if (transport == null) {
+ if (DEBUG) Slog.w(TAG, "No transport");
+ skip = true;
+ }
+ if (!skip && mAutoRestore && mProvisioned) {
try {
// okay, we're going to attempt a restore of this package from this restore set.
// The eventual message back into the Package Manager to run the post-install
@@ -5837,12 +5843,15 @@
mBackupHandler.sendMessage(msg);
} catch (RemoteException e) {
// Binding to the transport broke; back off and proceed with the installation.
- Slog.e(TAG, "Unable to contact transport for install-time restore");
+ Slog.e(TAG, "Unable to contact transport");
+ skip = true;
}
- } else {
+ }
+
+ if (skip) {
// Auto-restore disabled or no way to attempt a restore; just tell the Package
// Manager to proceed with the post-install handling for this package.
- if (DEBUG) Slog.v(TAG, "No restore set -- skipping restore");
+ if (DEBUG) Slog.v(TAG, "Skipping");
try {
mPackageManagerBinder.finishPackageInstall(token);
} catch (RemoteException e) { /* can't happen */ }
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 36907ed..ffc748f 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -1986,7 +1986,9 @@
mNetTrackers[prevNetType].setTeardownRequested(false);
// Remove idletimer previously setup in {@code handleConnect}
- removeDataActivityTracking(prevNetType);
+ if (mNetConfigs[prevNetType].isDefault()) {
+ removeDataActivityTracking(prevNetType);
+ }
/*
* If the disconnected network is not the active one, then don't report
@@ -2318,8 +2320,6 @@
private void handleConnect(NetworkInfo info) {
final int newNetType = info.getType();
- setupDataActivityTracking(newNetType);
-
// snapshot isFailover, because sendConnectedBroadcast() resets it
boolean isFailover = info.isFailover();
final NetworkStateTracker thisNet = mNetTrackers[newNetType];
@@ -2357,6 +2357,7 @@
return;
}
}
+ setupDataActivityTracking(newNetType);
synchronized (ConnectivityService.this) {
// have a new default network, release the transition wakelock in a second
// if it's held. The second pause is to allow apps to reconnect over the
@@ -2377,9 +2378,9 @@
mInetConditionChangeInFlight = false;
// Don't do this - if we never sign in stay, grey
//reportNetworkCondition(mActiveDefaultNetwork, 100);
+ updateNetworkSettings(thisNet);
}
thisNet.setTeardownRequested(false);
- updateNetworkSettings(thisNet);
updateMtuSizeSettings(thisNet);
handleConnectivityChange(newNetType, false);
sendConnectedBroadcastDelayed(info, getConnectivityChangeDelay());
@@ -2406,7 +2407,7 @@
* Setup data activity tracking for the given network interface.
*
* Every {@code setupDataActivityTracking} should be paired with a
- * {@link removeDataActivityTracking} for cleanup.
+ * {@link #removeDataActivityTracking} for cleanup.
*/
private void setupDataActivityTracking(int type) {
final NetworkStateTracker thisNet = mNetTrackers[type];
@@ -2431,7 +2432,7 @@
if (timeout > 0 && iface != null) {
try {
- mNetd.addIdleTimer(iface, timeout, Integer.toString(type));
+ mNetd.addIdleTimer(iface, timeout, type);
} catch (RemoteException e) {
}
}
@@ -2944,6 +2945,9 @@
}
}
+ pw.print("Active default network: "); pw.println(getNetworkTypeName(mActiveDefaultNetwork));
+ pw.println();
+
pw.println("Network Requester Pids:");
pw.increaseIndent();
for (int net : mPriorityList) {
@@ -3082,7 +3086,7 @@
case NetworkStateTracker.EVENT_NETWORK_SUBTYPE_CHANGED: {
info = (NetworkInfo) msg.obj;
int type = info.getType();
- updateNetworkSettings(mNetTrackers[type]);
+ if (mNetConfigs[type].isDefault()) updateNetworkSettings(mNetTrackers[type]);
break;
}
}
@@ -3641,8 +3645,7 @@
int user = UserHandle.getUserId(Binder.getCallingUid());
if (ConnectivityManager.isNetworkTypeValid(type) && mNetTrackers[type] != null) {
synchronized(mVpns) {
- mVpns.get(user).protect(socket,
- mNetTrackers[type].getLinkProperties().getInterfaceName());
+ mVpns.get(user).protect(socket);
}
return true;
}
diff --git a/services/core/java/com/android/server/INativeDaemonConnectorCallbacks.java b/services/core/java/com/android/server/INativeDaemonConnectorCallbacks.java
index 6fbf713..0cf9dcd 100644
--- a/services/core/java/com/android/server/INativeDaemonConnectorCallbacks.java
+++ b/services/core/java/com/android/server/INativeDaemonConnectorCallbacks.java
@@ -20,5 +20,6 @@
interface INativeDaemonConnectorCallbacks {
void onDaemonConnected();
+ boolean onCheckHoldWakeLock(int code);
boolean onEvent(int code, String raw, String[] cooked);
}
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java
index fc68205..473aa34 100644
--- a/services/core/java/com/android/server/LocationManagerService.java
+++ b/services/core/java/com/android/server/LocationManagerService.java
@@ -1790,10 +1790,6 @@
@Override
public boolean isProviderEnabled(String provider) {
- // TODO: remove this check in next release, see b/10696351
- checkResolutionLevelIsSufficientForProviderUse(getCallerAllowedResolutionLevel(),
- provider);
-
// Fused provider is accessed indirectly via criteria rather than the provider-based APIs,
// so we discourage its use
if (LocationManager.FUSED_PROVIDER.equals(provider)) return false;
@@ -2231,6 +2227,13 @@
public void removeTestProvider(String provider) {
checkMockPermissionsSafe();
synchronized (mLock) {
+
+ // These methods can't be called after removing the test provider, so first make sure
+ // we don't leave anything dangling (cf b/11446702).
+ clearTestProviderEnabled(provider);
+ clearTestProviderLocation(provider);
+ clearTestProviderStatus(provider);
+
MockProvider mockProvider = mMockProviders.remove(provider);
if (mockProvider == null) {
throw new IllegalArgumentException("Provider \"" + provider + "\" unknown");
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index 607def6..a7ef424 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -817,6 +817,13 @@
/**
* Callback from NativeDaemonConnector
*/
+ public boolean onCheckHoldWakeLock(int code) {
+ return false;
+ }
+
+ /**
+ * Callback from NativeDaemonConnector
+ */
public boolean onEvent(int code, String raw, String[] cooked) {
if (DEBUG_EVENTS) {
StringBuilder builder = new StringBuilder();
@@ -1407,7 +1414,8 @@
* amount of containers we'd ever expect to have. This keeps an
* "asec list" from blocking a thread repeatedly.
*/
- mConnector = new NativeDaemonConnector(this, "vold", MAX_CONTAINERS * 2, VOLD_TAG, 25);
+ mConnector = new NativeDaemonConnector(this, "vold", MAX_CONTAINERS * 2, VOLD_TAG, 25,
+ null);
Thread thread = new Thread(mConnector, VOLD_TAG);
thread.start();
diff --git a/services/core/java/com/android/server/NativeDaemonConnector.java b/services/core/java/com/android/server/NativeDaemonConnector.java
index 417d6d8..265b957 100644
--- a/services/core/java/com/android/server/NativeDaemonConnector.java
+++ b/services/core/java/com/android/server/NativeDaemonConnector.java
@@ -21,6 +21,7 @@
import android.os.Build;
import android.os.Handler;
import android.os.Message;
+import android.os.PowerManager;
import android.os.SystemClock;
import android.util.LocalLog;
import android.util.Slog;
@@ -56,6 +57,8 @@
private final ResponseQueue mResponseQueue;
+ private final PowerManager.WakeLock mWakeLock;
+
private INativeDaemonConnectorCallbacks mCallbacks;
private Handler mCallbackHandler;
@@ -70,10 +73,14 @@
private final int BUFFER_SIZE = 4096;
NativeDaemonConnector(INativeDaemonConnectorCallbacks callbacks, String socket,
- int responseQueueSize, String logTag, int maxLogSize) {
+ int responseQueueSize, String logTag, int maxLogSize, PowerManager.WakeLock wl) {
mCallbacks = callbacks;
mSocket = socket;
mResponseQueue = new ResponseQueue(responseQueueSize);
+ mWakeLock = wl;
+ if (mWakeLock != null) {
+ mWakeLock.setReferenceCounted(true);
+ }
mSequenceNumber = new AtomicInteger(0);
TAG = logTag != null ? logTag : "NativeDaemonConnector";
mLocalLog = new LocalLog(maxLogSize);
@@ -102,6 +109,10 @@
}
} catch (Exception e) {
loge("Error handling '" + event + "': " + e);
+ } finally {
+ if (mCallbacks.onCheckHoldWakeLock(msg.what)) {
+ mWakeLock.release();
+ }
}
return true;
}
@@ -154,18 +165,29 @@
buffer, start, i - start, StandardCharsets.UTF_8);
log("RCV <- {" + rawEvent + "}");
+ boolean releaseWl = false;
try {
final NativeDaemonEvent event = NativeDaemonEvent.parseRawEvent(
rawEvent);
if (event.isClassUnsolicited()) {
// TODO: migrate to sending NativeDaemonEvent instances
- mCallbackHandler.sendMessage(mCallbackHandler.obtainMessage(
- event.getCode(), event.getRawEvent()));
+ if (mCallbacks.onCheckHoldWakeLock(event.getCode())) {
+ mWakeLock.acquire();
+ releaseWl = true;
+ }
+ if (mCallbackHandler.sendMessage(mCallbackHandler.obtainMessage(
+ event.getCode(), event.getRawEvent()))) {
+ releaseWl = false;
+ }
} else {
mResponseQueue.add(event.getCmdNumber(), event);
}
} catch (IllegalArgumentException e) {
log("Problem parsing message: " + rawEvent + " - " + e);
+ } finally {
+ if (releaseWl) {
+ mWakeLock.acquire();
+ }
}
start = i + 1;
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index 74de577..bfc966b 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -37,6 +37,7 @@
import static com.android.server.NetworkManagementSocketTagger.PROP_QTAGUID_ENABLED;
import android.content.Context;
+import android.net.ConnectivityManager;
import android.net.INetworkManagementEventObserver;
import android.net.InterfaceConfiguration;
import android.net.LinkAddress;
@@ -48,7 +49,9 @@
import android.os.BatteryStats;
import android.os.Binder;
import android.os.Handler;
+import android.os.INetworkActivityListener;
import android.os.INetworkManagementService;
+import android.os.PowerManager;
import android.os.Process;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
@@ -81,7 +84,6 @@
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -175,12 +177,12 @@
/** Set of interfaces with active idle timers. */
private static class IdleTimerParams {
public final int timeout;
- public final String label;
+ public final int type;
public int networkCount;
- IdleTimerParams(int timeout, String label) {
+ IdleTimerParams(int timeout, int type) {
this.timeout = timeout;
- this.label = label;
+ this.type = type;
this.networkCount = 1;
}
}
@@ -189,6 +191,10 @@
private volatile boolean mBandwidthControlEnabled;
private volatile boolean mFirewallEnabled;
+ private final RemoteCallbackList<INetworkActivityListener> mNetworkActivityListeners =
+ new RemoteCallbackList<INetworkActivityListener>();
+ private boolean mNetworkActive;
+
/**
* Constructs a new NetworkManagementService instance
*
@@ -201,8 +207,11 @@
return;
}
+ PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
+ PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, NETD_TAG);
+
mConnector = new NativeDaemonConnector(
- new NetdCallbackReceiver(), socket, 10, NETD_TAG, 160);
+ new NetdCallbackReceiver(), socket, 10, NETD_TAG, 160, wl);
mThread = new Thread(mConnector, NETD_TAG);
// Add ourself to the Watchdog monitors.
@@ -337,20 +346,38 @@
/**
* Notify our observers of a change in the data activity state of the interface
*/
- private void notifyInterfaceClassActivity(String label, boolean active) {
+ private void notifyInterfaceClassActivity(int type, boolean active) {
try {
- getBatteryStats().noteDataConnectionActive(label, active);
+ getBatteryStats().noteDataConnectionActive(type, active);
} catch (RemoteException e) {
}
+
final int length = mObservers.beginBroadcast();
for (int i = 0; i < length; i++) {
try {
- mObservers.getBroadcastItem(i).interfaceClassDataActivityChanged(label, active);
+ mObservers.getBroadcastItem(i).interfaceClassDataActivityChanged(
+ Integer.toString(type), active);
} catch (RemoteException e) {
} catch (RuntimeException e) {
}
}
mObservers.finishBroadcast();
+
+ boolean report = false;
+ synchronized (mIdleTimerLock) {
+ if (mActiveIdleTimers.isEmpty()) {
+ // If there are no idle times, we are not monitoring activity, so we
+ // are always considered active.
+ active = true;
+ }
+ if (mNetworkActive != active) {
+ mNetworkActive = active;
+ report = active;
+ }
+ }
+ if (report) {
+ reportNetworkActive();
+ }
}
/**
@@ -488,6 +515,11 @@
}
@Override
+ public boolean onCheckHoldWakeLock(int code) {
+ return code == NetdResponseCode.InterfaceClassActivity;
+ }
+
+ @Override
public boolean onEvent(int code, String raw, String[] cooked) {
String errorMessage = String.format("Invalid event from daemon (%s)", raw);
switch (code) {
@@ -540,7 +572,7 @@
throw new IllegalStateException(errorMessage);
}
boolean isActive = cooked[2].equals("active");
- notifyInterfaceClassActivity(cooked[3], isActive);
+ notifyInterfaceClassActivity(Integer.parseInt(cooked[3]), isActive);
return true;
// break;
case NetdResponseCode.InterfaceAddressChange:
@@ -1202,7 +1234,7 @@
}
@Override
- public void addIdleTimer(String iface, int timeout, String label) {
+ public void addIdleTimer(String iface, int timeout, final int type) {
mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
if (DBG) Slog.d(TAG, "Adding idletimer");
@@ -1216,13 +1248,22 @@
}
try {
- mConnector.execute("idletimer", "add", iface, Integer.toString(timeout), label);
+ mConnector.execute("idletimer", "add", iface, Integer.toString(timeout),
+ Integer.toString(type));
} catch (NativeDaemonConnectorException e) {
throw e.rethrowAsParcelableException();
}
- mActiveIdleTimers.put(iface, new IdleTimerParams(timeout, label));
+ mActiveIdleTimers.put(iface, new IdleTimerParams(timeout, type));
+
// Networks start up.
- notifyInterfaceClassActivity(label, true);
+ if (ConnectivityManager.isNetworkTypeMobile(type)) {
+ mNetworkActive = false;
+ }
+ mMainHandler.post(new Runnable() {
+ @Override public void run() {
+ notifyInterfaceClassActivity(type, true);
+ }
+ });
}
}
@@ -1233,18 +1274,23 @@
if (DBG) Slog.d(TAG, "Removing idletimer");
synchronized (mIdleTimerLock) {
- IdleTimerParams params = mActiveIdleTimers.get(iface);
+ final IdleTimerParams params = mActiveIdleTimers.get(iface);
if (params == null || --(params.networkCount) > 0) {
return;
}
try {
mConnector.execute("idletimer", "remove", iface,
- Integer.toString(params.timeout), params.label);
+ Integer.toString(params.timeout), Integer.toString(params.type));
} catch (NativeDaemonConnectorException e) {
throw e.rethrowAsParcelableException();
}
mActiveIdleTimers.remove(iface);
+ mMainHandler.post(new Runnable() {
+ @Override public void run() {
+ notifyInterfaceClassActivity(params.type, false);
+ }
+ });
}
}
@@ -1803,6 +1849,35 @@
return event.getMessage().endsWith("started");
}
+ @Override
+ public void registerNetworkActivityListener(INetworkActivityListener listener) {
+ mNetworkActivityListeners.register(listener);
+ }
+
+ @Override
+ public void unregisterNetworkActivityListener(INetworkActivityListener listener) {
+ mNetworkActivityListeners.unregister(listener);
+ }
+
+ @Override
+ public boolean isNetworkActive() {
+ synchronized (mNetworkActivityListeners) {
+ return mNetworkActive || mActiveIdleTimers.isEmpty();
+ }
+ }
+
+ private void reportNetworkActive() {
+ final int length = mNetworkActivityListeners.beginBroadcast();
+ for (int i = 0; i < length; i++) {
+ try {
+ mNetworkActivityListeners.getBroadcastItem(i).onNetworkActive();
+ } catch (RemoteException e) {
+ } catch (RuntimeException e) {
+ }
+ }
+ mNetworkActivityListeners.finishBroadcast();
+ }
+
/** {@inheritDoc} */
@Override
public void monitor() {
@@ -1836,6 +1911,17 @@
pw.println("]");
}
+ synchronized (mIdleTimerLock) {
+ pw.println("Idle timers:");
+ for (HashMap.Entry<String, IdleTimerParams> ent : mActiveIdleTimers.entrySet()) {
+ pw.print(" "); pw.print(ent.getKey()); pw.println(":");
+ IdleTimerParams params = ent.getValue();
+ pw.print(" timeout="); pw.print(params.timeout);
+ pw.print(" type="); pw.print(params.type);
+ pw.print(" networkCount="); pw.println(params.networkCount);
+ }
+ }
+
pw.print("Firewall enabled: "); pw.println(mFirewallEnabled);
}
}
diff --git a/services/core/java/com/android/server/NsdService.java b/services/core/java/com/android/server/NsdService.java
index 74633ae..c9f9a25 100644
--- a/services/core/java/com/android/server/NsdService.java
+++ b/services/core/java/com/android/server/NsdService.java
@@ -534,7 +534,7 @@
mContentResolver = context.getContentResolver();
mNativeConnector = new NativeDaemonConnector(new NativeCallbackReceiver(), "mdns", 10,
- MDNS_TAG, 25);
+ MDNS_TAG, 25, null);
mNsdStateMachine = new NsdStateMachine(TAG);
mNsdStateMachine.start();
@@ -622,6 +622,10 @@
mNativeDaemonConnected.countDown();
}
+ public boolean onCheckHoldWakeLock(int code) {
+ return false;
+ }
+
public boolean onEvent(int code, String raw, String[] cooked) {
// TODO: NDC translates a message to a callback, we could enhance NDC to
// directly interact with a state machine through messages
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 3bb1d0d..f8d7821 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -16081,8 +16081,20 @@
// Multi-user methods
+ /**
+ * Start user, if its not already running, but don't bring it to foreground.
+ */
+ @Override
+ public boolean startUserInBackground(final int userId) {
+ return startUser(userId, /* foreground */ false);
+ }
+
@Override
public boolean switchUser(final int userId) {
+ return startUser(userId, /* foregound */ true);
+ }
+
+ private boolean startUser(final int userId, boolean foreground) {
if (checkCallingPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
!= PackageManager.PERMISSION_GRANTED) {
String msg = "Permission Denial: switchUser() from pid="
@@ -16120,12 +16132,18 @@
needStart = true;
}
- mCurrentUserId = userId;
final Integer userIdInt = Integer.valueOf(userId);
mUserLru.remove(userIdInt);
mUserLru.add(userIdInt);
- mWindowManager.setCurrentUser(userId);
+ if (foreground) {
+ mCurrentUserId = userId;
+ mWindowManager.setCurrentUser(userId);
+ } else {
+ final Integer currentUserIdInt = Integer.valueOf(mCurrentUserId);
+ mUserLru.remove(currentUserIdInt);
+ mUserLru.add(currentUserIdInt);
+ }
// Once the internal notion of the active user has switched, we lock the device
// with the option to show the user switcher on the keyguard.
@@ -16150,12 +16168,15 @@
needStart = true;
}
- mHandler.removeMessages(REPORT_USER_SWITCH_MSG);
- mHandler.removeMessages(USER_SWITCH_TIMEOUT_MSG);
- mHandler.sendMessage(mHandler.obtainMessage(REPORT_USER_SWITCH_MSG,
- oldUserId, userId, uss));
- mHandler.sendMessageDelayed(mHandler.obtainMessage(USER_SWITCH_TIMEOUT_MSG,
- oldUserId, userId, uss), USER_SWITCH_TIMEOUT);
+ if (foreground) {
+ mHandler.removeMessages(REPORT_USER_SWITCH_MSG);
+ mHandler.removeMessages(USER_SWITCH_TIMEOUT_MSG);
+ mHandler.sendMessage(mHandler.obtainMessage(REPORT_USER_SWITCH_MSG,
+ oldUserId, userId, uss));
+ mHandler.sendMessageDelayed(mHandler.obtainMessage(USER_SWITCH_TIMEOUT_MSG,
+ oldUserId, userId, uss), USER_SWITCH_TIMEOUT);
+ }
+
if (needStart) {
Intent intent = new Intent(Intent.ACTION_USER_STARTED);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
@@ -16186,16 +16207,18 @@
}
}
- boolean homeInFront = mStackSupervisor.switchUserLocked(userId, uss);
- if (homeInFront) {
- startHomeActivityLocked(userId);
- } else {
- mStackSupervisor.resumeTopActivitiesLocked();
+ if (foreground) {
+ boolean homeInFront = mStackSupervisor.switchUserLocked(userId, uss);
+ if (homeInFront) {
+ startHomeActivityLocked(userId);
+ } else {
+ mStackSupervisor.resumeTopActivitiesLocked();
+ }
+ EventLogTags.writeAmSwitchUser(userId);
+ getUserManagerLocked().userForeground(userId);
+ sendUserSwitchBroadcastsLocked(oldUserId, userId);
}
- EventLogTags.writeAmSwitchUser(userId);
- getUserManagerLocked().userForeground(userId);
- sendUserSwitchBroadcastsLocked(oldUserId, userId);
if (needStart) {
Intent intent = new Intent(Intent.ACTION_USER_STARTING);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index da85835..fc7aac2 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -232,10 +232,10 @@
}
}
- public void noteDataConnectionActive(String label, boolean active) {
+ public void noteDataConnectionActive(int type, boolean active) {
enforceCallingPermission();
synchronized (mStats) {
- mStats.noteDataConnectionActive(label, active);
+ mStats.noteDataConnectionActive(type, active);
}
}
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index af08d57..f4bad73 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -279,13 +279,12 @@
}
/**
- * Protect a socket from routing changes by binding it to the given
- * interface. The socket is NOT closed by this method.
+ * Protect a socket from VPN rules by binding it to the main routing table.
+ * The socket is NOT closed by this method.
*
* @param socket The socket to be bound.
- * @param interfaze The name of the interface.
*/
- public void protect(ParcelFileDescriptor socket, String interfaze) throws Exception {
+ public void protect(ParcelFileDescriptor socket) throws Exception {
PackageManager pm = mContext.getPackageManager();
int appUid = pm.getPackageUid(mPackage, mUserId);
@@ -299,8 +298,6 @@
} finally {
Binder.restoreCallingIdentity(token);
}
- // bind the socket to the interface
- jniProtect(socket.getFd(), interfaze);
}
@@ -679,7 +676,6 @@
private native int jniSetRoutes(String interfaze, String routes);
private native void jniReset(String interfaze);
private native int jniCheck(String interfaze);
- private native void jniProtect(int socket, String interfaze);
private static RouteInfo findIPv4DefaultRoute(LinkProperties prop) {
for (RouteInfo route : prop.getAllRoutes()) {
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index b791435..e37bb9c 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -271,10 +271,11 @@
@Override
public void binderDied() {
- if (connection == null) {
- // This is not a service; it won't be recreated. We can give up this connection.
- unregisterListenerImpl(this.listener, this.userid);
- }
+ // Remove the listener, but don't unbind from the service. The system will bring the
+ // service back up, and the onServiceConnected handler will readd the listener with the
+ // new binding. If this isn't a bound service, and is just a registered
+ // INotificationListener, just removing it from the list is all we need to do anyway.
+ removeListenerImpl(this.listener, this.userid);
}
/** convenience method for looking in mEnabledListenersForCurrentUser */
@@ -2045,20 +2046,35 @@
}
}
+ /**
+ * Removes a listener from the list and unbinds from its service.
+ */
void unregisterListenerImpl(final INotificationListener listener, final int userid) {
+ NotificationListenerInfo info = removeListenerImpl(listener, userid);
+ if (info != null && info.connection != null) {
+ getContext().unbindService(info.connection);
+ }
+ }
+
+ /**
+ * Removes a listener from the list but does not unbind from the listener's service.
+ *
+ * @return the removed listener.
+ */
+ NotificationListenerInfo removeListenerImpl(
+ final INotificationListener listener, final int userid) {
+ NotificationListenerInfo listenerInfo = null;
synchronized (mNotificationList) {
final int N = mListeners.size();
for (int i=N-1; i>=0; i--) {
final NotificationListenerInfo info = mListeners.get(i);
if (info.listener.asBinder() == listener.asBinder()
&& info.userid == userid) {
- mListeners.remove(i);
- if (info.connection != null) {
- getContext().unbindService(info.connection);
- }
+ listenerInfo = mListeners.remove(i);
}
}
}
+ return listenerInfo;
}
void showNextToastLocked() {
diff --git a/services/core/jni/com_android_server_connectivity_Vpn.cpp b/services/core/jni/com_android_server_connectivity_Vpn.cpp
index ab8c959..bf34a74 100644
--- a/services/core/jni/com_android_server_connectivity_Vpn.cpp
+++ b/services/core/jni/com_android_server_connectivity_Vpn.cpp
@@ -302,15 +302,6 @@
return ifr4.ifr_flags;
}
-static int bind_to_interface(int socket, const char *name)
-{
- if (setsockopt(socket, SOL_SOCKET, SO_BINDTODEVICE, name, strlen(name))) {
- ALOGE("Cannot bind socket to %s: %s", name, strerror(errno));
- return SYSTEM_ERROR;
- }
- return 0;
-}
-
//------------------------------------------------------------------------------
static void throwException(JNIEnv *env, int error, const char *message)
@@ -433,19 +424,6 @@
return flags;
}
-static void protect(JNIEnv *env, jobject thiz, jint socket, jstring jName)
-{
- const char *name = jName ? env->GetStringUTFChars(jName, NULL) : NULL;
- if (!name) {
- jniThrowNullPointerException(env, "name");
- return;
- }
- if (bind_to_interface(socket, name) < 0) {
- throwException(env, SYSTEM_ERROR, "Cannot protect socket");
- }
- env->ReleaseStringUTFChars(jName, name);
-}
-
//------------------------------------------------------------------------------
static JNINativeMethod gMethods[] = {
@@ -455,7 +433,6 @@
{"jniSetRoutes", "(Ljava/lang/String;Ljava/lang/String;)I", (void *)setRoutes},
{"jniReset", "(Ljava/lang/String;)V", (void *)reset},
{"jniCheck", "(Ljava/lang/String;)I", (void *)check},
- {"jniProtect", "(ILjava/lang/String;)V", (void *)protect},
};
int register_android_server_connectivity_Vpn(JNIEnv *env)
diff --git a/tests/HwAccelerationTest/res/layout/isolation.xml b/tests/HwAccelerationTest/res/layout/isolation.xml
index 802ac7f..32eb628 100644
--- a/tests/HwAccelerationTest/res/layout/isolation.xml
+++ b/tests/HwAccelerationTest/res/layout/isolation.xml
@@ -5,13 +5,15 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f55">
+ <!-- Left and right layouts are not isolated volumes, so the text views
+ will interleave since they share an isolated z volume-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
- android:layout_height="150dp"
+ android:layout_height="200dp"
android:layout_weight="1"
android:isolatedZVolume="false"
android:orientation="vertical">
@@ -20,21 +22,24 @@
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
- android:layout_height="150dp"
+ android:layout_height="200dp"
android:layout_weight="1"
+ android:translationY="50dp"
android:isolatedZVolume="false"
android:orientation="vertical">
<TextView style="@style/TopRightReorderTextView"/>
<TextView style="@style/BottomRightReorderTextView"/>
</LinearLayout>
</LinearLayout>
+
+ <!-- Left and right volumes are isolated by default, so no interleaving will be seen. -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="0dp"
- android:layout_height="150dp"
+ android:layout_height="200dp"
android:layout_weight="1"
android:orientation="vertical">
<TextView style="@style/TopLeftReorderTextView"/>
@@ -42,8 +47,9 @@
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
- android:layout_height="150dp"
+ android:layout_height="200dp"
android:layout_weight="1"
+ android:translationY="50dp"
android:orientation="vertical">
<TextView style="@style/TopRightReorderTextView"/>
<TextView style="@style/BottomRightReorderTextView"/>
diff --git a/tests/HwAccelerationTest/res/values/styles.xml b/tests/HwAccelerationTest/res/values/styles.xml
index 0ffd3d7..cde5d20 100644
--- a/tests/HwAccelerationTest/res/values/styles.xml
+++ b/tests/HwAccelerationTest/res/values/styles.xml
@@ -1,14 +1,14 @@
<resources>
<style name="ReorderTextView" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">match_parent</item>
- <item name="android:layout_height">75dp</item>
+ <item name="android:layout_height">100dp</item>
<item name="android:gravity">center</item>
</style>
<style name="LeftReorderTextView" parent="@style/ReorderTextView">
- <item name="android:translationX">50dp</item>
+ <item name="android:translationX">20dp</item>
</style>
<style name="RightReorderTextView" parent="@style/ReorderTextView">
- <item name="android:translationX">-50dp</item>
+ <item name="android:translationX">-20dp</item>
</style>
<style name="TopLeftReorderTextView" parent="@style/LeftReorderTextView">
diff --git a/tools/preload/Android.mk b/tools/preload/Android.mk
index f325870..14a4547 100644
--- a/tools/preload/Android.mk
+++ b/tools/preload/Android.mk
@@ -20,4 +20,4 @@
include $(BUILD_HOST_JAVA_LIBRARY)
-include $(call all-subdir-makefiles)
+include $(call all-makefiles-under,$(LOCAL_PATH))