summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/applications/ApplicationsState.java19
-rw-r--r--src/com/android/settings/applications/InstalledAppDetails.java7
-rw-r--r--src/com/android/settings/deviceinfo/MemoryMeasurement.java46
-rw-r--r--src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java14
-rw-r--r--src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java1
5 files changed, 51 insertions, 36 deletions
diff --git a/src/com/android/settings/applications/ApplicationsState.java b/src/com/android/settings/applications/ApplicationsState.java
index 6e9f2a2..6de8c7f 100644
--- a/src/com/android/settings/applications/ApplicationsState.java
+++ b/src/com/android/settings/applications/ApplicationsState.java
@@ -71,6 +71,7 @@ public class ApplicationsState {
long cacheSize;
long codeSize;
long dataSize;
+ long externalSize;
}
public static class AppEntry extends SizeInfo {
@@ -626,9 +627,16 @@ public class ApplicationsState {
// --------------------------------------------------------------
- private long getTotalSize(PackageStats ps) {
+ private long getTotalInternalSize(PackageStats ps) {
if (ps != null) {
- return ps.codeSize+ps.dataSize;
+ return ps.codeSize + ps.dataSize;
+ }
+ return SIZE_INVALID;
+ }
+
+ private long getTotalExternalSize(PackageStats ps) {
+ if (ps != null) {
+ return ps.externalDataSize + ps.externalMediaSize + ps.externalCacheSize;
}
return SIZE_INVALID;
}
@@ -660,15 +668,18 @@ public class ApplicationsState {
synchronized (entry) {
entry.sizeStale = false;
entry.sizeLoadStart = 0;
- long newSize = getTotalSize(stats);
+ long externalSize = getTotalExternalSize(stats);
+ long newSize = externalSize + getTotalInternalSize(stats);
if (entry.size != newSize ||
entry.cacheSize != stats.cacheSize ||
entry.codeSize != stats.codeSize ||
- entry.dataSize != stats.dataSize) {
+ entry.dataSize != stats.dataSize ||
+ entry.externalSize != externalSize) {
entry.size = newSize;
entry.cacheSize = stats.cacheSize;
entry.codeSize = stats.codeSize;
entry.dataSize = stats.dataSize;
+ entry.externalSize = externalSize;
entry.sizeStr = getSizeStr(entry.size);
if (DEBUG) Log.i(TAG, "Set size of " + entry.label + " " + entry
+ ": " + entry.sizeStr);
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index de897eb..06d97fc 100644
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -93,6 +93,7 @@ public class InstalledAppDetails extends Fragment
private TextView mTotalSize;
private TextView mAppSize;
private TextView mDataSize;
+ private TextView mExternalSize;
private ClearUserDataObserver mClearDataObserver;
// Views related to cache info
private TextView mCacheSize;
@@ -107,6 +108,7 @@ public class InstalledAppDetails extends Fragment
private boolean mHaveSizes = false;
private long mLastCodeSize = -1;
private long mLastDataSize = -1;
+ private long mLastExternalSize = -1;
private long mLastCacheSize = -1;
private long mLastTotalSize = -1;
@@ -317,6 +319,7 @@ public class InstalledAppDetails extends Fragment
mTotalSize = (TextView)view.findViewById(R.id.total_size_text);
mAppSize = (TextView)view.findViewById(R.id.application_size_text);
mDataSize = (TextView)view.findViewById(R.id.data_size_text);
+ mExternalSize = (TextView)view.findViewById(R.id.external_size_text);
// Get Control button panel
View btnPanel = view.findViewById(R.id.control_buttons_panel);
@@ -504,6 +507,10 @@ public class InstalledAppDetails extends Fragment
mLastDataSize = mAppEntry.dataSize;
mDataSize.setText(getSizeStr(mAppEntry.dataSize));
}
+ if (mLastExternalSize != mAppEntry.externalSize) {
+ mLastExternalSize = mAppEntry.externalSize;
+ mExternalSize.setText(getSizeStr(mAppEntry.externalSize));
+ }
if (mLastCacheSize != mAppEntry.cacheSize) {
mLastCacheSize = mAppEntry.cacheSize;
mCacheSize.setText(getSizeStr(mAppEntry.cacheSize));
diff --git a/src/com/android/settings/deviceinfo/MemoryMeasurement.java b/src/com/android/settings/deviceinfo/MemoryMeasurement.java
index ead9dd6..19bd784 100644
--- a/src/com/android/settings/deviceinfo/MemoryMeasurement.java
+++ b/src/com/android/settings/deviceinfo/MemoryMeasurement.java
@@ -180,8 +180,6 @@ public class MemoryMeasurement {
public static final int MSG_INVALIDATE = 6;
- private List<String> mPendingApps = new ArrayList<String>();
-
private Object mLock = new Object();
private IMediaContainerService mDefaultContainer;
@@ -190,7 +188,7 @@ public class MemoryMeasurement {
private volatile boolean mMeasured = false;
- private long mAppsSize = 0;
+ private StatsObserver mStatsObserver;
private final WeakReference<Context> mContext;
@@ -287,39 +285,49 @@ public class MemoryMeasurement {
sendEmptyMessage(MSG_DISCONNECT);
}
- public void queuePackageMeasurementLocked(String packageName) {
- mPendingApps.add(packageName);
- }
-
/**
* Request measurement of each package.
*
* @param pm PackageManager instance to query
*/
public void requestQueuedMeasurementsLocked(PackageManager pm) {
- final int N = mPendingApps.size();
+ final List<String> appsList = mStatsObserver.getAppsList();
+ final int N = appsList.size();
for (int i = 0; i < N; i++) {
- pm.getPackageSizeInfo(mPendingApps.get(i), mStatsObserver);
+ pm.getPackageSizeInfo(appsList.get(i), mStatsObserver);
}
}
- final IPackageStatsObserver.Stub mStatsObserver = new IPackageStatsObserver.Stub() {
+ private class StatsObserver extends IPackageStatsObserver.Stub {
+ private long mAppsSizeForThisStatsObserver = 0;
+ private final List<String> mAppsList = new ArrayList<String>();
public void onGetStatsCompleted(PackageStats stats, boolean succeeded) {
+ if (!mStatsObserver.equals(this)) {
+ // this callback's class object is no longer in use. ignore this callback.
+ return;
+ }
if (succeeded) {
- mAppsSize += stats.codeSize + stats.dataSize;
+ mAppsSizeForThisStatsObserver += stats.codeSize + stats.dataSize;
}
- synchronized (mPendingApps) {
- mPendingApps.remove(stats.packageName);
+ synchronized (mAppsList) {
+ mAppsList.remove(stats.packageName);
- if (mPendingApps.size() == 0) {
- mInternalAppsSize = mAppsSize;
+ if (mAppsList.size() == 0) {
+ mInternalAppsSize = mAppsSizeForThisStatsObserver;
onInternalMeasurementComplete();
}
}
}
- };
+
+ public void queuePackageMeasurementLocked(String packageName) {
+ mAppsList.add(packageName);
+ }
+ public List<String> getAppsList() {
+ return mAppsList;
+ }
+ }
private void onInternalMeasurementComplete() {
sendEmptyMessage(MSG_COMPLETED);
@@ -368,10 +376,12 @@ public class MemoryMeasurement {
.getInstalledApplications(PackageManager.GET_UNINSTALLED_PACKAGES
| PackageManager.GET_DISABLED_COMPONENTS);
if (apps != null) {
- synchronized (mPendingApps) {
+ // initiate measurement of all package sizes. need new StatsObserver object.
+ mStatsObserver = new StatsObserver();
+ synchronized (mStatsObserver.mAppsList) {
for (int i = 0; i < apps.size(); i++) {
final ApplicationInfo info = apps.get(i);
- queuePackageMeasurementLocked(info.packageName);
+ mStatsObserver.queuePackageMeasurementLocked(info.packageName);
}
requestQueuedMeasurementsLocked(pm);
diff --git a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
index 117bec5..a4808b0 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndLanguageSettings.java
@@ -21,29 +21,15 @@ import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.Utils;
import com.android.settings.VoiceInputOutputSettings;
-import android.app.AlertDialog;
import android.content.Context;
-import android.content.DialogInterface;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.os.Bundle;
-import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
-import android.preference.PreferenceGroup;
import android.preference.PreferenceScreen;
import android.provider.Settings;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodManager;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
public class InputMethodAndLanguageSettings extends SettingsPreferenceFragment
implements Preference.OnPreferenceChangeListener{
diff --git a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java
index 6981927..03c5ea1 100644
--- a/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java
+++ b/src/com/android/settings/inputmethod/InputMethodAndSubtypeUtil.java
@@ -204,6 +204,7 @@ public class InputMethodAndSubtypeUtil {
if (DEBUG) {
Log.d(TAG, "Current IME was uninstalled or disabled.");
}
+ currentInputMethodId = null;
}
}
// If it's a disabled system ime, add it to the disabled list so that it