Android Open Source - UltraExplorer Backup Manager






From Project

Back to project page UltraExplorer.

License

The source code is released under:

GNU General Public License

If you think the Android project UltraExplorer listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.mirrorlabs.filebrowser;
//from w w w .j av a 2s  . co  m





import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;



import android.app.AlertDialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.os.Debug;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.CompoundButton.OnCheckedChangeListener;

import com.markupartist.android.widget.ActionBar;
import com.markupartist.android.widget.ActionBar.IntentAction;
import com.mirrorlabs.filebrowser.FilebrowserULTRAActivity.Fonts;
import com.mirrorlabs.menupopup.MenuItem;
import com.mirrorlabs.menupopup.PopupMenu;
import com.mirrorlabs.menupopup.PopupMenu.OnItemSelectedListener;

import com.mirrorlabs.quickaction.ActionItem;
import com.mirrorlabs.quickaction.QuickAction;




public class BackupManager extends ListActivity {
  
    private static final String STAR_STATES = "mylist:star_states";
    private boolean[] mStarStates=null;

  private static String BACKUP_LOC;
  private static final int SET_PROGRESS = 0x00;
  private static final int FINISH_PROGRESS = 0x01;
  private static final int FLAG_UPDATED_SYS_APP = 0x80;
  private static final String[] Q = new String[]{"B", "KB", "MB", "GB", "TB", "PB", "EB"};

  
  private static ArrayList<ApplicationInfo> mAppList=null;
  private static TextView mAppLabel=null;
  private static ListView mylist=null;
  private static PackageManager mPackMag=null;
  private static ProgressDialog mDialog=null;
  private static PackageInfo  appinfo=null;
  private static ApplicationInfo  apkinfo=null;
  
  private static final int ID_LAUNCH = 1;
  private static final int ID_MANAGE = 2;
  private static final int ID_UNINSTALL = 3;
  private static final int ID_BACKUP = 4;
  private static final int ID_SEND = 5;
  private static final int ID_MARKET = 6;
  private static final int ID_SHORTCUT=7;
  
  private static final String root =Environment.getExternalStorageDirectory().getPath();
  private static ArrayList<ApplicationInfo> multiSelectData=null;



  
  /*
   * Our handler object that will update the GUI from 
   * our background thread. 
   */
  private Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
      
