Merge "Update PackageSetting flags when updating" into jb-mr1-dev
diff --git a/api/current.txt b/api/current.txt
index 9d7bb14..f975bf8 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -3353,6 +3353,7 @@
method public final android.app.FragmentManager getFragmentManager();
method public final int getId();
method public android.app.LoaderManager getLoaderManager();
+ method public final android.app.Fragment getParentFragment();
method public final android.content.res.Resources getResources();
method public final boolean getRetainInstance();
method public final java.lang.String getString(int);
diff --git a/cmds/svc/src/com/android/commands/svc/PowerCommand.java b/cmds/svc/src/com/android/commands/svc/PowerCommand.java
index ec3ec3e..58105fa 100644
--- a/cmds/svc/src/com/android/commands/svc/PowerCommand.java
+++ b/cmds/svc/src/com/android/commands/svc/PowerCommand.java
@@ -16,14 +16,12 @@
package com.android.commands.svc;
-import android.os.Binder;
-import android.os.IBinder;
-import android.os.IPowerManager;
-import android.os.PowerManager;
-import android.os.ServiceManager;
-import android.os.RemoteException;
-import android.os.BatteryManager;
import android.content.Context;
+import android.os.BatteryManager;
+import android.os.IPowerManager;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SystemClock;
public class PowerCommand extends Svc.Command {
public PowerCommand() {
@@ -65,10 +63,12 @@
IPowerManager pm
= IPowerManager.Stub.asInterface(ServiceManager.getService(Context.POWER_SERVICE));
try {
- IBinder lock = new Binder();
- pm.acquireWakeLock(lock, PowerManager.FULL_WAKE_LOCK, "svc power", null);
+ if (val != 0) {
+ // if the request is not to set it to false, wake up the screen so that
+ // it can stay on as requested
+ pm.wakeUp(SystemClock.uptimeMillis());
+ }
pm.setStayOnSetting(val);
- pm.releaseWakeLock(lock, 0);
}
catch (RemoteException e) {
System.err.println("Faild to set setting: " + e);
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index 3ff9df5..c5a382d 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -615,7 +615,7 @@
+ " did not call through to super.onViewStateRestored()");
}
}
-
+
final void setIndex(int index, Fragment parent) {
mIndex = index;
if (parent != null) {
@@ -623,8 +623,8 @@
} else {
mWho = "android:fragment:" + mIndex;
}
- }
-
+ }
+
final boolean isInBackStack() {
return mBackStackNesting > 0;
}
@@ -832,6 +832,14 @@
}
/**
+ * Returns the parent Fragment containing this Fragment. If this Fragment
+ * is attached directly to an Activity, returns null.
+ */
+ final public Fragment getParentFragment() {
+ return mParentFragment;
+ }
+
+ /**
* Return true if the fragment is currently added to its activity.
*/
final public boolean isAdded() {
@@ -1180,20 +1188,7 @@
public void onCreate(Bundle savedInstanceState) {
mCalled = true;
}
-
- /**
- * Called immediately after {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}
- * has returned, but before any saved state has been restored in to the view.
- * This gives subclasses a chance to initialize themselves once
- * they know their view hierarchy has been completely created. The fragment's
- * view hierarchy is not however attached to its parent at this point.
- * @param view The View returned by {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}.
- * @param savedInstanceState If non-null, this fragment is being re-constructed
- * from a previous saved state as given here.
- */
- public void onViewCreated(View view, Bundle savedInstanceState) {
- }
-
+
/**
* Called to have the fragment instantiate its user interface view.
* This is optional, and non-graphical fragments can return null (which
@@ -1217,6 +1212,19 @@
Bundle savedInstanceState) {
return null;
}
+
+ /**
+ * Called immediately after {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}
+ * has returned, but before any saved state has been restored in to the view.
+ * This gives subclasses a chance to initialize themselves once
+ * they know their view hierarchy has been completely created. The fragment's
+ * view hierarchy is not however attached to its parent at this point.
+ * @param view The View returned by {@link #onCreateView(LayoutInflater, ViewGroup, Bundle)}.
+ * @param savedInstanceState If non-null, this fragment is being re-constructed
+ * from a previous saved state as given here.
+ */
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ }
/**
* Get the root view for the fragment's layout (the one returned by {@link #onCreateView}),
@@ -1237,7 +1245,7 @@
* as this callback tells the fragment when it is fully associated with
* the new activity instance. This is called after {@link #onCreateView}
* and before {@link #onViewStateRestored(Bundle)}.
- *
+ *
* @param savedInstanceState If the fragment is being re-created from
* a previous saved state, this is the state.
*/
@@ -1252,7 +1260,7 @@
* whether check box widgets are currently checked. This is called
* after {@link #onActivityCreated(Bundle)} and before
* {@link #onStart()}.
- *
+ *
* @param savedInstanceState If the fragment is being re-created from
* a previous saved state, this is the state.
*/
@@ -1590,10 +1598,6 @@
writer.print(prefix); writer.print("mActivity=");
writer.println(mActivity);
}
- if (mChildFragmentManager != null) {
- writer.print(prefix); writer.print("mChildFragmentManager=");
- writer.println(mChildFragmentManager);
- }
if (mParentFragment != null) {
writer.print(prefix); writer.print("mParentFragment=");
writer.println(mParentFragment);
@@ -1633,7 +1637,7 @@
mLoaderManager.dump(prefix + " ", fd, writer, args);
}
if (mChildFragmentManager != null) {
- writer.print(prefix); writer.println("Child Fragment Manager:");
+ writer.print(prefix); writer.println("Child " + mChildFragmentManager + ":");
mChildFragmentManager.dump(prefix + " ", fd, writer, args);
}
}
@@ -1662,6 +1666,9 @@
}
void performCreate(Bundle savedInstanceState) {
+ if (mChildFragmentManager != null) {
+ mChildFragmentManager.noteStateNotSaved();
+ }
mCalled = false;
onCreate(savedInstanceState);
if (!mCalled) {
@@ -1680,7 +1687,18 @@
}
}
+ View performCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ if (mChildFragmentManager != null) {
+ mChildFragmentManager.noteStateNotSaved();
+ }
+ return onCreateView(inflater, container, savedInstanceState);
+ }
+
void performActivityCreated(Bundle savedInstanceState) {
+ if (mChildFragmentManager != null) {
+ mChildFragmentManager.noteStateNotSaved();
+ }
mCalled = false;
onActivityCreated(savedInstanceState);
if (!mCalled) {
@@ -1713,6 +1731,7 @@
void performResume() {
if (mChildFragmentManager != null) {
+ mChildFragmentManager.noteStateNotSaved();
mChildFragmentManager.execPendingActions();
}
mCalled = false;
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index eaaf0d7..7f11437 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -834,7 +834,9 @@
throw new SuperNotCalledException("Fragment " + f
+ " did not call through to super.onAttach()");
}
- mActivity.onAttachFragment(f);
+ if (f.mParentFragment == null) {
+ mActivity.onAttachFragment(f);
+ }
if (!f.mRetaining) {
f.performCreate(f.mSavedFragmentState);
@@ -844,8 +846,8 @@
// For fragments that are part of the content view
// layout, we need to instantiate the view immediately
// and the inflater will take care of adding it.
- f.mView = f.onCreateView(f.getLayoutInflater(f.mSavedFragmentState),
- null, f.mSavedFragmentState);
+ f.mView = f.performCreateView(f.getLayoutInflater(
+ f.mSavedFragmentState), null, f.mSavedFragmentState);
if (f.mView != null) {
f.mView.setSaveFromParentEnabled(false);
if (f.mHidden) f.mView.setVisibility(View.GONE);
@@ -868,8 +870,8 @@
}
}
f.mContainer = container;
- f.mView = f.onCreateView(f.getLayoutInflater(f.mSavedFragmentState),
- container, f.mSavedFragmentState);
+ f.mView = f.performCreateView(f.getLayoutInflater(
+ f.mSavedFragmentState), container, f.mSavedFragmentState);
if (f.mView != null) {
f.mView.setSaveFromParentEnabled(false);
if (container != null) {
@@ -885,7 +887,7 @@
f.onViewCreated(f.mView, f.mSavedFragmentState);
}
}
-
+
f.performActivityCreated(f.mSavedFragmentState);
if (f.mView != null) {
f.restoreViewState(f.mSavedFragmentState);
@@ -1824,7 +1826,7 @@
public void dispatchDestroyView() {
moveToState(Fragment.CREATED, false);
}
-
+
public void dispatchDestroy() {
mDestroyed = true;
execPendingActions();
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 e9dd70a..b0e7a9e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
@@ -22,18 +22,15 @@
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.CursorLoader;
-import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.Loader;
import android.content.res.Resources;
import android.database.Cursor;
-import android.database.DataSetObserver;
import android.graphics.drawable.ClipDrawable;
import android.hardware.display.DisplayManager;
import android.hardware.display.WifiDisplay;
import android.hardware.display.WifiDisplayStatus;
-import android.hardware.input.KeyboardLayout;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.Settings;
@@ -44,12 +41,8 @@
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
-import android.widget.CheckedTextView;
import android.widget.ListView;
-import android.widget.RadioButton;
import android.widget.TextView;
-import android.widget.Toast;
-import android.widget.ListAdapter;
import java.util.ArrayList;
import java.util.Comparator;
diff --git a/services/java/com/android/server/display/DisplayManagerService.java b/services/java/com/android/server/display/DisplayManagerService.java
index e11d454..39f2418 100644
--- a/services/java/com/android/server/display/DisplayManagerService.java
+++ b/services/java/com/android/server/display/DisplayManagerService.java
@@ -352,7 +352,9 @@
final long token = Binder.clearCallingIdentity();
try {
synchronized (mSyncRoot) {
- mWifiDisplayAdapter.requestScanLocked();
+ if (mWifiDisplayAdapter != null) {
+ mWifiDisplayAdapter.requestScanLocked();
+ }
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -372,7 +374,9 @@
final long token = Binder.clearCallingIdentity();
try {
synchronized (mSyncRoot) {
- mWifiDisplayAdapter.requestConnectLocked(address);
+ if (mWifiDisplayAdapter != null) {
+ mWifiDisplayAdapter.requestConnectLocked(address);
+ }
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -389,7 +393,9 @@
final long token = Binder.clearCallingIdentity();
try {
synchronized (mSyncRoot) {
- mWifiDisplayAdapter.requestDisconnectLocked();
+ if (mWifiDisplayAdapter != null) {
+ mWifiDisplayAdapter.requestDisconnectLocked();
+ }
}
} finally {
Binder.restoreCallingIdentity(token);
@@ -406,7 +412,11 @@
final long token = Binder.clearCallingIdentity();
try {
synchronized (mSyncRoot) {
- return mWifiDisplayAdapter.getWifiDisplayStatusLocked();
+ if (mWifiDisplayAdapter != null) {
+ return mWifiDisplayAdapter.getWifiDisplayStatusLocked();
+ } else {
+ return new WifiDisplayStatus();
+ }
}
} finally {
Binder.restoreCallingIdentity(token);
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java b/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java
index 48cdbc2..157dc50 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java
@@ -35,10 +35,9 @@
*/
public class WifiP2pDeviceList implements Parcelable {
- private HashMap<String, WifiP2pDevice> mDevices;
+ private final HashMap<String, WifiP2pDevice> mDevices = new HashMap<String, WifiP2pDevice>();
public WifiP2pDeviceList() {
- mDevices = new HashMap<String, WifiP2pDevice>();
}
/** copy constructor */
@@ -52,7 +51,6 @@
/** @hide */
public WifiP2pDeviceList(ArrayList<WifiP2pDevice> devices) {
- mDevices = new HashMap<String, WifiP2pDevice>();
for (WifiP2pDevice device : devices) {
if (device.deviceAddress != null) {
mDevices.put(device.deviceAddress, device);
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java b/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
index 3459a5a..98f0972 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
@@ -16,6 +16,7 @@
package android.net.wifi.p2p;
import java.util.Collection;
+import java.util.Map;
import android.os.Parcel;
import android.os.Parcelable;
@@ -32,8 +33,9 @@
private static final int CREDENTIAL_MAX_NUM = 32;
- private LruCache<Integer, WifiP2pGroup> mGroups;
- private GroupDeleteListener mListener;
+ private final LruCache<Integer, WifiP2pGroup> mGroups;
+ private final GroupDeleteListener mListener;
+
private boolean isClearCalled = false;
public interface GroupDeleteListener {
@@ -41,10 +43,10 @@
}
WifiP2pGroupList() {
- this(null);
+ this(null, null);
}
- WifiP2pGroupList(GroupDeleteListener listener) {
+ WifiP2pGroupList(WifiP2pGroupList source, GroupDeleteListener listener) {
mListener = listener;
mGroups = new LruCache<Integer, WifiP2pGroup>(CREDENTIAL_MAX_NUM) {
@Override
@@ -55,6 +57,12 @@
}
}
};
+
+ if (source != null) {
+ for (Map.Entry<Integer, WifiP2pGroup> item : source.mGroups.snapshot().entrySet()) {
+ mGroups.put(item.getKey(), item.getValue());
+ }
+ }
}
/**
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
index a6770bd..3575d97 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
@@ -359,8 +359,8 @@
private WifiNative mWifiNative = new WifiNative(mInterface);
private WifiMonitor mWifiMonitor = new WifiMonitor(this, mWifiNative);
- private WifiP2pDeviceList mPeers = new WifiP2pDeviceList();
- private WifiP2pGroupList mGroups = new WifiP2pGroupList(
+ private final WifiP2pDeviceList mPeers = new WifiP2pDeviceList();
+ private final WifiP2pGroupList mGroups = new WifiP2pGroupList(null,
new GroupDeleteListener() {
@Override
public void onDeleteGroup(int netId) {
@@ -370,7 +370,7 @@
sendP2pPersistentGroupsChangedBroadcast();
}
});
- private WifiP2pInfo mWifiP2pInfo = new WifiP2pInfo();
+ private final WifiP2pInfo mWifiP2pInfo = new WifiP2pInfo();
private WifiP2pGroup mGroup;
// Saved WifiP2pConfig for a peer connection
@@ -501,17 +501,20 @@
WifiP2pManager.BUSY);
break;
case WifiP2pManager.REQUEST_PEERS:
- replyToMessage(message, WifiP2pManager.RESPONSE_PEERS, mPeers);
+ replyToMessage(message, WifiP2pManager.RESPONSE_PEERS,
+ new WifiP2pDeviceList(mPeers));
break;
case WifiP2pManager.REQUEST_CONNECTION_INFO:
- replyToMessage(message, WifiP2pManager.RESPONSE_CONNECTION_INFO, mWifiP2pInfo);
+ replyToMessage(message, WifiP2pManager.RESPONSE_CONNECTION_INFO,
+ new WifiP2pInfo(mWifiP2pInfo));
break;
case WifiP2pManager.REQUEST_GROUP_INFO:
- replyToMessage(message, WifiP2pManager.RESPONSE_GROUP_INFO, mGroup);
+ replyToMessage(message, WifiP2pManager.RESPONSE_GROUP_INFO,
+ mGroup != null ? new WifiP2pGroup(mGroup) : null);
break;
case WifiP2pManager.REQUEST_PERSISTENT_GROUP_INFO:
replyToMessage(message, WifiP2pManager.RESPONSE_PERSISTENT_GROUP_INFO,
- mGroups);
+ new WifiP2pGroupList(mGroups, null));
break;
case WifiP2pManager.SET_DIALOG_LISTENER:
String appPkgName = (String)message.getData().getString(