summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSuchi Amalapurapu <asuchitra@google.com>2009-11-12 13:45:18 -0800
committerSuchi Amalapurapu <asuchitra@google.com>2009-11-12 14:50:19 -0800
commitf80cb7b8632fb2cab44838ee741b3e8fa4aa90b1 (patch)
treee531702cc70d5c197034cacaf83ca192f96a9e9a /src
parentf075068817434dbb5e861d00f5ed23d6405ab4d9 (diff)
downloadandroid_packages_apps_PackageInstaller-f80cb7b8632fb2cab44838ee741b3e8fa4aa90b1.tar.gz
android_packages_apps_PackageInstaller-f80cb7b8632fb2cab44838ee741b3e8fa4aa90b1.tar.bz2
android_packages_apps_PackageInstaller-f80cb7b8632fb2cab44838ee741b3e8fa4aa90b1.zip
move creating temp file to InstallAppProgress
and deal with cleanly deleting the file
Diffstat (limited to 'src')
-rwxr-xr-xsrc/com/android/packageinstaller/InstallAppProgress.java62
-rw-r--r--src/com/android/packageinstaller/PackageInstallerActivity.java57
2 files changed, 61 insertions, 58 deletions
diff --git a/src/com/android/packageinstaller/InstallAppProgress.java b/src/com/android/packageinstaller/InstallAppProgress.java
index 0bd38023..43de6ded 100755
--- a/src/com/android/packageinstaller/InstallAppProgress.java
+++ b/src/com/android/packageinstaller/InstallAppProgress.java
@@ -29,6 +29,7 @@ import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
+import android.os.FileUtils;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
@@ -38,6 +39,11 @@ import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
/**
* This activity corresponds to a download progress screen that is displayed
* when the user tries
@@ -60,6 +66,9 @@ public class InstallAppProgress extends Activity implements View.OnClickListener
final static int FAILED = 0;
private final int INSTALL_COMPLETE = 1;
private Intent mLaunchIntent;
+ private File mTmpFile;
+ private final String TMP_FILE_NAME="tmpCopy.apk";
+
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
@@ -152,6 +161,15 @@ public class InstallAppProgress extends Activity implements View.OnClickListener
mLaunchButton = (Button)findViewById(R.id.launch_button);
mOkPanel.setVisibility(View.INVISIBLE);
+ // Create temp file before invoking install api
+ mTmpFile = createTempPackageFile(mPackageURI.getPath());
+ if (mTmpFile == null) {
+ Message msg = mHandler.obtainMessage(INSTALL_COMPLETE);
+ msg.arg1 = PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
+ mHandler.sendMessage(msg);
+ return;
+ }
+ mPackageURI = Uri.parse("file://" + mTmpFile.getPath());
String installerPackageName = getIntent().getStringExtra(
Intent.EXTRA_INSTALLER_PACKAGE_NAME);
@@ -159,13 +177,55 @@ public class InstallAppProgress extends Activity implements View.OnClickListener
pm.installPackage(mPackageURI, observer, installFlags, installerPackageName);
}
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ if (mTmpFile != null && mTmpFile.exists()) {
+ mTmpFile.delete();
+ }
+ }
+
public void onClick(View v) {
if(v == mDoneButton) {
- Log.i(TAG, "Finished installing "+mAppInfo);
+ if (mAppInfo.packageName != null) {
+ Log.i(TAG, "Finished installing "+mAppInfo.packageName);
+ }
finish();
} else if(v == mLaunchButton) {
startActivity(mLaunchIntent);
finish();
}
}
+
+ private File createTempPackageFile(String filePath) {
+ File tmpPackageFile = getFileStreamPath(TMP_FILE_NAME);
+ if (tmpPackageFile == null) {
+ Log.w(TAG, "Failed to create temp file");
+ return null;
+ }
+ if (tmpPackageFile.exists()) {
+ tmpPackageFile.delete();
+ }
+ // Open file to make it world readable
+ FileOutputStream fos;
+ try {
+ fos = openFileOutput(TMP_FILE_NAME, MODE_WORLD_READABLE);
+ } catch (FileNotFoundException e1) {
+ Log.e(TAG, "Error opening file " + TMP_FILE_NAME);
+ return null;
+ }
+ try {
+ fos.close();
+ } catch (IOException e) {
+ Log.e(TAG, "Error opening file " + TMP_FILE_NAME);
+ return null;
+ }
+
+ File srcPackageFile = new File(filePath);
+ if (!FileUtils.copyFile(srcPackageFile, tmpPackageFile)) {
+ Log.w(TAG, "Failed to make copy of file: " + srcPackageFile);
+ return null;
+ }
+ return tmpPackageFile;
+ }
}
diff --git a/src/com/android/packageinstaller/PackageInstallerActivity.java b/src/com/android/packageinstaller/PackageInstallerActivity.java
index 8f681bb0..b1651943 100644
--- a/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -19,9 +19,6 @@ package com.android.packageinstaller;
import com.android.packageinstaller.R;
import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -33,13 +30,11 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.DialogInterface.OnCancelListener;
import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageDataObserver;
import android.content.pm.PackageManager;
import android.content.pm.PackageParser;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.os.Bundle;
-import android.os.FileUtils;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
@@ -50,7 +45,6 @@ import android.view.View.OnClickListener;
import android.widget.AppSecurityPermissions;
import android.widget.Button;
import android.widget.LinearLayout;
-import android.widget.TextView;
/*
* This activity is launched when a new application is installed via side loading
@@ -69,7 +63,6 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
PackageManager mPm;
private boolean mReplacing = false;
private PackageParser.Package mPkgInfo;
- private File mTmpFile;
private static final int SUCCEEDED = 1;
private static final int FAILED = 0;
// Broadcast receiver for clearing cache
@@ -271,46 +264,7 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
Settings.Secure.INSTALL_NON_MARKET_APPS, 0) > 0;
}
- private File createTempPackageFile(String filePath) {
- File tmpPackageFile;
- int i = filePath.lastIndexOf("/");
- String tmpFileName;
- if(i != -1) {
- tmpFileName = filePath.substring(i+1);
- } else {
- tmpFileName = filePath;
- }
- FileOutputStream fos;
- try {
- fos=openFileOutput(tmpFileName, MODE_WORLD_READABLE);
- } catch (FileNotFoundException e1) {
- Log.e(TAG, "Error opening file "+tmpFileName);
- return null;
- }
- try {
- fos.close();
- } catch (IOException e) {
- Log.e(TAG, "Error opening file "+tmpFileName);
- return null;
- }
- tmpPackageFile=getFileStreamPath(tmpFileName);
- File srcPackageFile = new File(filePath);
- if (!FileUtils.copyFile(srcPackageFile, tmpPackageFile)) {
- return null;
- }
- return tmpPackageFile;
- }
-
private void makeTempCopyAndInstall() {
- //copy file to tmp dir
- mTmpFile = createTempPackageFile(mPackageURI.getPath());
- if(mTmpFile == null) {
- //display a dialog
- Log.e(TAG, "Error copying file locally. Failed Installation");
- showDialogInner(DLG_OUT_OF_SPACE);
- return;
- }
- mPackageURI = Uri.parse("file://"+mTmpFile.getPath());
// Check if package is already installed. display confirmation dialog if replacing pkg
try {
mAppInfo = mPm.getApplicationInfo(mPkgInfo.packageName,
@@ -356,8 +310,6 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
showDialogInner(DLG_UNKNOWN_APPS);
return;
}
- // Clear any other temporary files in data directory
- mPm.clearApplicationUserData(getPackageName(), null);
//compute the size of the application. just an estimate
long size;
String apkPath = mPackageURI.getPath();
@@ -367,15 +319,6 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
checkOutOfSpace(size);
}
- @Override
- public void onDestroy() {
- super.onDestroy();
- // Delete the temporary file if it still exists
- if (mTmpFile != null) {
- deleteFile(mTmpFile.getName());
- }
- }
-
// Generic handling when pressing back key
public void onCancel(DialogInterface dialog) {
finish();