summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2009-12-13 12:25:00 -0800
committerAndroid Git Automerger <android-git-automerger@android.com>2009-12-13 12:25:00 -0800
commitc9ca93fbf9ff49ca4b74c4ec72d3f7580b3b7659 (patch)
tree56ea64f904b08ff5669e7d2916daecd942c51036
parenta7d461e09adf716c2148b45a5d94f5b8cb37f9ba (diff)
parent474731d5efb30c1e9184f998610054747eb8e764 (diff)
downloadframeworks_base-c9ca93fbf9ff49ca4b74c4ec72d3f7580b3b7659.zip
frameworks_base-c9ca93fbf9ff49ca4b74c4ec72d3f7580b3b7659.tar.gz
frameworks_base-c9ca93fbf9ff49ca4b74c4ec72d3f7580b3b7659.tar.bz2
am 474731d5: Merge change I2ffe306f into eclair
Merge commit '474731d5efb30c1e9184f998610054747eb8e764' into eclair-mr2 * commit '474731d5efb30c1e9184f998610054747eb8e764': Fix issue #2304284: contacts/dialer/recentcalls constantly flashing
-rw-r--r--core/java/android/app/ActivityThread.java15
-rw-r--r--core/java/android/app/ApplicationThreadNative.java15
-rw-r--r--core/java/android/app/IApplicationThread.java2
-rw-r--r--services/java/com/android/server/am/ActivityManagerService.java2
4 files changed, 28 insertions, 6 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 1115f92..909620d 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -1383,13 +1383,14 @@ public final class ActivityThread {
public final void scheduleRelaunchActivity(IBinder token,
List<ResultInfo> pendingResults, List<Intent> pendingNewIntents,
- int configChanges, boolean notResumed) {
+ int configChanges, boolean notResumed, Configuration config) {
ActivityRecord r = new ActivityRecord();
r.token = token;
r.pendingResults = pendingResults;
r.pendingIntents = pendingNewIntents;
r.startsNotResumed = notResumed;
+ r.createdConfig = config;
synchronized (mRelaunchingActivities) {
mRelaunchingActivities.add(r);
@@ -2511,7 +2512,7 @@ public final class ActivityThread {
Activity a = performLaunchActivity(r, customIntent);
if (a != null) {
- r.createdConfig = new Configuration(a.getResources().getConfiguration());
+ r.createdConfig = new Configuration(mConfiguration);
handleResumeActivity(r.token, false, r.isForward);
if (!r.activity.mFinished && r.startsNotResumed) {
@@ -3563,6 +3564,16 @@ public final class ActivityThread {
}
}
+ if (tmp.createdConfig != null) {
+ // If the activity manager is passing us its current config,
+ // assume that is really what we want regardless of what we
+ // may have pending.
+ if (mConfiguration == null
+ || mConfiguration.diff(tmp.createdConfig) != 0) {
+ changedConfig = tmp.createdConfig;
+ }
+ }
+
if (DEBUG_CONFIGURATION) Log.v(TAG, "Relaunching activity "
+ tmp.token + ": changedConfig=" + changedConfig);
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index a772a8f..7cba13f 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -140,7 +140,11 @@ public abstract class ApplicationThreadNative extends Binder
List<Intent> pi = data.createTypedArrayList(Intent.CREATOR);
int configChanges = data.readInt();
boolean notResumed = data.readInt() != 0;
- scheduleRelaunchActivity(b, ri, pi, configChanges, notResumed);
+ Configuration config = null;
+ if (data.readInt() != 0) {
+ config = Configuration.CREATOR.createFromParcel(data);
+ }
+ scheduleRelaunchActivity(b, ri, pi, configChanges, notResumed, config);
return true;
}
@@ -491,7 +495,8 @@ class ApplicationThreadProxy implements IApplicationThread {
public final void scheduleRelaunchActivity(IBinder token,
List<ResultInfo> pendingResults, List<Intent> pendingNewIntents,
- int configChanges, boolean notResumed) throws RemoteException {
+ int configChanges, boolean notResumed, Configuration config)
+ throws RemoteException {
Parcel data = Parcel.obtain();
data.writeInterfaceToken(IApplicationThread.descriptor);
data.writeStrongBinder(token);
@@ -499,6 +504,12 @@ class ApplicationThreadProxy implements IApplicationThread {
data.writeTypedList(pendingNewIntents);
data.writeInt(configChanges);
data.writeInt(notResumed ? 1 : 0);
+ if (config != null) {
+ data.writeInt(1);
+ config.writeToParcel(data, 0);
+ } else {
+ data.writeInt(0);
+ }
mRemote.transact(SCHEDULE_RELAUNCH_ACTIVITY_TRANSACTION, data, null,
IBinder.FLAG_ONEWAY);
data.recycle();
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index 89a52fd..ed810d3 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -56,7 +56,7 @@ public interface IApplicationThread extends IInterface {
throws RemoteException;
void scheduleRelaunchActivity(IBinder token, List<ResultInfo> pendingResults,
List<Intent> pendingNewIntents, int configChanges,
- boolean notResumed) throws RemoteException;
+ boolean notResumed, Configuration config) throws RemoteException;
void scheduleNewIntent(List<Intent> intent, IBinder token) throws RemoteException;
void scheduleDestroyActivity(IBinder token, boolean finished,
int configChanges) throws RemoteException;
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index d9c7d6f..fc47f93 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -12891,7 +12891,7 @@ public final class ActivityManagerService extends ActivityManagerNative implemen
try {
if (DEBUG_SWITCH) Log.i(TAG, "Switch is restarting resumed " + r);
r.app.thread.scheduleRelaunchActivity(r, results, newIntents,
- changes, !andResume);
+ changes, !andResume, mConfiguration);
// Note: don't need to call pauseIfSleepingLocked() here, because
// the caller will only pass in 'andResume' if this activity is
// currently resumed, which implies we aren't sleeping.