diff options
author | Suchi Amalapurapu <asuchitra@google.com> | 2010-04-07 19:34:48 -0700 |
---|---|---|
committer | Suchi Amalapurapu <asuchitra@google.com> | 2010-04-07 20:50:26 -0700 |
commit | 4056459e9e6bf766168aff4cfe41b0a28a843323 (patch) | |
tree | 3807a4dde54c12829fbf83d0b85fbac0423971b2 | |
parent | 0b2669647f1328d2df79fd2d259bc9d15433ba0a (diff) | |
download | packages_apps_settings-4056459e9e6bf766168aff4cfe41b0a28a843323.zip packages_apps_settings-4056459e9e6bf766168aff4cfe41b0a28a843323.tar.gz packages_apps_settings-4056459e9e6bf766168aff4cfe41b0a28a843323.tar.bz2 |
Fix 2579461
Disable move when manifest option for install location is unspecified
and install location is auto/internal
Change-Id: Ic7a493ecbbed6017326e2ec728e25c6ea9de8223
-rw-r--r-- | src/com/android/settings/ApplicationSettings.java | 12 | ||||
-rw-r--r-- | src/com/android/settings/InstalledAppDetails.java | 40 |
2 files changed, 38 insertions, 14 deletions
diff --git a/src/com/android/settings/ApplicationSettings.java b/src/com/android/settings/ApplicationSettings.java index 9b7a919..c743f1c 100644 --- a/src/com/android/settings/ApplicationSettings.java +++ b/src/com/android/settings/ApplicationSettings.java @@ -62,7 +62,7 @@ public class ApplicationSettings extends PreferenceActivity implements mInstallLocation = (ListPreference) findPreference(KEY_APP_INSTALL_LOCATION); // Is app default install location set? boolean userSetInstLocation = (Settings.System.getInt(getContentResolver(), - Settings.System.SET_INSTALL_LOCATION, 0) != 0); + Settings.Secure.SET_INSTALL_LOCATION, 0) != 0); if (!userSetInstLocation) { getPreferenceScreen().removePreference(mInstallLocation); } else { @@ -86,17 +86,17 @@ public class ApplicationSettings extends PreferenceActivity implements protected void handleUpdateAppInstallLocation(final String value) { if(APP_INSTALL_DEVICE_ID.equals(value)) { Settings.System.putInt(getContentResolver(), - Settings.System.DEFAULT_INSTALL_LOCATION, APP_INSTALL_DEVICE); + Settings.Secure.DEFAULT_INSTALL_LOCATION, APP_INSTALL_DEVICE); } else if (APP_INSTALL_SDCARD_ID.equals(value)) { Settings.System.putInt(getContentResolver(), - Settings.System.DEFAULT_INSTALL_LOCATION, APP_INSTALL_SDCARD); + Settings.Secure.DEFAULT_INSTALL_LOCATION, APP_INSTALL_SDCARD); } else if (APP_INSTALL_AUTO_ID.equals(value)) { Settings.System.putInt(getContentResolver(), - Settings.System.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO); + Settings.Secure.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO); } else { // Should not happen, default to prompt... Settings.System.putInt(getContentResolver(), - Settings.System.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO); + Settings.Secure.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO); } mInstallLocation.setValue(value); } @@ -143,7 +143,7 @@ public class ApplicationSettings extends PreferenceActivity implements private String getAppInstallLocation() { int selectedLocation = Settings.System.getInt(getContentResolver(), - Settings.System.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO); + Settings.Secure.DEFAULT_INSTALL_LOCATION, APP_INSTALL_AUTO); if (selectedLocation == APP_INSTALL_DEVICE) { return APP_INSTALL_DEVICE_ID; } else if (selectedLocation == APP_INSTALL_SDCARD) { diff --git a/src/com/android/settings/InstalledAppDetails.java b/src/com/android/settings/InstalledAppDetails.java index 41ba49b..52e9844 100644 --- a/src/com/android/settings/InstalledAppDetails.java +++ b/src/com/android/settings/InstalledAppDetails.java @@ -18,6 +18,7 @@ package com.android.settings; +import com.android.internal.content.PackageHelper; import com.android.settings.R; import android.app.Activity; import android.app.ActivityManager; @@ -30,6 +31,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.IPackageDataObserver; +import android.content.pm.IPackageManager; import android.content.pm.IPackageMoveObserver; import android.content.pm.IPackageStatsObserver; import android.content.pm.PackageInfo; @@ -40,8 +42,11 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.net.Uri; import android.os.Bundle; import android.os.Handler; +import android.os.IBinder; import android.os.Message; import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.storage.IMountService; import android.text.format.Formatter; import android.util.Log; import java.util.ArrayList; @@ -230,17 +235,36 @@ public class InstalledAppDetails extends Activity implements View.OnClickListene mMoveAppButton.setText(R.string.move_app); } else if ((mAppInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0) { mMoveAppButton.setText(R.string.move_app_to_internal); + // Always let apps move to internal storage from sdcard. moveDisable = false; } else { - moveDisable = (mAppInfo.flags & ApplicationInfo.FLAG_FORWARD_LOCK) != 0 || - (mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; mMoveAppButton.setText(R.string.move_app_to_sdcard); - } - if (pkgInfo != null && pkgInfo.installLocation == - PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY) { - // If an application explicitly specifies install location - // consider that - moveDisable = true; + if ((mAppInfo.flags & ApplicationInfo.FLAG_FORWARD_LOCK) != 0 || + (mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { + moveDisable = true; + } else if (pkgInfo != null) { + if (pkgInfo.installLocation == + PackageInfo.INSTALL_LOCATION_INTERNAL_ONLY) { + // If an application explicitly specifies install location + // consider that + moveDisable = true; + } else if (pkgInfo.installLocation == PackageInfo.INSTALL_LOCATION_UNSPECIFIED) { + IPackageManager ipm = IPackageManager.Stub.asInterface( + ServiceManager.getService("package")); + int loc; + try { + loc = ipm.getInstallLocation(); + } catch (RemoteException e) { + Log.e(TAG, "Is Pakage Manager running?"); + return; + } + if (loc == PackageHelper.APP_INSTALL_EXTERNAL) { + // For apps with no preference and the default value set + // to install on sdcard. + moveDisable = false; + } + } + } } if (moveDisable) { mMoveAppButton.setEnabled(false); |