      switch(msg.what) {
        case SET_PROGRESS:
          mDialog.setMessage((String)msg.obj);
          break;
        case FINISH_PROGRESS:
          mDialog.cancel();
          Toast.makeText(BackupManager.this, 
                   "Applications have been backed up", 
                   Toast.LENGTH_SHORT).show();
          break;
      }
    }
  };

  @Override
  protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
        SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
        BACKUP_LOC = getPrefs.getString("backupFolder",root+"/Backup/");
    
    initializeDrawbale();
    setContentView(R.layout.appbackup_layout);
    
        //Toast.makeText(BackupManager.this," allocated size  = " + getAsString(Debug.getNativeHeapAllocatedSize()), 1).show();      
    
    
    mAppLabel = (TextView)findViewById(R.id.backup_label);
        mAppLabel.setTypeface(Fonts.ICS);
        
    Button backup_button = (Button)findViewById(R.id.backup_button_all);
      backup_button.setTypeface(Fonts.ICS);
    Button cancel_button = (Button)findViewById(R.id.cancel_button);
    cancel_button.setTypeface(Fonts.ICS);
    
    Button select_button =(Button)findViewById(R.id.selectButton);

    
       
    
    mAppList = new ArrayList<ApplicationInfo>();
    multiSelectData = new ArrayList<ApplicationInfo>();

    mPackMag = getPackageManager();
    
    
    
        //setup ActionBar
     final ActionBar actionBar = (ActionBar) findViewById(R.id.actionbar);
           actionBar.setTitle("Application Manager");
           actionBar.setHomeAction(new IntentAction(this, FilebrowserULTRAActivity.createIntent(this), R.drawable.ic_title_home_default));
           actionBar.setDisplayHomeAsUpEnabled(true);
         
          final AsyncTask loadAppsTask = new AsyncTask<String[], Long, Long>(){
         
          @Override
          protected Long doInBackground(String[]... params) {
            get_downloaded_apps();
            return null;
          }
          protected void onPreExecute() {
              
               actionBar.setProgressBarVisibility(View.VISIBLE);
               mAppLabel.setText("Listing Apps...");  
          }
          @Override
          protected void onProgressUpdate(Long... updatedSize){
            
          }
          
          @Override
          protected void onPostExecute(Long result){
            
            actionBar.setProgressBarVisibility(View.GONE);
             
             setListAdapter(new TableView());
             
             if (savedInstanceState != null) {
                      mStarStates = savedInstanceState.getBooleanArray(STAR_STATES);
                  } else {
                      mStarStates = new boolean[mAppList.size()];
                  }
             mAppLabel.setText("You have " +mAppList.size() + " downloaded apps");
            
          }

          
          
          
         }.execute();
          
          
          
          
          mylist = getListView();
          mylist.setFastScrollEnabled(true);
          mylist.setOnItemLongClickListener(new OnItemLongClickListener() {
                 
          
        public boolean onItemLongClick(AdapterView<?> av, View v,
            final int position , long id) {
          // TODO Auto-generated method stub
          multiSelectData.clear();
              for(int i=0;i<mAppList.size();i++){
                if(mStarStates[i]){
                  multiSelectData.add(mAppList.get(i));
                }
                else if(!mStarStates[i]){
                  multiSelectData.remove(mAppList.get(i));
                }
              }
              getoptions(position,v);
            return false;
        } 
        });   
  }
  
  @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBooleanArray(STAR_STATES, mStarStates);
    }
  
   @Override
      public boolean onKeyDown(int keyCode, KeyEvent event) {
         
           
          
         if ((keyCode == KeyEvent.KEYCODE_BACK)){ //Back key pressed
                    
               initializequit();
               finish();
                  return true;
          }
         
         
         
          return super.onKeyDown(keyCode, event);
      }
      
   
  public void getOperations(final ApplicationInfo appinfo){
    final CharSequence[] multioperations = {"Backup","Send","Uninstall"};
    final CharSequence[] operations = {"Launch","Manage","Backup","Send","Uninstall","Market Link"};
        
        AlertDialog.Builder builder = new AlertDialog.Builder(BackupManager.this);
        

      if(multiSelectData.size()>0 & multiSelectData!=null){
        builder.setTitle("Selected " +multiSelectData.size()+" items");
         builder.setItems(multioperations, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dInterface, int item) {
                  
                  switch(item){
                  case 0 :
                    mDialog = ProgressDialog.show(BackupManager.this, 
                    "Backing up applications",
                    "", true, false);

                     Thread all = new Thread(new BackgroundWork(multiSelectData));
                      all.start();
                    
                    break;
                  case 1:
                    
                    ArrayList<Uri> uris = new ArrayList<Uri>();
                     int length = multiSelectData.size();
                     Intent send_intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
                     send_intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

                       send_intent.setType("image/jpeg");
                       for(int j = 0; j < length; j++) {
                         
                         File file = new File( multiSelectData.get(j).sourceDir).getAbsoluteFile();
                         uris.add(Uri.fromFile(file));
                       }
                       send_intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
                            startActivity(Intent.createChooser(send_intent, "Send via.."));
                            
                            
                    
                    break;
                  case 2:
                    
                    int length1 = multiSelectData.size();
                     Intent delete_intent = new Intent(Intent.ACTION_DELETE);

                       for(int j = 0; j < length1; j++) {
                         delete_intent.setData(Uri.parse("package:"+multiSelectData.get(j).packageName));
                    startActivity(delete_intent);
                       }
                     refreshList();

                    break;
                  }
                }
         }); 
          AlertDialog alert = builder.create();
            
            alert.show();
      }
      else{


      final String appname = appinfo.loadLabel(mPackMag).toString();
        builder.setTitle(appname);
        builder.setIcon(getAppIcon(appinfo.packageName));
         builder.setItems(operations, new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dInterface, int item) {
                 
                 switch(item){
                 case 0 :
                   Intent i = mPackMag.getLaunchIntentForPackage(appinfo.packageName);
            startActivity(i);
                  
                   break;
                 case 1:
                   final int apiLevel = Build.VERSION.SDK_INT;
            Intent intent = new Intent();
            if (apiLevel >= 9) {
                //TODO get working on gb
                //Toast.makeText(SDMove.this, "Gingerbread Not Currently Supported", Toast.LENGTH_LONG).show();
                startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
                                         Uri.parse("package:" + appinfo.packageName)));
            } else {
                final String appPkgName = (apiLevel == 8 ? "pkg" : "com.android.settings.ApplicationPkgName");
                intent.setAction(Intent.ACTION_VIEW);
                intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
                intent.putExtra(appPkgName, appinfo.packageName);
                startActivity(intent);
            }
                
                   break;
                 case 2:
                   backupApp(appinfo.packageName);
            Toast.makeText(BackupManager.this, "Backup complete", Toast.LENGTH_SHORT).show();
                   
                   break;
                 case 3:
                   try{
              ApplicationInfo info = mPackMag.getApplicationInfo(appinfo.packageName, 0);
              String source_dir = info.sourceDir;
              File file = new File(source_dir);  
              Uri uri11 = Uri.fromFile(file.getAbsoluteFile());
              
                Intent infointent = new Intent(Intent.ACTION_SEND);
                  
                  infointent.setType("application/zip");
                  infointent.putExtra(Intent.EXTRA_STREAM, uri11);
                startActivity(Intent.createChooser(infointent, "Send"));
              }catch (Exception e) {
                // TODO: handle exception
                
                Toast.makeText(BackupManager.this, "unable to send !", Toast.LENGTH_SHORT).show();
              } 
                   break;
                 case 4:
                   Intent i1 = new Intent(Intent.ACTION_DELETE);
            i1.setData(Uri.parse("package:"+appinfo.packageName));
            startActivity(i1);
            refreshList();

            break;
                 case 5:
                   Intent intent1 = new Intent(Intent.ACTION_VIEW);
                     intent1.setData(Uri.parse("market://details?id="+appinfo.packageName));
                     startActivity(intent1);
                   
                   break;
                 }
               }
         }); 
          AlertDialog alert = builder.create();
            
          alert.show();
       
      }
        
  }
  
  public void getoptions(final int position,View view){
    
    final ApplicationInfo info = mAppList.get(position);
    final String appname = info.loadLabel(mPackMag).toString();
      PopupMenu menu = new PopupMenu(BackupManager.this);
      
      if(multiSelectData.size()>0 & multiSelectData!=null){
         menu.setHeaderTitle(multiSelectData.size() + " apps selected");
      }
      else{
        menu.setHeaderTitle(appname);
        
    menu.setHeaderIcon(getAppIcon(info.packageName));
      }
  
        // Set Listener
        menu.setOnItemSelectedListener(new OnItemSelectedListener() {
      
      public void onItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
         switch (item.getItemId()) {
              case ID_LAUNCH:
                Intent i = mPackMag.getLaunchIntentForPackage(mAppList.get(position).packageName);
            startActivity(i);
                  break;

              case ID_BACKUP:
                if(multiSelectData.size()>0 && multiSelectData!=null){
                mDialog = ProgressDialog.show(BackupManager.this, 
                  "Backing up applications",
                  "", true, false);

                  Thread all = new Thread(new BackgroundWork(multiSelectData));
                  all.start();
                }else{
                
                backupApp(mAppList.get(position).packageName);
            Toast.makeText(BackupManager.this, "Backup complete", Toast.LENGTH_SHORT).show();
                }
                  break;
              case ID_SHORTCUT:
                   

                break;
              case ID_MANAGE:
                final int apiLevel = Build.VERSION.SDK_INT;
            Intent intent = new Intent();
            if (apiLevel >= 9) {
                //TODO get working on gb
                //Toast.makeText(SDMove.this, "Gingerbread Not Currently Supported", Toast.LENGTH_LONG).show();
                startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
                                         Uri.parse("package:" + mAppList.get(position).packageName)));
            } else {
                final String appPkgName = (apiLevel == 8 ? "pkg" : "com.android.settings.ApplicationPkgName");
                intent.setAction(Intent.ACTION_VIEW);
                intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
                intent.putExtra(appPkgName, mAppList.get(position).packageName);
                startActivity(intent);
            }
            
                  break;
              case ID_UNINSTALL:
                if(multiSelectData.size()>0 && multiSelectData!=null){
                     int length = multiSelectData.size();
                     Intent delete_intent = new Intent(Intent.ACTION_DELETE);

                       for(int j = 0; j < length; j++) {
                         delete_intent.setData(Uri.parse("package:"+multiSelectData.get(j).packageName));
                    startActivity(delete_intent);
                         
                       }
                       
                }else{
                Intent i1 = new Intent(Intent.ACTION_DELETE);
            i1.setData(Uri.parse("package:"+mAppList.get(position).packageName));
            startActivity(i1);
                }
                
            
                        
                break;
              case ID_MARKET:
                if(multiSelectData.size()>0 &&multiSelectData!=null){
                  
                  int length = multiSelectData.size();
                  Intent intent1 = new Intent(Intent.ACTION_VIEW);
                       for(int j = 0; j < length; j++) {
                         
                            intent1.setData(Uri.parse("market://details?id="+multiSelectData.get(j).packageName));
                            startActivity(intent1);
                       }
                }
                else{
                 Intent intent1 = new Intent(Intent.ACTION_VIEW);
                     intent1.setData(Uri.parse("market://details?id="+mAppList.get(position).packageName));
                     startActivity(intent1);
                }
                break;
              case ID_SEND:
                
                if(multiSelectData.size()>0 && multiSelectData!=null){
                  
                  ArrayList<Uri> uris = new ArrayList<Uri>();
                     int length = multiSelectData.size();
                     Intent send_intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
                     send_intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

                       send_intent.setType("image/jpeg");
                       for(int j = 0; j < length; j++) {
                         
                         File file = new File( multiSelectData.get(j).sourceDir).getAbsoluteFile();
                         uris.add(Uri.fromFile(file));
                       }
                       send_intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
                            startActivity(Intent.createChooser(send_intent, "Send via.."));
                  
                }
                else{
                try{
              ApplicationInfo info = mPackMag.getApplicationInfo(mAppList.get(position).packageName, 0);
              String source_dir = info.sourceDir;
              File file = new File(source_dir);  
              Uri uri11 = Uri.fromFile(file.getAbsoluteFile());
              
                Intent infointent = new Intent(Intent.ACTION_SEND);
                  
                  infointent.setType("application/zip");
                  infointent.putExtra(Intent.EXTRA_STREAM, uri11);
                startActivity(Intent.createChooser(infointent, "Send"));
              }catch (Exception e) {
                // TODO: handle exception
                
                Toast.makeText(BackupManager.this, "unable to send !", Toast.LENGTH_SHORT).show();
              } 
                }
                
                break;

              }
      }
    });
        // Add Menu (Android menu like style)
        if(multiSelectData.size()>0 && multiSelectData!=null){
          
          menu.add(ID_BACKUP, R.string.backup).setIcon(
                    getResources().getDrawable(R.drawable.backup1));
            menu.add(ID_SEND, R.string.send).setIcon(
                    getResources().getDrawable(R.drawable.upload48));
            menu.add(ID_UNINSTALL, R.string.uninstall).setIcon(
                    getResources().getDrawable(R.drawable.uninstall));
            menu.add(ID_MARKET, R.string.market).setIcon(
                    getResources().getDrawable(R.drawable.market_48));
            
            menu.show(view);
          
        }
        else{
        menu.add(ID_LAUNCH, R.string.launch).setIcon(
                getResources().getDrawable(R.drawable.install));
        menu.add(ID_MANAGE, R.string.manage).setIcon(
                getResources().getDrawable(R.drawable.advancedsettings));
        menu.add(ID_BACKUP, R.string.backup).setIcon(
                getResources().getDrawable(R.drawable.backup1));
        menu.add(ID_SEND, R.string.send).setIcon(
                getResources().getDrawable(R.drawable.upload48));
        menu.add(ID_UNINSTALL, R.string.uninstall).setIcon(
                getResources().getDrawable(R.drawable.uninstall));
        menu.add(ID_MARKET, R.string.market).setIcon(
                getResources().getDrawable(R.drawable.market_48));
       
        
        menu.show(view);
        }
  }
  
  
   @SuppressWarnings("unused")
  private Intent createShareIntent() {
          final Intent intent = new Intent(Intent.ACTION_SEND);
          intent.setType("text/plain");
          intent.putExtra(Intent.EXTRA_TEXT, "Shared from the ActionBar widget.");
          return Intent.createChooser(intent, "Share");
      }

  
  
  @Override
    protected void onPause() {
      
          super.onPause();
          
          
               
    }
  
  @Override
     protected void onStop() {
           super.onStop();
           
           
           }
    
   @Override
       protected void onDestroy() {
            finish();

             super.onDestroy();
             System.gc();
           
             }
      
      @Override
    protected void onResume() {
      
      super.onResume();
      
    
    }
      
      
     public void refreshList(){
       mAppList.clear();
       get_downloaded_apps();
       setListAdapter(new TableView());
       
     }
     
  
  public void onClick(View view){
    switch (view.getId()) {
    case R.id.cancel_button :
      finish();
      break;
    case R.id.selectButton:
          Button superButton = (Button)findViewById(R.id.selectButton);

      if(superButton.getText().toString().equals("Select all")){
      for (int i = 0 ; i <mAppList.size()  ;i ++){
        mStarStates[i]=true;
        multiSelectData.add(mAppList.get(i));
        
      }
      refreshList();
      superButton.setText("Unselect");
      }else{
        
        for (int i = 0 ; i < mAppList.size() ;i ++){
            mStarStates[i]=false;
            multiSelectData.remove(mAppList.get(i));


          }
        refreshList();
         superButton.setText("Select all");

        
      }
      

      break;

    case R.id.backup_button_all:
    /*  mDialog = ProgressDialog.show(BackupManager.this, 
            "Backing up applications",
            "", true, false);

            Thread all = new Thread(new BackgroundWork(mAppList));
            all.start();*/
      multiSelectData.clear();
        for(int i=0;i<mAppList.size();i++){
          if(mStarStates[i]){
            multiSelectData.add(mAppList.get(i));
          }
          else if(!mStarStates[i]){
            multiSelectData.remove(mAppList.get(i));
          }
        }
      if(multiSelectData.size()>0 && multiSelectData!=null){
            mDialog = ProgressDialog.show(BackupManager.this, 
              "Backing up applications",
              "", true, false);

              Thread all = new Thread(new BackgroundWork(multiSelectData));
              all.start();
            }else{
            Toast.makeText(BackupManager.this, "No Apps Selected !", Toast.LENGTH_SHORT).show();
            }
      break;
    }
  }
  
   @Override
      protected void onListItemClick(ListView l, View v, final int position, long id){
       ActionItem addItem     = new ActionItem(ID_LAUNCH, "Launch", getResources().getDrawable(R.drawable.install));
      ActionItem acceptItem   = new ActionItem(ID_MANAGE, "Manage", getResources().getDrawable(R.drawable.advancedsettings));
          ActionItem uninstallItem   = new ActionItem(ID_UNINSTALL, "Uninstall", getResources().getDrawable(R.drawable.uninstall));
          ActionItem sendItem   = new ActionItem(ID_SEND, "Send", getResources().getDrawable(R.drawable.upload48));
          ActionItem backupItem   = new ActionItem(ID_BACKUP, "Backup", getResources().getDrawable(R.drawable.backup1));
          ActionItem marketItem   = new ActionItem(ID_MARKET, "Market link", getResources().getDrawable(R.drawable.market_48));
   
           
         
          final QuickAction mQuickAction   = new QuickAction(this);
      
      mQuickAction.addActionItem(addItem);
      mQuickAction.addActionItem(acceptItem);
      mQuickAction.addActionItem(uninstallItem);
      mQuickAction.addActionItem(backupItem);
      mQuickAction.addActionItem(sendItem);
      mQuickAction.addActionItem(marketItem);

      
      
      mQuickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
        public void onItemClick(QuickAction quickAction, int pos, int actionId) {
          @SuppressWarnings("unused")
          ActionItem actionItem = quickAction.getActionItem(pos);
          
          if (actionId == ID_LAUNCH) {
            Intent i = mPackMag.getLaunchIntentForPackage(mAppList.get(position).packageName);
            startActivity(i);
            
                   } else if(actionId==ID_UNINSTALL){
            Intent i = new Intent(Intent.ACTION_DELETE);
            i.setData(Uri.parse("package:"+mAppList.get(position).packageName));
            startActivity(i);
            refreshList();

            
            
                    }
                   else if(actionId==ID_MARKET){
                     Intent intent = new Intent(Intent.ACTION_VIEW);
                     intent.setData(Uri.parse("market://details?id="+mAppList.get(position).packageName));
                     startActivity(intent);
                   }
          else if(actionId==ID_MANAGE)
          {
            final int apiLevel = Build.VERSION.SDK_INT;
            Intent intent = new Intent();
            if (apiLevel >= 9) {
                //TODO get working on gb
                //Toast.makeText(SDMove.this, "Gingerbread Not Currently Supported", Toast.LENGTH_LONG).show();
                startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
                                         Uri.parse("package:" + mAppList.get(position).packageName)));
            } else {
                final String appPkgName = (apiLevel == 8 ? "pkg" : "com.android.settings.ApplicationPkgName");
                intent.setAction(Intent.ACTION_VIEW);
                intent.setClassName("com.android.settings", "com.android.settings.InstalledAppDetails");
                intent.putExtra(appPkgName, mAppList.get(position).packageName);
                startActivity(intent);
            }
            
            refreshList();

          }
          
          else if(actionId==ID_BACKUP){
            
            backupApp(mAppList.get(position).packageName);
            Toast.makeText(BackupManager.this, "Backup complete", Toast.LENGTH_SHORT).show();
          }
          else if (actionId==ID_SEND){
            
            
            
            try{
            ApplicationInfo info = mPackMag.getApplicationInfo(mAppList.get(position).packageName, 0);
            String source_dir = info.sourceDir;
            File file = new File(source_dir);  
            Uri uri11 = Uri.fromFile(file.getAbsoluteFile());
            
              Intent i1 = new Intent(Intent.ACTION_SEND);
                
                i1.setType("application/zip");
                i1.putExtra(Intent.EXTRA_STREAM, uri11);
              startActivity(Intent.createChooser(i1, "Send"));
            }catch (Exception e) {
              // TODO: handle exception
              
              Toast.makeText(BackupManager.this, "backup doesn't exist !", Toast.LENGTH_SHORT).show();
            } 
          }
          
        }
      });
      
      mQuickAction.setOnDismissListener(new QuickAction.OnDismissListener() {
        public void onDismiss() {
          
        }
      });
       mQuickAction.show(v); 
     
   }
   
   
  private void backupApp(String pkgname){
    
    try {
         ApplicationInfo info = mPackMag.getApplicationInfo(pkgname, 0);
         String source_dir = info.sourceDir;
         
    
         String out_file = info.loadLabel(mPackMag).toString()+".apk";
         BufferedInputStream mBuffIn;
         BufferedOutputStream mBuffOut;
      
         int read = 0;
         File mDir = new File(BACKUP_LOC);
         byte[] mData;
      
         final int BUFFER = 256;
         mData =  new byte[BUFFER];
      
      /*create dir if needed*/
        File d = new File(BACKUP_LOC);
        if(!d.exists()) {
        d.mkdir();
        
        //then create this directory
        mDir.mkdir();
        
        } else {
        if(!mDir.exists())
          mDir.mkdir();
        }
      
      try {
        mBuffIn = new BufferedInputStream(new FileInputStream(source_dir));
        mBuffOut = new BufferedOutputStream(new FileOutputStream(BACKUP_LOC + out_file));
        
        while((read = mBuffIn.read(mData, 0, BUFFER)) != -1)
          mBuffOut.write(mData, 0, read);
        
        mBuffOut.flush();
        mBuffIn.close();
        mBuffOut.close();
        
          
      } catch (FileNotFoundException e) {
        e.printStackTrace();
        Toast.makeText(BackupManager.this, "Unable to backup", Toast.LENGTH_SHORT).show();
      } catch (IOException e) {
        e.printStackTrace();
        Toast.makeText(BackupManager.this, "Unable to backup", Toast.LENGTH_SHORT).show();
      }
    

    } catch (NameNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      Toast.makeText(BackupManager.this, "Unable to backup", Toast.LENGTH_SHORT).show();
    }
    
    
  }
   
  
   
   
  private void get_downloaded_apps() {
    List<ApplicationInfo> all_apps = mPackMag.getInstalledApplications(
                      PackageManager.GET_UNINSTALLED_PACKAGES);
    
    for(ApplicationInfo appInfo : all_apps) {
      if((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0 && 
         (appInfo.flags & FLAG_UPDATED_SYS_APP) == 0 && 
         appInfo.flags != 0)
        
        mAppList.add(appInfo);
          
    }
    
    
  }


  /*
   * This private inner class will perform the backup of applications
   * on a background thread, while updating the user via a message being
   * sent to our handler object.
   */
  private class BackgroundWork implements Runnable {
    private static final int BUFFER = 256;
    
    private ArrayList<ApplicationInfo> mDataSource;
    private File mDir = new File(BACKUP_LOC);
    private byte[] mData;
    
    public BackgroundWork(ArrayList<ApplicationInfo> data)  {
      mDataSource = data;
      mData =  new byte[BUFFER];
            
      /*create dir if needed*/
      File d = new File(BACKUP_LOC);
      if(!d.exists()) {
        d.mkdir();
        
        //then create this directory
        mDir.mkdir();
        
      } else {
        if(!mDir.exists())
          mDir.mkdir();
      }
    }

    public void run() {
      BufferedInputStream mBuffIn;
      BufferedOutputStream mBuffOut;
      Message msg;
      int len = mDataSource.size();
      int read = 0;
      
      
      for(int i = 0; i < len; i++) {
        ApplicationInfo info = mDataSource.get(i);
        String source_dir = info.sourceDir;
        String out_file = info.loadLabel(mPackMag).toString()+".apk";
        try {
          mBuffIn = new BufferedInputStream(new FileInputStream(source_dir));
          mBuffOut = new BufferedOutputStream(new FileOutputStream(BACKUP_LOC + out_file));
          
          while((read = mBuffIn.read(mData, 0, BUFFER)) != -1)
            mBuffOut.write(mData, 0, read);
          
          mBuffOut.flush();
          mBuffIn.close();
          mBuffOut.close();
          
          msg = new Message();
          msg.what = SET_PROGRESS;
          msg.obj = i + " out of " + len + " apps backed up";
          mHandler.sendMessage(msg);
          
        } catch (FileNotFoundException e) {
          e.printStackTrace();
        } catch (IOException e) {
          e.printStackTrace();
        }
        if(quit.mback==-1)
          break;
        
      
      }
      
      
      mHandler.sendEmptyMessage(FINISH_PROGRESS);
    }
  }
  
  
  
  
  
  
       
        
        public String getAsString(long bytes)
        {
            for (int i = 6; i > 0; i--)
            {
                double step = Math.pow(1024, i);
                if (bytes > step) return String.format("%3.1f %s", bytes / step, Q[i]);
            }
            return Long.toString(bytes);
        }
        
        class ViewHolder {
        public ImageView image=null;
        public CheckBox select=null;
        public TextView name=null;
        public TextView version =null;
        public TextView size=null;
           ViewHolder(View row){
             name = (TextView)row.findViewById(R.id.app_name);
             select =(CheckBox)row.findViewById(R.id.select_icon);
               name.setTypeface(Fonts.ICS);
               version = (TextView)row.findViewById(R.id.version);
               version.setTypeface(Fonts.ICS);
               size = (TextView)row.findViewById(R.id.installdate);
               size.setTypeface(Fonts.ICS);
               image = (ImageView)row.findViewById(R.id.icon);
           
           }
           void populateFrom(String s)
           {
           name.setText(s);
           }
       
     }   
  
  private  class  TableView extends ArrayAdapter<ApplicationInfo> {
    
    private TableView() {
      super(BackupManager.this, R.layout.app_row, mAppList);
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      ViewHolder holder;
      ApplicationInfo info = mAppList.get(position);
      String appname = info.loadLabel(mPackMag).toString();
      
      
      try {
          apkinfo= mPackMag.getApplicationInfo(mAppList.get(position).packageName, 0);
        
        } catch (NameNotFoundException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
      }
      
      final String source_dir = apkinfo.sourceDir;
        File  apkfile = new File(source_dir);
      final long apksize = apkfile.length();
      String apk_size =getAsString(apksize);
      
      
      
      if(convertView == null) {
        LayoutInflater inflater = getLayoutInflater();
        convertView = inflater.inflate(R.layout.app_row,null);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
        
      } else {
        holder = (ViewHolder) convertView.getTag();
      }
      
        try {
        appinfo =mPackMag.getPackageInfo(info.packageName, 0);
          
      } catch (NameNotFoundException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
      }
       
        String version=appinfo.versionName;
  
      holder.select.setOnCheckedChangeListener(null);
      holder.select.setChecked(mStarStates[position]);
            holder.select.setOnCheckedChangeListener(mStarCheckedChanceChangeListener);
       
      holder.name.setText(appname);
      holder.version.setText("version "+version);
      holder.size.setText(String.valueOf(apk_size));
      
      
      //this should not throw the exception
      
        holder.image.setImageDrawable(getAppIcon(info.packageName));
      
      return convertView;
    }
  }
        
    private OnCheckedChangeListener mStarCheckedChanceChangeListener = new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            final int position = getListView().getPositionForView(buttonView);
            if (position != ListView.INVALID_POSITION) {
                mStarStates[position] = isChecked;
            }
         }
      };
  
             
      public static class quit{
          public static int mback=0;
      }

      private void initializequit(){
          quit.mback   = -1;

      }
      
      
      public static class AppIconManager{
          private static ConcurrentHashMap<String, Drawable> cache;
          }
          
            
        private void initializeDrawbale(){
            AppIconManager.cache = new ConcurrentHashMap<String, Drawable>();  
            }

          public Drawable getDrawableFromCache(String url) {  
              if (AppIconManager.cache.containsKey(url)) {  
                  return AppIconManager.cache.get(url); 
              }  
        
              return null;  
          }  
          
          public Drawable getAppIcon(String packagename){
            Drawable drawable;
            drawable = getDrawableFromCache(packagename);
            if(drawable!=null){
              return drawable;
            }
            else{
        try {
          
          drawable = mPackMag.getApplicationIcon(packagename);
          AppIconManager.cache.put(packagename, drawable);
            
        } catch (NameNotFoundException e) {
          // TODO Auto-generated catch block
          return getResources().getDrawable(R.drawable.apk_file);
          
        }
            return drawable;
            }
          }

  
  
}




