diff options
| -rw-r--r-- | api/10.xml | 15 | ||||
| -rw-r--r-- | api/9.xml | 15 | ||||
| -rw-r--r-- | api/current.xml | 71 | ||||
| -rw-r--r-- | core/java/android/app/ContextImpl.java | 19 | ||||
| -rw-r--r-- | core/java/android/content/pm/IPackageManager.aidl | 3 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageManager.java | 28 | ||||
| -rw-r--r-- | core/java/com/android/internal/widget/DigitalClock.java | 103 | ||||
| -rwxr-xr-x | core/tests/coretests/src/android/content/pm/PackageManagerTests.java | 159 | ||||
| -rw-r--r-- | native/android/looper.cpp | 6 | ||||
| -rw-r--r-- | policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java | 9 | ||||
| -rw-r--r-- | policy/src/com/android/internal/policy/impl/KeyguardViewManager.java | 2 | ||||
| -rw-r--r-- | policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java | 2 | ||||
| -rw-r--r-- | policy/src/com/android/internal/policy/impl/LockScreen.java | 15 | ||||
| -rw-r--r-- | policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java | 9 | ||||
| -rw-r--r-- | services/java/com/android/server/PackageManagerService.java | 108 | ||||
| -rw-r--r-- | test-runner/src/android/test/mock/MockPackageManager.java | 14 |
16 files changed, 92 insertions, 486 deletions
diff --git a/api/10.xml b/api/10.xml index 3b9ab1a0edfc..15fcffe71640 100644 --- a/api/10.xml +++ b/api/10.xml @@ -157967,21 +157967,6 @@ <parameter name="flags" type="int"> </parameter> </method> -<method name="setPackageObbPath" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="packageName" type="java.lang.String"> -</parameter> -<parameter name="path" type="java.lang.String"> -</parameter> -</method> </class> <class name="MockResources" extends="android.content.res.Resources" diff --git a/api/9.xml b/api/9.xml index 3b9ab1a0edfc..15fcffe71640 100644 --- a/api/9.xml +++ b/api/9.xml @@ -157967,21 +157967,6 @@ <parameter name="flags" type="int"> </parameter> </method> -<method name="setPackageObbPath" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="packageName" type="java.lang.String"> -</parameter> -<parameter name="path" type="java.lang.String"> -</parameter> -</method> </class> <class name="MockResources" extends="android.content.res.Resources" diff --git a/api/current.xml b/api/current.xml index 5e364f95e800..88d140dd37c5 100644 --- a/api/current.xml +++ b/api/current.xml @@ -45984,19 +45984,6 @@ <exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException"> </exception> </method> -<method name="getPackageObbPaths" - return="java.lang.String[]" - abstract="true" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="packageName" type="java.lang.String"> -</parameter> -</method> <method name="getPackagesForUid" return="java.lang.String[]" abstract="true" @@ -46468,21 +46455,6 @@ <parameter name="flags" type="int"> </parameter> </method> -<method name="setPackageObbPaths" - return="void" - abstract="true" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="packageName" type="java.lang.String"> -</parameter> -<parameter name="paths" type="java.lang.String[]"> -</parameter> -</method> <field name="COMPONENT_ENABLED_STATE_DEFAULT" type="int" transient="false" @@ -159633,19 +159605,6 @@ <exception name="PackageManager.NameNotFoundException" type="android.content.pm.PackageManager.NameNotFoundException"> </exception> </method> -<method name="getPackageObbPaths" - return="java.lang.String[]" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="packageName" type="java.lang.String"> -</parameter> -</method> <method name="getPackagesForUid" return="java.lang.String[]" abstract="false" @@ -160115,36 +160074,6 @@ <parameter name="flags" type="int"> </parameter> </method> -<method name="setPackageObbPath" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="packageName" type="java.lang.String"> -</parameter> -<parameter name="path" type="java.lang.String"> -</parameter> -</method> -<method name="setPackageObbPaths" - return="void" - abstract="false" - native="false" - synchronized="false" - static="false" - final="false" - deprecated="not deprecated" - visibility="public" -> -<parameter name="packageName" type="java.lang.String"> -</parameter> -<parameter name="paths" type="java.lang.String[]"> -</parameter> -</method> </class> <class name="MockResources" extends="android.content.res.Resources" diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index 18ab478b2360..50ec34f6a301 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -2699,25 +2699,6 @@ class ContextImpl extends Context { return PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; } - @Override - public void setPackageObbPaths(String packageName, String[] paths) { - try { - mPM.setPackageObbPaths(packageName, paths); - } catch (RemoteException e) { - // Should never happen! - } - } - - @Override - public String[] getPackageObbPaths(String packageName) { - try { - return mPM.getPackageObbPaths(packageName); - } catch (RemoteException e) { - // Should never happen! - } - return null; - } - private final ContextImpl mContext; private final IPackageManager mPM; diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index 44b0c9653743..bfc9185708d5 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -321,7 +321,4 @@ interface IPackageManager { boolean setInstallLocation(int loc); int getInstallLocation(); - - void setPackageObbPaths(in String packageName, in String[] paths); - String[] getPackageObbPaths(in String packageName); } diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index a1c29f774dc3..922f8cd0e81a 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -2271,32 +2271,4 @@ public abstract class PackageManager { */ public abstract void movePackage( String packageName, IPackageMoveObserver observer, int flags); - - /** - * Sets the Opaque Binary Blob (OBB) file path associated with a package - * name. The caller must have the - * {@link android.Manifest.permission#INSTALL_PACKAGES} permission. - * <p> - * NOTE: The existence or format of this file is not currently checked, but - * it may be in the future. - * - * @param packageName Name of the package with which to associate the .obb - * file. - * @param paths Arrays of paths on the filesystem to the .obb files - * associated with the package. - * @see #getPackageObbPaths(String) - */ - public abstract void setPackageObbPaths(String packageName, String[] paths); - - /** - * Gets the Opaque Binary Blob (OBB) file path associated with the package. - * The caller must be the owner of the package queried or have the - * {@link android.Manifest.permission#INSTALL_PACKAGES} permission. - * - * @param packageName Name of the package with which to associate the .obb - * file. - * @return array of paths to .obb files associated with the package - * @see #setPackageObbPaths(String, String[]) - */ - public abstract String[] getPackageObbPaths(String packageName); } diff --git a/core/java/com/android/internal/widget/DigitalClock.java b/core/java/com/android/internal/widget/DigitalClock.java index fa47ff638cd5..303a1bfe077f 100644 --- a/core/java/com/android/internal/widget/DigitalClock.java +++ b/core/java/com/android/internal/widget/DigitalClock.java @@ -22,7 +22,6 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.content.res.Resources; import android.database.ContentObserver; import android.graphics.Typeface; import android.os.Handler; @@ -33,6 +32,7 @@ import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; +import java.lang.ref.WeakReference; import java.text.DateFormatSymbols; import java.util.Calendar; @@ -49,26 +49,41 @@ public class DigitalClock extends LinearLayout { private TextView mTimeDisplay; private AmPm mAmPm; private ContentObserver mFormatChangeObserver; - private boolean mLive = true; - private boolean mAttached; + private int mAttached = 0; // for debugging - tells us whether attach/detach is unbalanced /* called by system on minute ticks */ private final Handler mHandler = new Handler(); - private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (mLive && intent.getAction().equals( - Intent.ACTION_TIMEZONE_CHANGED)) { - mCalendar = Calendar.getInstance(); - } - // Post a runnable to avoid blocking the broadcast. - mHandler.post(new Runnable() { - public void run() { - updateTime(); + private BroadcastReceiver mIntentReceiver; + + private static class TimeChangedReceiver extends BroadcastReceiver { + private WeakReference<DigitalClock> mClock; + private Context mContext; + + public TimeChangedReceiver(DigitalClock clock) { + mClock = new WeakReference<DigitalClock>(clock); + mContext = clock.getContext(); + } + + @Override + public void onReceive(Context context, Intent intent) { + // Post a runnable to avoid blocking the broadcast. + final boolean timezoneChanged = + intent.getAction().equals(Intent.ACTION_TIMEZONE_CHANGED); + final DigitalClock clock = mClock.get(); + if (clock != null) { + clock.mHandler.post(new Runnable() { + public void run() { + if (timezoneChanged) { + clock.mCalendar = Calendar.getInstance(); } + clock.updateTime(); + } }); + } else { + mContext.unregisterReceiver(this); } - }; + } + }; static class AmPm { private TextView mAmPm; @@ -94,14 +109,23 @@ public class DigitalClock extends LinearLayout { } } - private class FormatChangeObserver extends ContentObserver { - public FormatChangeObserver() { + private static class FormatChangeObserver extends ContentObserver { + private WeakReference<DigitalClock> mClock; + private Context mContext; + public FormatChangeObserver(DigitalClock clock) { super(new Handler()); + mClock = new WeakReference<DigitalClock>(clock); + mContext = clock.getContext(); } @Override public void onChange(boolean selfChange) { - setDateFormat(); - updateTime(); + DigitalClock digitalClock = mClock.get(); + if (digitalClock != null) { + digitalClock.setDateFormat(); + digitalClock.updateTime(); + } else { + mContext.getContentResolver().unregisterContentObserver(this); + } } } @@ -129,11 +153,11 @@ public class DigitalClock extends LinearLayout { protected void onAttachedToWindow() { super.onAttachedToWindow(); - if (mAttached) return; - mAttached = true; + mAttached++; - if (mLive) { - /* monitor time ticks, time changed, timezone */ + /* monitor time ticks, time changed, timezone */ + if (mIntentReceiver == null) { + mIntentReceiver = new TimeChangedReceiver(this); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_TIME_TICK); filter.addAction(Intent.ACTION_TIME_CHANGED); @@ -142,9 +166,11 @@ public class DigitalClock extends LinearLayout { } /* monitor 12/24-hour display preference */ - mFormatChangeObserver = new FormatChangeObserver(); - mContext.getContentResolver().registerContentObserver( - Settings.System.CONTENT_URI, true, mFormatChangeObserver); + if (mFormatChangeObserver == null) { + mFormatChangeObserver = new FormatChangeObserver(this); + mContext.getContentResolver().registerContentObserver( + Settings.System.CONTENT_URI, true, mFormatChangeObserver); + } updateTime(); } @@ -153,16 +179,19 @@ public class DigitalClock extends LinearLayout { protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - if (!mAttached) return; - mAttached = false; + mAttached--; - if (mLive) { + if (mIntentReceiver != null) { mContext.unregisterReceiver(mIntentReceiver); } - mContext.getContentResolver().unregisterContentObserver( - mFormatChangeObserver); - } + if (mFormatChangeObserver != null) { + mContext.getContentResolver().unregisterContentObserver( + mFormatChangeObserver); + } + mFormatChangeObserver = null; + mIntentReceiver = null; + } void updateTime(Calendar c) { mCalendar = c; @@ -170,9 +199,7 @@ public class DigitalClock extends LinearLayout { } private void updateTime() { - if (mLive) { - mCalendar.setTimeInMillis(System.currentTimeMillis()); - } + mCalendar.setTimeInMillis(System.currentTimeMillis()); CharSequence newTime = DateFormat.format(mFormat, mCalendar); mTimeDisplay.setText(newTime); @@ -180,12 +207,8 @@ public class DigitalClock extends LinearLayout { } private void setDateFormat() { - mFormat = android.text.format.DateFormat.is24HourFormat(getContext()) + mFormat = android.text.format.DateFormat.is24HourFormat(getContext()) ? M24 : M12; mAmPm.setShowAmPm(mFormat.equals(M12)); } - - void setLive(boolean live) { - mLive = live; - } } diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java index c8a4593b15bb..d5f385b290c4 100755 --- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java +++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java @@ -47,7 +47,6 @@ import android.util.Log; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.util.Arrays; public class PackageManagerTests extends AndroidTestCase { private static final boolean localLOGV = true; @@ -2839,164 +2838,6 @@ public class PackageManagerTests extends AndroidTestCase { installFromRawResource("install.apk", rapk2, PackageManager.INSTALL_REPLACE_EXISTING, true, fail, retCode, PackageInfo.INSTALL_LOCATION_UNSPECIFIED); } - - @LargeTest - public void testPackageObbPaths_Nonexistent() { - try { - final PackageManager pm = getPm(); - - // Invalid Java package name. - pm.getPackageObbPaths("=non-existent"); - - fail("Should not be able to get package OBB paths for non-existent package"); - } catch (IllegalArgumentException e) { - // pass - } - } - - @LargeTest - public void testPackageObbPaths_Initial() { - InstallParams ip = sampleInstallFromRawResource(PackageManager.INSTALL_INTERNAL, false); - - try { - final PackageManager pm = getPm(); - - assertEquals("Initial obb paths should be null", - null, pm.getPackageObbPaths(ip.pkg.packageName)); - } finally { - cleanUpInstall(ip); - } - } - - @LargeTest - public void testPackageObbPaths_Null() { - InstallParams ip = sampleInstallFromRawResource(PackageManager.INSTALL_INTERNAL, false); - - try { - final PackageManager pm = getPm(); - - pm.setPackageObbPaths(ip.pkg.packageName, null); - - assertEquals("Returned paths should be null", - null, pm.getPackageObbPaths(ip.pkg.packageName)); - } finally { - cleanUpInstall(ip); - } - } - - @LargeTest - public void testPackageObbPaths_Empty() { - InstallParams ip = sampleInstallFromRawResource(PackageManager.INSTALL_INTERNAL, false); - - try { - final PackageManager pm = getPm(); - - final String[] paths = new String[0]; - - pm.setPackageObbPaths(ip.pkg.packageName, paths); - - assertEquals("Empty list should be interpreted as null", - null, pm.getPackageObbPaths(ip.pkg.packageName)); - } finally { - cleanUpInstall(ip); - } - } - - @LargeTest - public void testPackageObbPaths_Single() { - InstallParams ip = sampleInstallFromRawResource(PackageManager.INSTALL_INTERNAL, false); - - try { - final PackageManager pm = getPm(); - - final String[] paths = new String[] { - "/example/test", - }; - - pm.setPackageObbPaths(ip.pkg.packageName, paths.clone()); - - assertTrue("Previously set paths should be the same as the returned paths.", - Arrays.equals(paths, pm.getPackageObbPaths(ip.pkg.packageName))); - } finally { - cleanUpInstall(ip); - } - } - - @LargeTest - public void testPackageObbPaths_Multiple() { - InstallParams ip = sampleInstallFromRawResource(PackageManager.INSTALL_INTERNAL, false); - - try { - final PackageManager pm = getPm(); - - final String[] paths = new String[] { - "/example/test1", - "/example/test2", - }; - - pm.setPackageObbPaths(ip.pkg.packageName, paths.clone()); - - assertTrue("Previously set paths should be the same as the returned paths.", - Arrays.equals(paths, pm.getPackageObbPaths(ip.pkg.packageName))); - } finally { - cleanUpInstall(ip); - } - } - - @LargeTest - public void testPackageObbPaths_Twice() { - InstallParams ip = sampleInstallFromRawResource(PackageManager.INSTALL_INTERNAL, false); - - try { - final PackageManager pm = getPm(); - - final String[] paths = new String[] { - "/example/test1", - "/example/test2", - }; - - pm.setPackageObbPaths(ip.pkg.packageName, paths.clone()); - - assertTrue("Previously set paths should be the same as the returned paths.", - Arrays.equals(paths, pm.getPackageObbPaths(ip.pkg.packageName))); - - paths[0] = "/example/test3"; - pm.setPackageObbPaths(ip.pkg.packageName, paths.clone()); - - assertTrue("Previously set paths should be the same as the returned paths.", - Arrays.equals(paths, pm.getPackageObbPaths(ip.pkg.packageName))); - } finally { - cleanUpInstall(ip); - } - } - - @LargeTest - public void testPackageObbPaths_ReplacePackage() { - InstallParams ip = sampleInstallFromRawResource(PackageManager.INSTALL_INTERNAL, false); - - try { - final PackageManager pm = getPm(); - - final String[] paths = new String[] { - "/example/test1", - "/example/test2", - }; - - pm.setPackageObbPaths(ip.pkg.packageName, paths.clone()); - - Log.i(TAG, "Creating replaceReceiver"); - final GenericReceiver receiver = new ReplaceReceiver(ip.pkg.packageName); - - final int flags = PackageManager.INSTALL_REPLACE_EXISTING; - invokeInstallPackage(ip.packageURI, flags, receiver); - assertInstall(ip.pkg, flags, ip.pkg.installLocation); - - assertTrue("Previously set paths should be the same as the returned paths.", - Arrays.equals(paths, pm.getPackageObbPaths(ip.pkg.packageName))); - } finally { - cleanUpInstall(ip); - } - } /*---------- Recommended install location tests ----*/ /* * TODO's diff --git a/native/android/looper.cpp b/native/android/looper.cpp index 9f5cda9a9e98..615493fe9a6c 100644 --- a/native/android/looper.cpp +++ b/native/android/looper.cpp @@ -19,9 +19,11 @@ #include <android/looper.h> #include <utils/Looper.h> +#include <binder/IPCThreadState.h> using android::Looper; using android::sp; +using android::IPCThreadState; ALooper* ALooper_forThread() { return Looper::getForThread().get(); @@ -46,6 +48,7 @@ int ALooper_pollOnce(int timeoutMillis, int* outFd, int* outEvents, void** outDa return ALOOPER_POLL_ERROR; } + IPCThreadState::self()->flushCommands(); return looper->pollOnce(timeoutMillis, outFd, outEvents, outData); } @@ -55,7 +58,8 @@ int ALooper_pollAll(int timeoutMillis, int* outFd, int* outEvents, void** outDat LOGE("ALooper_pollAll: No looper for this thread!"); return ALOOPER_POLL_ERROR; } - + + IPCThreadState::self()->flushCommands(); return looper->pollAll(timeoutMillis, outFd, outEvents, outData); } diff --git a/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java b/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java index 840c5e198e21..c4feefd2e32c 100644 --- a/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java +++ b/policy/src/com/android/internal/policy/impl/AccountUnlockScreen.java @@ -62,8 +62,8 @@ public class AccountUnlockScreen extends RelativeLayout implements KeyguardScree */ private static final int AWAKE_POKE_MILLIS = 30000; - private final KeyguardScreenCallback mCallback; - private final LockPatternUtils mLockPatternUtils; + private KeyguardScreenCallback mCallback; + private LockPatternUtils mLockPatternUtils; private KeyguardUpdateMonitor mUpdateMonitor; private TextView mTopHeader; @@ -159,7 +159,10 @@ public class AccountUnlockScreen extends RelativeLayout implements KeyguardScree if (mCheckingDialog != null) { mCheckingDialog.hide(); } - mUpdateMonitor.removeCallback(this); + mUpdateMonitor.removeCallback(this); // this must be first + mCallback = null; + mLockPatternUtils = null; + mUpdateMonitor = null; } /** {@inheritDoc} */ diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java index ba1d7f530294..708e89d25264 100644 --- a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java +++ b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java @@ -223,8 +223,8 @@ public class KeyguardViewManager implements KeyguardWindowController { mKeyguardHost.postDelayed(new Runnable() { public void run() { synchronized (KeyguardViewManager.this) { - mKeyguardHost.removeView(lastView); lastView.cleanUp(); + mKeyguardHost.removeView(lastView); } } }, 500); diff --git a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java index 27706eff298d..f3d07ab82b91 100644 --- a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java +++ b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java @@ -495,8 +495,10 @@ public class LockPatternKeyguardView extends KeyguardViewBase { public void cleanUp() { ((KeyguardScreen) mLockScreen).onPause(); ((KeyguardScreen) mLockScreen).cleanUp(); + this.removeView(mLockScreen); ((KeyguardScreen) mUnlockScreen).onPause(); ((KeyguardScreen) mUnlockScreen).cleanUp(); + this.removeView(mUnlockScreen); } private boolean isSecure() { diff --git a/policy/src/com/android/internal/policy/impl/LockScreen.java b/policy/src/com/android/internal/policy/impl/LockScreen.java index 635b7d308a35..5a20b9392e0c 100644 --- a/policy/src/com/android/internal/policy/impl/LockScreen.java +++ b/policy/src/com/android/internal/policy/impl/LockScreen.java @@ -55,9 +55,9 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM private Status mStatus = Status.Normal; - private final LockPatternUtils mLockPatternUtils; - private final KeyguardUpdateMonitor mUpdateMonitor; - private final KeyguardScreenCallback mCallback; + private LockPatternUtils mLockPatternUtils; + private KeyguardUpdateMonitor mUpdateMonitor; + private KeyguardScreenCallback mCallback; private TextView mCarrier; private SlidingTab mSelector; @@ -225,8 +225,8 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM setFocusableInTouchMode(true); setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS); - updateMonitor.registerInfoCallback(this); - updateMonitor.registerSimStateCallback(this); + mUpdateMonitor.registerInfoCallback(this); + mUpdateMonitor.registerSimStateCallback(this); mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE); mSilentMode = isSilentMode(); @@ -668,7 +668,10 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM /** {@inheritDoc} */ public void cleanUp() { - mUpdateMonitor.removeCallback(this); + mUpdateMonitor.removeCallback(this); // this must be first + mLockPatternUtils = null; + mUpdateMonitor = null; + mCallback = null; } /** {@inheritDoc} */ diff --git a/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java index 418e24392279..ffd0a47418fd 100644 --- a/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java +++ b/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java @@ -66,9 +66,9 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient private int mTotalFailedPatternAttempts = 0; private CountDownTimer mCountdownTimer = null; - private final LockPatternUtils mLockPatternUtils; - private final KeyguardUpdateMonitor mUpdateMonitor; - private final KeyguardScreenCallback mCallback; + private LockPatternUtils mLockPatternUtils; + private KeyguardUpdateMonitor mUpdateMonitor; + private KeyguardScreenCallback mCallback; /** * whether there is a fallback option available when the pattern is forgotten. @@ -478,6 +478,9 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient /** {@inheritDoc} */ public void cleanUp() { mUpdateMonitor.removeCallback(this); + mLockPatternUtils = null; + mUpdateMonitor = null; + mCallback = null; } @Override diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 39c754071654..9b8a6057743e 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -102,7 +102,6 @@ import java.io.FilenameFilter; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; -import java.lang.reflect.Array; import java.security.NoSuchAlgorithmException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -4396,8 +4395,6 @@ class PackageManagerService extends IPackageManager.Stub { } }; - private static final boolean DEBUG_OBB = false; - private static final void sendPackageBroadcast(String action, String pkg, Bundle extras, IIntentReceiver finishedReceiver) { IActivityManager am = ActivityManagerNative.getDefault(); @@ -4573,64 +4570,6 @@ class PackageManagerService extends IPackageManager.Stub { mHandler.sendMessage(msg); } - public void setPackageObbPaths(String packageName, String[] paths) { - if (DEBUG_OBB) - Log.v(TAG, "Setting .obb paths for " + packageName + " to: " + Arrays.toString(paths)); - final int uid = Binder.getCallingUid(); - final int permission = mContext.checkCallingPermission( - android.Manifest.permission.INSTALL_PACKAGES); - final boolean allowedByPermission = (permission == PackageManager.PERMISSION_GRANTED); - if (!allowedByPermission) { - throw new SecurityException("Permission denial: attempt to set .obb file from pid=" - + Binder.getCallingPid()); - } - synchronized (mPackages) { - final PackageSetting pkgSetting = mSettings.mPackages.get(packageName); - if (pkgSetting == null) { - throw new IllegalArgumentException("Unknown package: " + packageName); - } - - if (paths != null) { - if (paths.length == 0) { - // Don't bother storing an empty array. - paths = null; - } else { - // Don't allow the caller to manipulate our copy of the - // list. - paths = paths.clone(); - } - } - - // Only write settings file if the new and old settings are not the - // same. - if (!Arrays.equals(paths, pkgSetting.obbPathStrings)) { - pkgSetting.obbPathStrings = paths; - mSettings.writeLP(); - } - } - } - - public String[] getPackageObbPaths(String packageName) { - if (DEBUG_OBB) - Log.v(TAG, "Getting .obb paths for " + packageName); - final int uid = Binder.getCallingUid(); - final int permission = mContext.checkCallingPermission( - android.Manifest.permission.INSTALL_PACKAGES); - final boolean allowedByPermission = (permission == PackageManager.PERMISSION_GRANTED); - synchronized (mPackages) { - final PackageSetting pkgSetting = mSettings.mPackages.get(packageName); - if (pkgSetting == null) { - throw new IllegalArgumentException("Unknown package: " + packageName); - } - if (!allowedByPermission && (uid != pkgSetting.userId)) { - throw new SecurityException("Permission denial: attempt to set .obb file from pid=" - + Binder.getCallingPid() + ", uid=" + uid + ", package uid=" - + pkgSetting.userId); - } - return pkgSetting.obbPathStrings; - } - } - private void processPendingInstall(final InstallArgs args, final int currentStatus) { // Queue up an async operation since the package installation may take a little while. mHandler.post(new Runnable() { @@ -7200,7 +7139,6 @@ class PackageManagerService extends IPackageManager.Stub { pw.print(" codePath="); pw.println(ps.codePathString); pw.print(" resourcePath="); pw.println(ps.resourcePathString); pw.print(" nativeLibraryPath="); pw.println(ps.nativeLibraryPathString); - pw.print(" obbPaths="); pw.println(Arrays.toString(ps.obbPathStrings)); pw.print(" versionCode="); pw.println(ps.versionCode); if (ps.pkg != null) { pw.print(" versionName="); pw.println(ps.pkg.mVersionName); @@ -7778,7 +7716,6 @@ class PackageManagerService extends IPackageManager.Stub { File resourcePath; String resourcePathString; String nativeLibraryPathString; - String[] obbPathStrings; long timeStamp; long firstInstallTime; long lastUpdateTime; @@ -7824,11 +7761,6 @@ class PackageManagerService extends IPackageManager.Stub { resourcePath = base.resourcePath; resourcePathString = base.resourcePathString; nativeLibraryPathString = base.nativeLibraryPathString; - - if (base.obbPathStrings != null) { - obbPathStrings = base.obbPathStrings.clone(); - } - timeStamp = base.timeStamp; firstInstallTime = base.firstInstallTime; lastUpdateTime = base.lastUpdateTime; @@ -8887,16 +8819,6 @@ class PackageManagerService extends IPackageManager.Stub { if (pkg.installerPackageName != null) { serializer.attribute(null, "installer", pkg.installerPackageName); } - if (pkg.obbPathStrings != null && pkg.obbPathStrings.length > 0) { - int N = pkg.obbPathStrings.length; - serializer.startTag(null, "obbs"); - for (int i = 0; i < N; i++) { - serializer.startTag(null, "obb"); - serializer.attribute(null, "path", pkg.obbPathStrings[i]); - serializer.endTag(null, "obb"); - } - serializer.endTag(null, "obbs"); - } pkg.signatures.writeXml(serializer, "sigs", mPastSignatures); if ((pkg.pkgFlags&ApplicationInfo.FLAG_SYSTEM) == 0) { serializer.startTag(null, "perms"); @@ -9489,8 +9411,6 @@ class PackageManagerService extends IPackageManager.Stub { readGrantedPermissionsLP(parser, packageSetting.grantedPermissions); packageSetting.permissionsFixed = true; - } else if (tagName.equals("obbs")) { - readObbPathsLP(packageSetting, parser); } else { reportSettingsProblem(Log.WARN, "Unknown element under <package>: " @@ -9695,34 +9615,6 @@ class PackageManagerService extends IPackageManager.Stub { } } - private void readObbPathsLP(PackageSettingBase packageSetting, XmlPullParser parser) - throws XmlPullParserException, IOException { - final List<String> obbPaths = new ArrayList<String>(); - final int outerDepth = parser.getDepth(); - int type; - while ((type = parser.next()) != XmlPullParser.END_DOCUMENT - && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) { - if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) { - continue; - } - - final String tagName = parser.getName(); - if (tagName.equals("obb")) { - final String path = parser.getAttributeValue(null, "path"); - obbPaths.add(path); - } else { - reportSettingsProblem(Log.WARN, "Unknown element under <obbs>: " - + parser.getName()); - } - XmlUtils.skipCurrentTag(parser); - } - if (obbPaths.size() == 0) { - return; - } else { - packageSetting.obbPathStrings = obbPaths.toArray(new String[obbPaths.size()]); - } - } - // Returns -1 if we could not find an available UserId to assign private int newUserIdLP(Object obj) { // Let's be stupidly inefficient for now... diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java index 4a18b3e3afa0..c5d45f5c2914 100644 --- a/test-runner/src/android/test/mock/MockPackageManager.java +++ b/test-runner/src/android/test/mock/MockPackageManager.java @@ -489,18 +489,4 @@ public class MockPackageManager extends PackageManager { public boolean isSafeMode() { throw new UnsupportedOperationException(); } - - public void setPackageObbPath(String packageName, String path) { - throw new UnsupportedOperationException(); - } - - @Override - public void setPackageObbPaths(String packageName, String[] paths) { - throw new UnsupportedOperationException(); - } - - @Override - public String[] getPackageObbPaths(String packageName) { - throw new UnsupportedOperationException(); - } } |