summaryrefslogtreecommitdiff
authorxiaoliang.wang <xiaoliang.wang@amlogic.com>2017-10-16 13:23:11 (GMT)
committer xiaoliang.wang <xiaoliang.wang@amlogic.com>2017-10-25 09:32:06 (GMT)
commit19b26ff532cb0cf2722bb1bd559d549b20b1e79f (patch)
tree86af46767d54091cfe5764a2fafab5f5fdba4f3f
parent05a6e87eaa51e09486357a855ba2b6aa26a97926 (diff)
downloadAppInstaller-ref-o-20171115.zip
AppInstaller-ref-o-20171115.tar.gz
AppInstaller-ref-o-20171115.tar.bz2
AppInstaller:Invoke FileListManager to get files[1/5]
PD#152065 Invoke FileListManager to get files Change-Id: I1e5bf317abd9f72d14dd78809d88d53f002c0065
Diffstat
-rw-r--r--Android.mk1
-rw-r--r--AndroidManifest.xml7
-rw-r--r--src/com/droidlogic/appinstall/PackageAdapter.java28
-rw-r--r--src/com/droidlogic/appinstall/main.java744
4 files changed, 331 insertions, 449 deletions
diff --git a/Android.mk b/Android.mk
index 4943bb5..598471c 100644
--- a/Android.mk
+++ b/Android.mk
@@ -12,6 +12,7 @@ endif
LOCAL_PACKAGE_NAME := AppInstaller
LOCAL_CERTIFICATE := platform
+LOCAL_JAVA_LIBRARIES := droidlogic
include $(BUILD_PACKAGE)
endif
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c5bcaba..2042832 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -8,6 +8,10 @@
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23"/>
<supports-screens android:largeScreens="true" android:smallScreens="true" android:resizeable="true" android:normalScreens="true"></supports-screens>
<uses-permission android:name="android.permission.WAKE_LOCK" />
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+ <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE"/>
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+ <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.INSTALL_PACKAGES"></uses-permission>
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"></uses-permission>
<uses-permission android:name="android.permission.DELETE_PACKAGES"></uses-permission>
@@ -16,6 +20,7 @@
<original-package android:name="com.droidlogic.appinstall" />
<application android:icon="@mipmap/icon" android:label="@string/app_name" android:debuggable="false">
+ <uses-library android:name="droidlogic.software.core" />
<activity android:name=".main"
android:configChanges="orientation|fontScale|screenSize|screenLayout"
android:label="@string/app_name">
@@ -25,4 +30,4 @@
</intent-filter>
</activity>
</application>
-</manifest> \ No newline at end of file
+</manifest>
diff --git a/src/com/droidlogic/appinstall/PackageAdapter.java b/src/com/droidlogic/appinstall/PackageAdapter.java
index 3057eac..c4c0179 100644
--- a/src/com/droidlogic/appinstall/PackageAdapter.java
+++ b/src/com/droidlogic/appinstall/PackageAdapter.java
@@ -19,6 +19,7 @@ package com.droidlogic.appinstall;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import android.content.res.AssetManager;
import android.content.Context;
@@ -32,7 +33,6 @@ import android.os.Handler;
import android.os.Message;
import android.os.storage.StorageManager;
import android.os.storage.VolumeInfo;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -43,9 +43,11 @@ import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.os.UserHandle;
+import com.droidlogic.app.FileListManager;
class APKInfo extends Object {
static protected PackageManager pkgmgr = null;
+ static protected FileListManager mFileListManager = null;
APKInfo (Context pcontext, String apkpath) {
pkgmgr = pcontext.getPackageManager();
@@ -160,12 +162,15 @@ public class PackageAdapter extends BaseAdapter {
protected int m_CheckBox_InstallState;
protected int m_CheckBox_SelState;
private LayoutInflater mInflater;
- protected ArrayList<APKInfo> m_apklist = null;
+ ///protected ArrayList<APKInfo> m_apklist = null;
+ protected List<APKInfo> m_apklist = null;
protected ListView m_list = null;
- private StorageManager mStorageManager;
+ ///private StorageManager mStorageManager;
+ private FileListManager mFileListManager;
PackageAdapter (Context context, int Layout_Id, int text_app_id, int text_filename_id, int checkbox_id, int img_appicon_id, int checkbox_sel_id, ArrayList<APKInfo> apklist, ListView list) {
- mStorageManager = (StorageManager)context.getSystemService(Context.STORAGE_SERVICE);
+ ///mStorageManager = (StorageManager)context.getSystemService(Context.STORAGE_SERVICE);
+ mFileListManager = new FileListManager(context);
mInflater = LayoutInflater.from (context);
m_Layout_APKListItem = Layout_Id;
m_TextView_FileName = text_filename_id;
@@ -219,21 +224,6 @@ public class PackageAdapter extends BaseAdapter {
String pathVol;
int idx = -1;
int len;
-
- List<VolumeInfo> volumes = mStorageManager.getVolumes();
- Collections.sort(volumes, VolumeInfo.getDescriptionComparator());
- for (VolumeInfo vol : volumes) {
- if (vol != null && vol.isMountedReadable() && vol.getType() == VolumeInfo.TYPE_PUBLIC) {
- pathVol = vol.getPath().getAbsolutePath();
- idx = inPath.indexOf(pathVol);
- if (idx != -1) {
- len = pathVol.length();
- pathLast = inPath.substring(idx + len);
- outPath = mStorageManager.getBestVolumeDescription(vol) + pathLast;
- }
- }
- }
-
return outPath;
}
diff --git a/src/com/droidlogic/appinstall/main.java b/src/com/droidlogic/appinstall/main.java
index b77461b..5c253d4 100644
--- a/src/com/droidlogic/appinstall/main.java
+++ b/src/com/droidlogic/appinstall/main.java
@@ -22,6 +22,8 @@ import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.Iterator;
import android.app.Activity;
import android.app.AlertDialog;
@@ -66,19 +68,15 @@ import android.os.StatFs;
import android.os.Environment;
import android.content.BroadcastReceiver;
import android.content.IntentFilter;
-
-
+import com.droidlogic.app.FileListManager;
public class main extends Activity {
private String TAG = "Appinstall";
private String mVersion = "V1.1.3";
- private String mReleaseDate = "2017.08.11";
+ private String mReleaseDate = "2017.09.26";
- private static final String ROOT_PATH = "/storage";
- private static final String SHEILD_EXT_STOR = Environment.getExternalStorageDirectory().getPath() + "/external_storage"; //"/storage/sdcard0/external_storage";
- private static final String NAND_PATH = Environment.getExternalStorageDirectory().getPath();//"/storage/sdcard0";
- private static final String SD_PATH = "/storage/external_storage/sdcard1";
- private static final String USB_PATH = "/storage/external_storage";
+ public static final String KEY_NAME = "key_name";
+ public static final String KEY_PATH = "key_path";
//UI INFO
protected String mScanRoot = null;
@@ -101,6 +99,7 @@ public class main extends Activity {
protected ScanOperation m_scanop = new ScanOperation();
protected InstallOperation m_installop = new InstallOperation();
protected String mDevs[] = null;
+ protected String mDevStrs[] = null;
//the status of app
private static int SCAN_APKS = 0;
@@ -109,8 +108,8 @@ public class main extends Activity {
protected int mStatus = -1;
private int item_position_selected, item_position_first, fromtop_piexl;
- private StorageManager mStorageManager;
- private List<VolumeInfo> mVolumes;
+ private static FileListManager mFileListManager;
+ private List<Map<String, Object>> mVolumes;
private boolean recvFlag = false;
private boolean mIsAppInsatlledFlg = false;
@@ -121,7 +120,7 @@ public class main extends Activity {
super.onCreate (savedInstanceState);
setContentView (R.layout.main);
- mStorageManager = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
+ mFileListManager = new FileListManager(this);
//keep system awake
mScreenLock = ( (PowerManager) this.getSystemService (Context.POWER_SERVICE)).newWakeLock (PowerManager.SCREEN_BRIGHT_WAKE_LOCK, TAG);
@@ -163,48 +162,18 @@ public class main extends Activity {
public void onClick (View v) {
main.this.finish();
}
- }
- );
+ });
hexit.requestFocus();
showChooseDev();
-
-/* IntentFilter f = new IntentFilter();
- f.addAction(Intent.ACTION_MEDIA_SCANNER_STARTED);
- f.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
- // f.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
- f.addDataScheme("file");
- registerReceiver(mScanListener, f);*/
}
-/* private BroadcastReceiver mScanListener = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- mReScanHandler.sendEmptyMessage(0);
- if (intent.getAction().equals(Intent.ACTION_MEDIA_UNMOUNTED)) {
- Log.d (TAG, "[mScanListener]Intent.ACTION_MEDIA_UNMOUNTED");
- Toast.makeText (context, "[mScanListener]Intent.ACTION_MEDIA_UNMOUNTED", Toast.LENGTH_SHORT).show();
- }
- if (intent.getAction().equals(Intent.ACTION_MEDIA_SCANNER_STARTED)) {
- Log.d (TAG, "[mScanListener]Intent.ACTION_MEDIA_SCANNER_STARTED");
- Toast.makeText (context, "[mScanListener]Intent.ACTION_MEDIA_SCANNER_STARTED", Toast.LENGTH_SHORT).show();
- }
- if (intent.getAction().equals(Intent.ACTION_MEDIA_SCANNER_FINISHED)) {
- Log.d (TAG, "[mScanListener]Intent.ACTION_MEDIA_SCANNER_FINISHED");
- Toast.makeText (context, "[mScanListener]Intent.ACTION_MEDIA_SCANNER_FINISHED", Toast.LENGTH_SHORT).show();
- }
- }
- };
- private Handler mReScanHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- startScanOp();
- }
- };*/
private BroadcastReceiver mMountReceiver = new BroadcastReceiver() {
@Override
public void onReceive (Context context, Intent intent) {
String action = intent.getAction();
String data = intent.getDataString();
+ Uri uri = intent.getData();
+ String spath = uri.getPath();
if (action == null) {
return;
}
@@ -212,7 +181,7 @@ public class main extends Activity {
return;
}
if (action.equals (Intent.ACTION_MEDIA_UNMOUNTED)) {
- int index = data.indexOf (ROOT_PATH);
+ int index = data.indexOf (FileListManager.STORAGE);
if (index >= 0) {
String path = data.substring (index);
if (path.equals (mScanRoot)) {
@@ -226,15 +195,55 @@ public class main extends Activity {
startScanOp();
}
}
- else if (action.equals (Intent.ACTION_MEDIA_MOUNTED)) {
- int index = data.indexOf (ROOT_PATH);
+ else if (action.equals ("com.droidvold.action.MEDIA_EJECT") && !spath.equals("/dev/null")) {
+ int index = data.indexOf (FileListManager.STORAGE);
+ int index1 = data.indexOf (FileListManager.MEDIA_RW);
if (index >= 0) {
String path = data.substring (index);
if (path.equals (mScanRoot)) {
- startScanOp();
+ //m_list.setAdapter (null);
+ m_DirEdit.setText (" ", TextView.BufferType.NORMAL);
+ mApkList.clear();
+ pkgadapter.notifyDataSetChanged();
+ }
+ } else if (index1 >= 0) {
+ String path = data.substring (index1);
+ if (path.equals (mScanRoot)) {
+ //m_list.setAdapter (null);
+ m_DirEdit.setText (" ", TextView.BufferType.NORMAL);
+ mApkList.clear();
+ pkgadapter.notifyDataSetChanged();
}
+ } else { //exception handle
+ startScanOp();
}
- else { //exception handle
+ }
+ else if ((action.equals (Intent.ACTION_MEDIA_MOUNTED) || action.equals ("com.droidvold.action.MEDIA_MOUNTED")) && !spath.equals("/dev/null")) {
+ int index = data.indexOf (FileListManager.STORAGE);
+ int index1 = data.indexOf (FileListManager.MEDIA_RW);
+ if (index >= 0) {
+ String path = data.substring (index);
+ if (path.equals (mScanRoot)) {
+ for (int i = 0; i < mVolumes.size(); i++) {
+ Map<String, Object> map = mVolumes.get(i);
+ if ((String)map.get(KEY_PATH) == mScanRoot) {
+ m_DirEdit.setText ((String)map.get(KEY_NAME));
+ }
+ }
+ startScanOp();
+ }
+ } else if (index1 >= 0) {
+ String path = data.substring (index1);
+ if (path.equals (mScanRoot)) {
+ for (int i = 0; i < mVolumes.size(); i++) {
+ Map<String, Object> map = mVolumes.get(i);
+ if ((String)map.get(KEY_PATH) == mScanRoot) {
+ m_DirEdit.setText ((String)map.get(KEY_NAME));
+ }
+ }
+ startScanOp();
+ }
+ } else {
startScanOp();
}
}
@@ -242,12 +251,14 @@ public class main extends Activity {
};
public void onResume() {
- Log.d (TAG, "onResume");
m_scanop.setHandler (mainhandler);
m_installop.setHandler (mainhandler);
IntentFilter intentFilter = new IntentFilter (Intent.ACTION_MEDIA_MOUNTED);
intentFilter.addAction (Intent.ACTION_MEDIA_EJECT);
intentFilter.addAction (Intent.ACTION_MEDIA_UNMOUNTED);
+ intentFilter.addAction ("com.droidvold.action.MEDIA_UNMOUNTED");
+ intentFilter.addAction ("com.droidvold.action.MEDIA_MOUNTED");
+ intentFilter.addAction ("com.droidvold.action.MEDIA_EJECT");
intentFilter.addDataScheme ("file");
if (!recvFlag) {
registerReceiver (mMountReceiver, intentFilter);
@@ -256,7 +267,6 @@ public class main extends Activity {
super.onResume();
if ( mScanRoot != null && mScanRoot.length() > 0 && mIsClickPathFlg) {
showChooseDev();
-// startScanOp();
} else {
pkgadapter.notifyDataSetChanged();
}
@@ -264,7 +274,6 @@ public class main extends Activity {
public void onPause() {
//disable the operation message
-// mReScanHandler.removeCallbacksAndMessages(null);
m_scanop.setHandler (null);
m_installop.setHandler (null);
mainhandler.removeMessages (END_OPERATION);
@@ -315,9 +324,6 @@ public class main extends Activity {
// TODO Auto-generated method stub
switch (msg.what) {
case END_OPERATION:
- if (msg.arg1 != mStatus) {
- Log.e (TAG, "mStatus " + String.valueOf (mStatus) + "!= endoperation " + String.valueOf (msg.arg1));
- }
if (mStatus == SCAN_APKS) {
if (mScanDiag != null) {
mScanDiag.dismiss();
@@ -347,12 +353,10 @@ public class main extends Activity {
showScanDiag (msg.arg1, msg.arg2, msg.obj);
break;
case HANDLE_PKG_NEXT:
- Log.d (TAG, "HANDLE_PKG_NEXT");
String hanlemsg = msg.getData().getString ("showstr");
showHandleDiag (hanlemsg, (int) msg.arg1 + 1, msg.arg2);
break;
case HANDLE_PKG_FAIL:
- Log.d (TAG, "HANDLE_PKG_FAIL");
String failemsg = msg.getData().getString ("showstr");
Toast.makeText (main.this, failemsg, Toast.LENGTH_SHORT).show();
break;
@@ -375,7 +379,6 @@ public class main extends Activity {
return pName.contains(packageName);
}
-
//option menu
protected final int MENU_INSTALL = 0;
protected final int MENU_UNINSTALL = 1;
@@ -442,43 +445,18 @@ public class main extends Activity {
//user functions
public void showChooseDev() {
- int dev_usb_count = 0;
- int dev_cd_count = 0;
+ int num = 0;
int devCnt = 0;
int selid = 0;
- String internal = getString (R.string.memory_device_str);
- String sdcard = getString (R.string.sdcard_device_str);
- String usb = getString (R.string.usb_device_str);
- String cdrom = getString (R.string.cdrom_device_str);
- String sdcardExt = getString (R.string.ext_sdcard_device_str);
- String DeviceArray[] = {internal, sdcard, usb, cdrom, sdcardExt};
-
- int num = 0;
- mVolumes = mStorageManager.getVolumes();
- Collections.sort(mVolumes, VolumeInfo.getDescriptionComparator());
- for (VolumeInfo vol : mVolumes) {
- if (vol != null && vol.isMountedReadable() && vol.getType() == VolumeInfo.TYPE_PUBLIC) {
- num++;
- }
- }
- num = num + 1; // for /sdcard(internal storage)
- mDevs = new String[num];
- mDevStrs = new String[num];
-
- //internal storage
- File dir = new File (NAND_PATH);
- mDevs[devCnt] = dir.toString();
- mDevStrs[devCnt] = DeviceArray[1];
- devCnt++;
-
- //external storage
- for (VolumeInfo vol : mVolumes) {
- if (vol != null && vol.isMountedReadable() && vol.getType() == VolumeInfo.TYPE_PUBLIC) {
- File path = vol.getPath();
- mDevs[devCnt] = path.toString();
- mDevStrs[devCnt] = mStorageManager.getBestVolumeDescription(vol);
- devCnt++;
- }
+ mVolumes = mFileListManager.getDevices();
+ devCnt = mVolumes.size();
+ mDevs = new String[devCnt];
+ mDevStrs = new String[devCnt];
+
+ for (int i = 0; i < devCnt; i++) {
+ Map<String, Object> map = mVolumes.get(i);
+ mDevs[i] = (String)map.get(KEY_PATH);
+ mDevStrs[i] = (String)map.get(KEY_NAME);
}
for (int idx = 0; idx < devCnt; idx++) {
@@ -493,7 +471,6 @@ public class main extends Activity {
.setSingleChoiceItems (mDevStrs, selid, new DialogInterface.OnClickListener() {
public void onClick (DialogInterface dialog, int which) {
dialog.dismiss();
- //updatePathName(mDevs[which]);
mIsClickPathFlg = true;
m_DirEdit.setText (mDevStrs[which]);
String devpath = mDevs[which] == null ? null : mDevs[which].toString();
@@ -503,13 +480,8 @@ public class main extends Activity {
}
File pfile = new File (devpath);
if (pfile != null && pfile.isDirectory() == true) {
- //if((mScanRoot == null) || (mScanRoot.compareTo(devpath) != 0))
- {
- mScanRoot = devpath;
- startScanOp();
- }
- //else
- //Toast.makeText(main.this, "same dir path", Toast.LENGTH_SHORT).show();
+ mScanRoot = devpath;
+ startScanOp();
}
else {
Toast.makeText (main.this, "invalid dir path", Toast.LENGTH_SHORT).show();
@@ -526,36 +498,6 @@ public class main extends Activity {
.show();
}
- private String mDevStrs[] = null;
- private void updatePathName (String dev) {
- String internal = getString (R.string.memory_device_str);
- String sdcard = getString (R.string.sdcard_device_str);
- String usb = getString (R.string.usb_device_str);
- String cdrom = getString (R.string.cdrom_device_str);
- String sdcardExt = getString (R.string.ext_sdcard_device_str);
- String str = "";
- if (dev == null) {
- Log.e (TAG, "updatePathName error, dev=null");
- return;
- }
- if (dev.equals (NAND_PATH)) {
- str = sdcard;
- }
- else if ( (dev.startsWith (USB_PATH + "/sd") || dev.startsWith (ROOT_PATH + "/udisk")) && !dev.equals (SD_PATH)) {
- str = usb;
- }
- else if (dev.startsWith (USB_PATH + "/sr") && !dev.equals (SD_PATH)) {
- str = cdrom;
- }
- else if (dev.equals (SD_PATH)) {
- str = sdcardExt;
- }
- else {
- str = dev;
- }
- m_DirEdit.setText (str);
- }
-
//===================================================================
//functions for installing and uninstalling
public void install_apk (String apk_filepath) {
@@ -649,15 +591,6 @@ public class main extends Activity {
super.dismiss();
}
- /*
- public boolean onTouchEvent (MotionEvent event)
- {
- m_pOp.stop();
- setMessage("stopping...\n");
- m_bOpStop = true;
- return true;
- }
- */
public boolean onKeyDown (int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_POWER) {
m_pOp.stop();
@@ -684,156 +617,154 @@ public class main extends Activity {
//===================================================================
//functions for installing and uninstalling in slient mode
class InstallOperation extends OperationThread {
- public long [] m_checkeditems = null;
- protected installthread m_thread;
- private long m_handleitem;
- private Handler m_selfhandler;
- protected ApkHandleTask m_apkhandltsk = new ApkHandleTask();
- InstallOperation() {
- super();
- m_iOp = INSTALL_APKS;
+ public long [] m_checkeditems = null;
+ protected installthread m_thread;
+ private long m_handleitem;
+ private Handler m_selfhandler;
+ protected ApkHandleTask m_apkhandltsk = new ApkHandleTask();
+ InstallOperation() {
+ super();
+ m_iOp = INSTALL_APKS;
+ }
+ public void start() { //overide it to new and start a thread
+ super.start();
+ m_handleitem = 0;
+ m_thread = new installthread ("multi-apk-handler");
+ m_thread.start();
+ }
+
+ class installthread extends HandlerThread {
+ installthread (String name) {
+ super (name);
}
- public void start() { //overide it to new and start a thread
- super.start();
- m_handleitem = 0;
- m_thread = new installthread ("multi-apk-handler");
- m_thread.start();
+ protected void onLooperPrepared() {
+ synchronized (m_syncobj) {
+ m_selfhandler = new Handler();
+ m_selfhandler.post (m_apkhandltsk);
+ m_handleitem = 0;
+ }
}
+ }
- class installthread extends HandlerThread {
- installthread (String name) {
- super (name);
- }
- protected void onLooperPrepared() {
- synchronized (m_syncobj) {
- m_selfhandler = new Handler();
- m_selfhandler.post (m_apkhandltsk);
- m_handleitem = 0;
+ class ApkHandleTask implements Runnable {
+ class PackageInstallObserver extends IPackageInstallObserver.Stub {
+ String apkpath = null;
+ public void packageInstalled (String packageName, int returnCode) {
+ Log.d (TAG, "packageInstalled " + String.valueOf (returnCode));
+ synchronized (m_syncobj) {
+ if (returnCode != 1) { //fail
+ Message endmsg = Message.obtain();
+ endmsg.what = HANDLE_PKG_FAIL;
+ Bundle data = new Bundle();
+ data.putString ("showstr", "Install " + apkpath + " fail!");
+ endmsg.setData (data);
+ m_handler.sendMessage (endmsg);
}
+ m_handleitem++;
+ m_selfhandler.post (m_apkhandltsk);
}
+ }
}
- class ApkHandleTask implements Runnable {
- class PackageInstallObserver extends IPackageInstallObserver.Stub {
- String apkpath = null;
- public void packageInstalled (String packageName, int returnCode) {
- Log.d (TAG, "packageInstalled " + String.valueOf (returnCode));
- synchronized (m_syncobj) {
- if (returnCode != 1) { //fail
- Message endmsg = Message.obtain();
- endmsg.what = HANDLE_PKG_FAIL;
- Bundle data = new Bundle();
- data.putString ("showstr", "Install " + apkpath + " fail!");
- endmsg.setData (data);
- m_handler.sendMessage (endmsg);
- }
- m_handleitem++;
- m_selfhandler.post (m_apkhandltsk);
- }
- }
+ class PackageDeleteObserver extends IPackageDeleteObserver.Stub {
+ String pkgpath = null;
+ public void packageDeleted (String packageName, int returnCode) {
+ Log.d (TAG, "packageDeleted " + String.valueOf (returnCode));
+ synchronized (m_syncobj) {
+ if (returnCode != PackageManager.DELETE_SUCCEEDED) {
+ Message endmsg = Message.obtain();
+ endmsg.what = HANDLE_PKG_FAIL;
+ Bundle data = new Bundle();
+ data.putString ("showstr", "Uninstall " + pkgpath + " fail!");
+ endmsg.setData (data);
+ m_handler.sendMessage (endmsg);
+ }
+ m_handleitem++;
+ m_selfhandler.post (m_apkhandltsk);
}
-
- class PackageDeleteObserver extends IPackageDeleteObserver.Stub {
- String pkgpath = null;
- public void packageDeleted (String packageName, int returnCode) {
- Log.d (TAG, "packageDeleted " + String.valueOf (returnCode));
- synchronized (m_syncobj) {
- if (returnCode != PackageManager.DELETE_SUCCEEDED) {
- Message endmsg = Message.obtain();
- endmsg.what = HANDLE_PKG_FAIL;
- Bundle data = new Bundle();
- data.putString ("showstr", "Uninstall " + pkgpath + " fail!");
- endmsg.setData (data);
- m_handler.sendMessage (endmsg);
- }
- m_handleitem++;
- m_selfhandler.post (m_apkhandltsk);
- }
- }
+ }
+ }
+ public void install_apk_slient (String apk_filepath) {
+ PackageManager pm = getPackageManager();
+ PackageInstallObserver observer = new PackageInstallObserver();
+ observer.apkpath = apk_filepath;
+ pm.installPackage (Uri.fromFile (new File (apk_filepath)), observer, pm.INSTALL_REPLACE_EXISTING, null);
+ }
+ public void uninstall_apk_slient (String apk_pkgname) {
+ PackageDeleteObserver observer = new PackageDeleteObserver();
+ observer.pkgpath = apk_pkgname;
+ PackageManager pm = getPackageManager();
+ if (isAppInstalled(main.this, apk_pkgname)) {
+ pm.deletePackage (apk_pkgname, observer, 0);
+ } else {
+ Toast.makeText (main.this, R.string.apk_have_not_been_installed , Toast.LENGTH_SHORT).show();
+ }
+ }
+ public void run() {
+ synchronized (m_syncobj) {
+ if ( (m_bstop == true) || m_handleitem == m_checkeditems.length) {
+ sendEndMsg();
+ m_bOpEnd = true;
+ m_thread.quit();
+ return ;
}
- public void install_apk_slient (String apk_filepath) {
- PackageManager pm = getPackageManager();
- PackageInstallObserver observer = new PackageInstallObserver();
- observer.apkpath = apk_filepath;
- pm.installPackage (Uri.fromFile (new File (apk_filepath)), observer, pm.INSTALL_REPLACE_EXISTING, null);
+ }
+ String hanlemsg = null;
+ int actionid;
+ String actionpara = null;
+ APKInfo pinfo = mApkList.get ( (int) m_checkeditems[ (int) m_handleitem]);
+ if (pinfo != null) {
+ //if(pinfo.isInstalled()==false)
+ if (menuSelect == opInstall) {
+ actionid = 0;
+ actionpara = pinfo.filepath;
+ hanlemsg = "Installing \"";
}
- public void uninstall_apk_slient (String apk_pkgname) {
- PackageDeleteObserver observer = new PackageDeleteObserver();
- observer.pkgpath = apk_pkgname;
- PackageManager pm = getPackageManager();
-
- if (isAppInstalled(main.this, apk_pkgname)) {
- pm.deletePackage (apk_pkgname, observer, 0);
- } else {
- Toast.makeText (main.this, R.string.apk_have_not_been_installed , Toast.LENGTH_SHORT).show();
- }
-
+ else {
+ actionid = 1;
+ actionpara = pinfo.pCurPkgName;
+ hanlemsg = "Uninstalling \"";
}
- public void run() {
- synchronized (m_syncobj) {
- if ( (m_bstop == true) || m_handleitem == m_checkeditems.length) {
- sendEndMsg();
- m_bOpEnd = true;
- m_thread.quit();
- return ;
- }
- }
- String hanlemsg = null;
- int actionid;
- String actionpara = null;
- APKInfo pinfo = mApkList.get ( (int) m_checkeditems[ (int) m_handleitem]);
- if (pinfo != null) {
- //if(pinfo.isInstalled()==false)
- if (menuSelect == opInstall) {
- actionid = 0;
- actionpara = pinfo.filepath;
- hanlemsg = "Installing \"";
- }
- else {
- actionid = 1;
- actionpara = pinfo.pCurPkgName;
- hanlemsg = "Uninstalling \"";
- }
- hanlemsg += pinfo.pAppName + "\"\n";
- synchronized (m_syncobj) {
- if (m_handler != null) {
- Message endmsg = Message.obtain();
- endmsg.what = HANDLE_PKG_NEXT;
- endmsg.arg1 = (int) m_handleitem;
- endmsg.arg2 = m_checkeditems.length;
- Bundle data = new Bundle();
- data.putString ("showstr", hanlemsg);
- endmsg.setData (data);
- m_handler.sendMessageDelayed (endmsg, 2000); //add a delay, for systeme need time to release cache.
- }
- }
- if (actionid == 0) {
- boolean hasSpace = checkFreeSpace ("/data/app") > 50;
- if (!hasSpace) {
- Log.w (TAG, "no enough space for installation, force stop!");
- Message endmsg = Message.obtain();
- endmsg.what = HANDLE_PKG_FAIL;
- Bundle data = new Bundle();
- data.putString ("showstr", getResources().getString (R.string.no_space));
- endmsg.setData (data);
- m_handler.sendMessage (endmsg);
- sendEndMsg();
- m_bOpEnd = true;
- m_thread.quit();
- return ;
- }
- install_apk_slient (actionpara);
- }
- else {
- uninstall_apk_slient (actionpara);
- }
- Log.d (TAG, "install a singel apk end");
+ hanlemsg += pinfo.pAppName + "\"\n";
+ synchronized (m_syncobj) {
+ if (m_handler != null) {
+ Message endmsg = Message.obtain();
+ endmsg.what = HANDLE_PKG_NEXT;
+ endmsg.arg1 = (int) m_handleitem;
+ endmsg.arg2 = m_checkeditems.length;
+ Bundle data = new Bundle();
+ data.putString ("showstr", hanlemsg);
+ endmsg.setData (data);
+ m_handler.sendMessageDelayed (endmsg, 2000); //add a delay, for systeme need time to release cache.
}
- else {
- Log.e (TAG, "got a null apkinfo, this is strange!");
+ }
+ if (actionid == 0) {
+ boolean hasSpace = checkFreeSpace ("/data/app") > 50;
+ if (!hasSpace) {
+ Log.w (TAG, "no enough space for installation, force stop!");
+ Message endmsg = Message.obtain();
+ endmsg.what = HANDLE_PKG_FAIL;
+ Bundle data = new Bundle();
+ data.putString ("showstr", getResources().getString (R.string.no_space));
+ endmsg.setData (data);
+ m_handler.sendMessage (endmsg);
+ sendEndMsg();
+ m_bOpEnd = true;
+ m_thread.quit();
+ return ;
}
+ install_apk_slient (actionpara);
}
+ else {
+ uninstall_apk_slient (actionpara);
+ }
+ Log.d (TAG, "install a singel apk end");
+ }
+ else {
+ Log.e (TAG, "got a null apkinfo, this is strange!");
+ }
}
+ }
}
public void startHandleOp() {
@@ -886,172 +817,127 @@ public class main extends Activity {
}
class ScanOperation extends OperationThread {
- protected scanthread m_thread;
- ScanOperation() {
- //super();
- m_iOp = SCAN_APKS;
- }
- public void start() { //overide it to new and start a thread
- super.start();
- m_thread = new scanthread();
- m_thread.start();
+ protected scanthread m_thread;
+ ScanOperation() {
+ //super();
+ m_iOp = SCAN_APKS;
+ }
+ public void start() { //overide it to new and start a thread
+ super.start();
+ m_thread = new scanthread();
+ m_thread.start();
+ }
+
+ class scanthread extends Thread {
+ public void run() {
+ if (mScanRoot != null) {
+ scandir (mScanRoot);
+ }
+
+ synchronized (m_syncobj) {
+ sendEndMsg();
+ m_bOpEnd = true;
+ }
}
- class scanthread extends Thread {
- public void run() {
- if (mScanRoot != null) {
- scandir (mScanRoot);
+ protected void scandir (String directory) {
+ mApkList.clear();
+ int dirs = 0, apks = 0;
+ //to scan dirs
+ ArrayList<String> pdirlist = new ArrayList<String>();
+ List<Map<String, Object>> files;
+ pdirlist.add (directory);
+ while (pdirlist.isEmpty() == false) {
+ String dirstr = pdirlist.get(0);
+ synchronized (m_syncobj) {
+ if (m_bstop == true) {
+ break;
}
-
- synchronized (m_syncobj) {
- sendEndMsg();
- m_bOpEnd = true;
+ dirs++;
+ if (m_handler != null) {
+ Message dirmsg = Message.obtain();
+ dirmsg.what = NEW_APK;
+ dirmsg.arg1 = dirs;
+ dirmsg.arg2 = apks;
+ dirmsg.obj = dirstr;
+ m_handler.sendMessage (dirmsg);
}
}
-
- /*class APKFileter implements FileFilter {
- public boolean accept (File dir) {
- if (dir.isDirectory() == true) {
- return true;
- }
- String filename = dir.getName();
- String filenamelowercase = filename.toLowerCase();
- return filenamelowercase.endsWith (".apk");
- }
- }*/
-
- class APKFileter implements FileFilter {
- public boolean accept (File arg0) {
- if (arg0.isDirectory() == true) {
- return true;
- }
- String filename = arg0.getName();
- String filenamelowercase = filename.toLowerCase();
- return filenamelowercase.endsWith (".apk");
- }
- }
-
- protected void scandir (String directory) {
- mApkList.clear();
- int dirs = 0, apks = 0;
- //to scan dirs
- ArrayList<String> pdirlist = new ArrayList<String>();
- pdirlist.add (directory);
- while (pdirlist.isEmpty() == false) {
- String dirstr = pdirlist.get(0);
- synchronized (m_syncobj) {
- if (m_bstop == true) {
- break;
- }
- dirs++;
- if (m_handler != null) {
- Message dirmsg = Message.obtain();
- dirmsg.what = NEW_APK;
- dirmsg.arg1 = dirs;
- dirmsg.arg2 = apks;
- dirmsg.obj = dirstr;
- m_handler.sendMessage (dirmsg);
- }
- }
- String headpath = pdirlist.remove (0);
- File pfile = new File (headpath);
- if (pfile.exists() == true) {
- //list files and dirs in this directory
- File[] files = pfile.listFiles (new APKFileter());
- if (files != null && (files.length > 0)) {
- int i = 0;
- for (; i < files.length; i++) {
- //shield /sdcard/external_sdcard if select /sdcard to search with virtaul external_sdcard
- String str = null;
- str = files[i].toString();
- if (str.compareTo (SHEILD_EXT_STOR) == 0) {
- continue;
- }
- synchronized (m_syncobj) {
- if (m_bstop == true) {
- break;
- }
- }
- File pcurfile = files[i];
- if (pcurfile.isDirectory()) {
- pdirlist.add (pcurfile.getAbsolutePath());
- }
- else {
- APKInfo apkinfo = new APKInfo (main.this, pcurfile.getAbsolutePath());
- if (apkinfo.beValid() == true) {
- mApkList.add (apkinfo);
- apks++;
- synchronized (m_syncobj) {
- if (m_handler != null) {
- Message apkmsg = Message.obtain();
- apkmsg.what = NEW_APK;
- apkmsg.arg1 = dirs;
- apkmsg.arg2 = apks;
- apkmsg.obj = dirstr;
- m_handler.sendMessage (apkmsg);
- }
- }
- }
- }
+ String headpath = pdirlist.remove (0);
+ File pfile = new File (headpath);
+ if (pfile.exists() == true) {
+ files = mFileListManager.getDirs(headpath, ".apk");
+ for (int i = 0; i < files.size(); i++) {
+ Map<String, Object> map = files.get(i);
+ String value = map.get(KEY_PATH).toString();
+ if (!value.endsWith(".apk")) {
+ pdirlist.add(value);
+ } else {
+ APKInfo apkinfo = new APKInfo (main.this, value);
+ mApkList.add(apkinfo);
+ apks++;
+ synchronized (m_syncobj) {
+ if (m_handler != null) {
+ Message apkmsg = Message.obtain();
+ apkmsg.what = NEW_APK;
+ apkmsg.arg1 = dirs;
+ apkmsg.arg2 = apks;
+ apkmsg.obj = dirstr;
+ m_handler.sendMessage (apkmsg);
}
}
}
}
}
+ }
}
- };
-
- protected void showScanDiag (int dirs, int apks, Object obj) {
- String msg = getResources().getString (R.string.scanning);
- String path = (String)obj;
- //msg += "dir : " + String.valueOf (dirs) + ", path:" + path + "\n";
- msg += "dir:" + path + "\n";
- msg += "apk : " + String.valueOf (apks) + "\n";
- mScanDiag.setMessage (msg);
- // mScanDiag.show();
- }
-
-
-
- private void showDialogInner (int id) {
- // TODO better fix for this? Remove dialog so that it gets created again
- removeDialog (id);
- showDialog (id);
- }
-
- @Override
- public Dialog onCreateDialog (int id, Bundle bundle) {
- switch (id) {
- case DLG_UNKNOWN_APPS:
- return new AlertDialog.Builder (this)
- .setTitle (R.string.unknown_apps_dlg_title)
- .setMessage (R.string.unknown_apps_dlg_text)
- .setNegativeButton (R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick (DialogInterface dialog, int which) {
- }
- })
- .setPositiveButton (R.string.settings, new DialogInterface.OnClickListener() {
- public void onClick (DialogInterface dialog, int which) {
- launchSettingsAppAndFinish();
- }
- }) .create();
}
- return null;
- }
-
- private void launchSettingsAppAndFinish() {
- //Create an intent to launch SettingsTwo activity
- Intent launchSettingsIntent = new Intent (Settings.ACTION_SECURITY_SETTINGS);
- startActivity (launchSettingsIntent);
- }
+ };
- private boolean isInstallingUnknownAppsAllowed() {
- return Settings.Secure.getInt (getContentResolver(),
- Settings.Secure.INSTALL_NON_MARKET_APPS, 0) > 0;
+ protected void showScanDiag (int dirs, int apks, Object obj) {
+ String msg = getResources().getString (R.string.scanning);
+ String path = (String)obj;
+ //msg += "dir : " + String.valueOf (dirs) + ", path:" + path + "\n";
+ msg += "dir:" + path + "\n";
+ msg += "apk : " + String.valueOf (apks) + "\n";
+ mScanDiag.setMessage (msg);
+ // mScanDiag.show();
+ }
+
+ private void showDialogInner (int id) {
+ // TODO better fix for this? Remove dialog so that it gets created again
+ removeDialog (id);
+ showDialog (id);
+ }
+
+ @Override
+ public Dialog onCreateDialog (int id, Bundle bundle) {
+ switch (id) {
+ case DLG_UNKNOWN_APPS:
+ return new AlertDialog.Builder (this)
+ .setTitle (R.string.unknown_apps_dlg_title)
+ .setMessage (R.string.unknown_apps_dlg_text)
+ .setNegativeButton (R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick (DialogInterface dialog, int which) {
+ }
+ })
+ .setPositiveButton (R.string.settings, new DialogInterface.OnClickListener() {
+ public void onClick (DialogInterface dialog, int which) {
+ launchSettingsAppAndFinish();
+ }
+ }) .create();
}
-
+ return null;
+ }
+
+ private void launchSettingsAppAndFinish() {
+ //Create an intent to launch SettingsTwo activity
+ Intent launchSettingsIntent = new Intent (Settings.ACTION_SECURITY_SETTINGS);
+ startActivity (launchSettingsIntent);
+ }
+
+ private boolean isInstallingUnknownAppsAllowed() {
+ return Settings.Secure.getInt (getContentResolver(),
+ Settings.Secure.INSTALL_NON_MARKET_APPS, 0) > 0;
+ }
}
-
-
-
-