am d265bcc4: Merge "Inform libcore of time format pref. changes."
* commit 'd265bcc4b555ab75009f8ceb32cc90007a621b41': Inform libcore of time format pref. changes.
This commit is contained in:
@@ -68,6 +68,7 @@ import android.os.SystemClock;
|
|||||||
import android.os.SystemProperties;
|
import android.os.SystemProperties;
|
||||||
import android.os.Trace;
|
import android.os.Trace;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
|
import android.provider.Settings;
|
||||||
import android.util.AndroidRuntimeException;
|
import android.util.AndroidRuntimeException;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
@@ -106,6 +107,7 @@ import java.io.PrintWriter;
|
|||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.security.Security;
|
import java.security.Security;
|
||||||
|
import java.text.DateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
@@ -1095,6 +1097,11 @@ public final class ActivityThread {
|
|||||||
public void scheduleInstallProvider(ProviderInfo provider) {
|
public void scheduleInstallProvider(ProviderInfo provider) {
|
||||||
sendMessage(H.INSTALL_PROVIDER, provider);
|
sendMessage(H.INSTALL_PROVIDER, provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public final void updateTimePrefs(boolean is24Hour) {
|
||||||
|
DateFormat.set24HourTimePref(is24Hour);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class H extends Handler {
|
private class H extends Handler {
|
||||||
@@ -1144,6 +1151,7 @@ public final class ActivityThread {
|
|||||||
public static final int REQUEST_ASSIST_CONTEXT_EXTRAS = 143;
|
public static final int REQUEST_ASSIST_CONTEXT_EXTRAS = 143;
|
||||||
public static final int TRANSLUCENT_CONVERSION_COMPLETE = 144;
|
public static final int TRANSLUCENT_CONVERSION_COMPLETE = 144;
|
||||||
public static final int INSTALL_PROVIDER = 145;
|
public static final int INSTALL_PROVIDER = 145;
|
||||||
|
|
||||||
String codeToString(int code) {
|
String codeToString(int code) {
|
||||||
if (DEBUG_MESSAGES) {
|
if (DEBUG_MESSAGES) {
|
||||||
switch (code) {
|
switch (code) {
|
||||||
@@ -4189,6 +4197,11 @@ public final class ActivityThread {
|
|||||||
Log.e(TAG, "Unable to setupGraphicsSupport due to missing cache directory");
|
Log.e(TAG, "Unable to setupGraphicsSupport due to missing cache directory");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
final boolean is24Hr = "24".equals(mCoreSettings.getString(Settings.System.TIME_12_24));
|
||||||
|
DateFormat.set24HourTimePref(is24Hr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For system applications on userdebug/eng builds, log stack
|
* For system applications on userdebug/eng builds, log stack
|
||||||
* traces of disk and network access to dropbox for analysis.
|
* traces of disk and network access to dropbox for analysis.
|
||||||
|
|||||||
@@ -627,6 +627,15 @@ public abstract class ApplicationThreadNative extends Binder
|
|||||||
reply.writeNoException();
|
reply.writeNoException();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case UPDATE_TIME_PREFS_TRANSACTION:
|
||||||
|
{
|
||||||
|
data.enforceInterface(IApplicationThread.descriptor);
|
||||||
|
byte is24Hour = data.readByte();
|
||||||
|
updateTimePrefs(is24Hour == (byte) 1);
|
||||||
|
reply.writeNoException();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.onTransact(code, data, reply, flags);
|
return super.onTransact(code, data, reply, flags);
|
||||||
@@ -1266,4 +1275,13 @@ class ApplicationThreadProxy implements IApplicationThread {
|
|||||||
mRemote.transact(SCHEDULE_INSTALL_PROVIDER_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
|
mRemote.transact(SCHEDULE_INSTALL_PROVIDER_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
|
||||||
data.recycle();
|
data.recycle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateTimePrefs(boolean is24Hour) throws RemoteException {
|
||||||
|
Parcel data = Parcel.obtain();
|
||||||
|
data.writeInterfaceToken(IApplicationThread.descriptor);
|
||||||
|
data.writeByte(is24Hour ? (byte) 1 : (byte) 0);
|
||||||
|
mRemote.transact(UPDATE_TIME_PREFS_TRANSACTION, data, null, IBinder.FLAG_ONEWAY);
|
||||||
|
data.recycle();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -138,6 +138,7 @@ public interface IApplicationThread extends IInterface {
|
|||||||
throws RemoteException;
|
throws RemoteException;
|
||||||
void setProcessState(int state) throws RemoteException;
|
void setProcessState(int state) throws RemoteException;
|
||||||
void scheduleInstallProvider(ProviderInfo provider) throws RemoteException;
|
void scheduleInstallProvider(ProviderInfo provider) throws RemoteException;
|
||||||
|
void updateTimePrefs(boolean is24Hour) throws RemoteException;
|
||||||
|
|
||||||
String descriptor = "android.app.IApplicationThread";
|
String descriptor = "android.app.IApplicationThread";
|
||||||
|
|
||||||
@@ -191,4 +192,5 @@ public interface IApplicationThread extends IInterface {
|
|||||||
int SCHEDULE_TRANSLUCENT_CONVERSION_COMPLETE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+48;
|
int SCHEDULE_TRANSLUCENT_CONVERSION_COMPLETE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+48;
|
||||||
int SET_PROCESS_STATE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+49;
|
int SET_PROCESS_STATE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+49;
|
||||||
int SCHEDULE_INSTALL_PROVIDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+50;
|
int SCHEDULE_INSTALL_PROVIDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+50;
|
||||||
|
int UPDATE_TIME_PREFS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+51;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3331,6 +3331,15 @@ public class Intent implements Parcelable, Cloneable {
|
|||||||
public static final String EXTRA_SHUTDOWN_USERSPACE_ONLY
|
public static final String EXTRA_SHUTDOWN_USERSPACE_ONLY
|
||||||
= "android.intent.extra.SHUTDOWN_USERSPACE_ONLY";
|
= "android.intent.extra.SHUTDOWN_USERSPACE_ONLY";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Optional boolean extra for {@link #ACTION_TIME_CHANGED} that indicates the
|
||||||
|
* user has set their time format preferences to the 24 hour format.
|
||||||
|
*
|
||||||
|
* @hide for internal use only.
|
||||||
|
*/
|
||||||
|
public static final String EXTRA_TIME_PREF_24_HOUR_FORMAT =
|
||||||
|
"android.intent.extra.TIME_PREF_24_HOUR_FORMAT";
|
||||||
|
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
// ---------------------------------------------------------------------
|
// ---------------------------------------------------------------------
|
||||||
// Intent flags (see mFlags variable).
|
// Intent flags (see mFlags variable).
|
||||||
|
|||||||
@@ -1058,6 +1058,7 @@ public final class ActivityManagerService extends ActivityManagerNative
|
|||||||
static final int IMMERSIVE_MODE_LOCK_MSG = 37;
|
static final int IMMERSIVE_MODE_LOCK_MSG = 37;
|
||||||
static final int PERSIST_URI_GRANTS_MSG = 38;
|
static final int PERSIST_URI_GRANTS_MSG = 38;
|
||||||
static final int REQUEST_ALL_PSS_MSG = 39;
|
static final int REQUEST_ALL_PSS_MSG = 39;
|
||||||
|
static final int UPDATE_TIME = 40;
|
||||||
|
|
||||||
static final int FIRST_ACTIVITY_STACK_MSG = 100;
|
static final int FIRST_ACTIVITY_STACK_MSG = 100;
|
||||||
static final int FIRST_BROADCAST_QUEUE_MSG = 200;
|
static final int FIRST_BROADCAST_QUEUE_MSG = 200;
|
||||||
@@ -1668,6 +1669,22 @@ public final class ActivityManagerService extends ActivityManagerNative
|
|||||||
requestPssAllProcsLocked(SystemClock.uptimeMillis(), true, false);
|
requestPssAllProcsLocked(SystemClock.uptimeMillis(), true, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case UPDATE_TIME: {
|
||||||
|
synchronized (ActivityManagerService.this) {
|
||||||
|
for (int i = mLruProcesses.size() - 1 ; i >= 0 ; i--) {
|
||||||
|
ProcessRecord r = mLruProcesses.get(i);
|
||||||
|
if (r.thread != null) {
|
||||||
|
try {
|
||||||
|
r.thread.updateTimePrefs(msg.arg1 == 0 ? false : true);
|
||||||
|
} catch (RemoteException ex) {
|
||||||
|
Slog.w(TAG, "Failed to update preferences for: " + r.info.processName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -13430,11 +13447,20 @@ public final class ActivityManagerService extends ActivityManagerNative
|
|||||||
* of all currently running processes. This message will get queued up before the broadcast
|
* of all currently running processes. This message will get queued up before the broadcast
|
||||||
* happens.
|
* happens.
|
||||||
*/
|
*/
|
||||||
if (intent.ACTION_TIMEZONE_CHANGED.equals(intent.getAction())) {
|
if (Intent.ACTION_TIMEZONE_CHANGED.equals(intent.getAction())) {
|
||||||
mHandler.sendEmptyMessage(UPDATE_TIME_ZONE);
|
mHandler.sendEmptyMessage(UPDATE_TIME_ZONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (intent.ACTION_CLEAR_DNS_CACHE.equals(intent.getAction())) {
|
/*
|
||||||
|
* If the user set the time, let all running processes know.
|
||||||
|
*/
|
||||||
|
if (Intent.ACTION_TIME_CHANGED.equals(intent.getAction())) {
|
||||||
|
final int is24Hour = intent.getBooleanExtra(
|
||||||
|
Intent.EXTRA_TIME_PREF_24_HOUR_FORMAT, false) ? 1 : 0;
|
||||||
|
mHandler.sendMessage(mHandler.obtainMessage(UPDATE_TIME, is24Hour, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Intent.ACTION_CLEAR_DNS_CACHE.equals(intent.getAction())) {
|
||||||
mHandler.sendEmptyMessage(CLEAR_DNS_CACHE_MSG);
|
mHandler.sendEmptyMessage(CLEAR_DNS_CACHE_MSG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,11 +37,16 @@ final class CoreSettingsObserver extends ContentObserver {
|
|||||||
private static final String LOG_TAG = CoreSettingsObserver.class.getSimpleName();
|
private static final String LOG_TAG = CoreSettingsObserver.class.getSimpleName();
|
||||||
|
|
||||||
// mapping form property name to its type
|
// mapping form property name to its type
|
||||||
private static final Map<String, Class<?>> sCoreSettingToTypeMap = new HashMap<
|
private static final Map<String, Class<?>> sSecureSettingToTypeMap = new HashMap<
|
||||||
|
String, Class<?>>();
|
||||||
|
private static final Map<String, Class<?>> sSystemSettingToTypeMap = new HashMap<
|
||||||
String, Class<?>>();
|
String, Class<?>>();
|
||||||
static {
|
static {
|
||||||
sCoreSettingToTypeMap.put(Settings.Secure.LONG_PRESS_TIMEOUT, int.class);
|
sSecureSettingToTypeMap.put(Settings.Secure.LONG_PRESS_TIMEOUT, int.class);
|
||||||
// add other core settings here...
|
// add other secure settings here...
|
||||||
|
|
||||||
|
sSystemSettingToTypeMap.put(Settings.System.TIME_12_24, String.class);
|
||||||
|
// add other system settings here...
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Bundle mCoreSettings = new Bundle();
|
private final Bundle mCoreSettings = new Bundle();
|
||||||
@@ -67,39 +72,62 @@ final class CoreSettingsObserver extends ContentObserver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void sendCoreSettings() {
|
private void sendCoreSettings() {
|
||||||
populateCoreSettings(mCoreSettings);
|
populateSettings(mCoreSettings, sSecureSettingToTypeMap);
|
||||||
|
populateSettings(mCoreSettings, sSystemSettingToTypeMap);
|
||||||
mActivityManagerService.onCoreSettingsChange(mCoreSettings);
|
mActivityManagerService.onCoreSettingsChange(mCoreSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void beginObserveCoreSettings() {
|
private void beginObserveCoreSettings() {
|
||||||
for (String setting : sCoreSettingToTypeMap.keySet()) {
|
for (String setting : sSecureSettingToTypeMap.keySet()) {
|
||||||
Uri uri = Settings.Secure.getUriFor(setting);
|
Uri uri = Settings.Secure.getUriFor(setting);
|
||||||
mActivityManagerService.mContext.getContentResolver().registerContentObserver(
|
mActivityManagerService.mContext.getContentResolver().registerContentObserver(
|
||||||
uri, false, this);
|
uri, false, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (String setting : sSystemSettingToTypeMap.keySet()) {
|
||||||
|
Uri uri = Settings.System.getUriFor(setting);
|
||||||
|
mActivityManagerService.mContext.getContentResolver().registerContentObserver(
|
||||||
|
uri, false, this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void populateCoreSettings(Bundle snapshot) {
|
private void populateSettings(Bundle snapshot, Map<String, Class<?>> map) {
|
||||||
Context context = mActivityManagerService.mContext;
|
Context context = mActivityManagerService.mContext;
|
||||||
for (Map.Entry<String, Class<?>> entry : sCoreSettingToTypeMap.entrySet()) {
|
for (Map.Entry<String, Class<?>> entry : map.entrySet()) {
|
||||||
String setting = entry.getKey();
|
String setting = entry.getKey();
|
||||||
Class<?> type = entry.getValue();
|
Class<?> type = entry.getValue();
|
||||||
try {
|
try {
|
||||||
if (type == String.class) {
|
if (type == String.class) {
|
||||||
String value = Settings.Secure.getString(context.getContentResolver(),
|
final String value;
|
||||||
setting);
|
if (map == sSecureSettingToTypeMap) {
|
||||||
|
value = Settings.Secure.getString(context.getContentResolver(), setting);
|
||||||
|
} else {
|
||||||
|
value = Settings.System.getString(context.getContentResolver(), setting);
|
||||||
|
}
|
||||||
snapshot.putString(setting, value);
|
snapshot.putString(setting, value);
|
||||||
} else if (type == int.class) {
|
} else if (type == int.class) {
|
||||||
int value = Settings.Secure.getInt(context.getContentResolver(),
|
final int value;
|
||||||
setting);
|
if (map == sSecureSettingToTypeMap) {
|
||||||
|
value = Settings.Secure.getInt(context.getContentResolver(), setting);
|
||||||
|
} else {
|
||||||
|
value = Settings.System.getInt(context.getContentResolver(), setting);
|
||||||
|
}
|
||||||
snapshot.putInt(setting, value);
|
snapshot.putInt(setting, value);
|
||||||
} else if (type == float.class) {
|
} else if (type == float.class) {
|
||||||
float value = Settings.Secure.getFloat(context.getContentResolver(),
|
final float value;
|
||||||
setting);
|
if (map == sSecureSettingToTypeMap) {
|
||||||
|
value = Settings.Secure.getFloat(context.getContentResolver(), setting);
|
||||||
|
} else {
|
||||||
|
value = Settings.System.getFloat(context.getContentResolver(), setting);
|
||||||
|
}
|
||||||
snapshot.putFloat(setting, value);
|
snapshot.putFloat(setting, value);
|
||||||
} else if (type == long.class) {
|
} else if (type == long.class) {
|
||||||
long value = Settings.Secure.getLong(context.getContentResolver(),
|
final long value;
|
||||||
setting);
|
if (map == sSecureSettingToTypeMap) {
|
||||||
|
value = Settings.Secure.getLong(context.getContentResolver(), setting);
|
||||||
|
} else {
|
||||||
|
value = Settings.System.getLong(context.getContentResolver(), setting);
|
||||||
|
}
|
||||||
snapshot.putLong(setting, value);
|
snapshot.putLong(setting, value);
|
||||||
}
|
}
|
||||||
} catch (SettingNotFoundException snfe) {
|
} catch (SettingNotFoundException snfe) {
|
||||||
|
|||||||
Reference in New Issue
Block a user