Java Source Code List

com.android.gestures.CreateGestureActivity.java
com.android.gestures.GestureBuilderActivity.java
com.android.gestures.GestureMonitorActivity.java
com.markupartist.android.widget.ActionBar.java
com.markupartist.android.widget.ScrollingTextView.java
com.mirrorlabs.customcheckboxwidget.DontPressWithParentCheckBox.java
com.mirrorlabs.customtoast.Toaster.java
com.mirrorlabs.filebrowser.BackupManager.java
com.mirrorlabs.filebrowser.BaseActivity.java
com.mirrorlabs.filebrowser.BitmapManager.java
com.mirrorlabs.filebrowser.BookmarksProvider.java
com.mirrorlabs.filebrowser.CMDProcessor.java
com.mirrorlabs.filebrowser.CompressManager.java
com.mirrorlabs.filebrowser.DesEncrypter.java
com.mirrorlabs.filebrowser.DrawableManager.java
com.mirrorlabs.filebrowser.DrawableThreadLoader.java
com.mirrorlabs.filebrowser.DuplicatesManager.java
com.mirrorlabs.filebrowser.ExtractManager.java
com.mirrorlabs.filebrowser.FileUtils.java
com.mirrorlabs.filebrowser.FilebrowserULTRAActivity.java
com.mirrorlabs.filebrowser.ImageThreadLoader.java
com.mirrorlabs.filebrowser.LinuxShell.java
com.mirrorlabs.filebrowser.MimeTypes.java
com.mirrorlabs.filebrowser.MyApplication.java
com.mirrorlabs.filebrowser.PDFViewer.java
com.mirrorlabs.filebrowser.PreferenceActivity.java
com.mirrorlabs.filebrowser.ProcessManager.java
com.mirrorlabs.filebrowser.RootUtils.java
com.mirrorlabs.filebrowser.SearchFilesDialog.java
com.mirrorlabs.filebrowser.SearchFilesWidget.java
com.mirrorlabs.filebrowser.UltraBaseAdapter.java
com.mirrorlabs.imageviewer.EclairMotionEvent.java
com.mirrorlabs.imageviewer.ExpandImage.java
com.mirrorlabs.imageviewer.TouchImageView.java
com.mirrorlabs.imageviewer.WrapMotionEvent.java
com.mirrorlabs.menupopup.MenuItem.java
com.mirrorlabs.menupopup.PopupMenu.java
com.mirrorlabs.musicplayer.DBHelper.java
com.mirrorlabs.musicplayer.PlayerActivity.java
com.mirrorlabs.quickaction3D.ActionItem.java
com.mirrorlabs.quickaction3D.PopupWindows.java
com.mirrorlabs.quickaction3D.QuickAction.java
com.mirrorlabs.quickaction.ActionItem.java
com.mirrorlabs.quickaction.PopupWindows.java
com.mirrorlabs.quickaction.QuickAction.java
com.mirrorlabs.ui.widgets.ClickableSlidingDrawer.java
com.mirrorlabs.ui.widgets.DropDownMenu.java
com.mirrorlabs.ui.widgets.IcsListPopupWindow.java
com.mirrorlabs.ui.widgets.JavaYoutubeDownloader.java
com.mirrorlabs.ui.widgets.Panel.java
com.mirrorlabs.ui.widgets.ScrollPager.java
com.mirrorlabs.ui.widgets.SlidingFrameLayout.java
com.mirrorlabs.widgets.ExampleAppWidgetProvider1.java
com.mirrorlabs.widgets.ExampleAppWidgetProvider.java
com.mirrorlabs.widgets.UpdateWidgetService1.java
com.mirrorlabs.widgets.UpdateWidgetService.java
org.zeroxlab.widget.AnimationLayout.java
org.zeroxlab.widget.MyHorizontalScrollView.java