MediaShareActivity.java :  » App » mediashareapp » com » megagoodsoftware » MediaShare » Android Open Source

Android Open Source » App » mediashareapp 
mediashareapp » com » megagoodsoftware » MediaShare » MediaShareActivity.java
package com.megagoodsoftware.MediaShare;

//import com.megagoodsoftware.MediaShare.R.layout;

import java.io.*;
import java.util.*;

import android.app.*;
import android.content.*;
import android.net.*;
import android.os.*;
import android.util.*;
import android.view.*;
import android.widget.*;

import com.megagoodsoftware.smugmug.*;
import com.megagoodsoftware.smugmug.CountingHttpEntity.*;
import com.megagoodsoftware.smugmug.exceptions.*;
import com.megagoodsoftware.smugmug.util.*;

/**
 * Activity used to display a Flickr user's photostream. This activity shows a
 * fixed number of photos at a time. The activity is invoked either by
 * LoginActivity, when the application is launched normally, or by a Home
 * shortcut, or by an Intent with the view action and a flickr://photos/nsid
 * URI.
 */
public class MediaShareActivity extends Activity {

  static final String ACTION = "com.megagoodsoftware.MediaShare.FLICKR_STREAM";

  static final String EXTRA_NOTIFICATION = "com.megagoodsoftware.MediaShare.extra_notify_id";
  static final String EXTRA_NSID = "com.megagoodsoftware.MediaShare.extra_nsid";
  static final String EXTRA_USER = "com.megagoodsoftware.MediaShare.extra_user";

  private static final String STATE_USER = "com.megagoodsoftware.MediaShare.state_user";
  private static final String STATE_PAGE = "com.megagoodsoftware.MediaShare.state_page";
  private static final String STATE_PAGE_COUNT = "com.megagoodsoftware.MediaShare.state_pagecount";

  private User mUser;
  private AsyncTask<?, ?, ?> mTask;
  private String mUsername;
  private SmugMug sm;
  private String mAlbum;
  private ProgressBar bar;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    clearNotification();

    // Try to find a user name in the saved instance state or the intent
    // that launched the activity. If no valid user NSID can be found, we
    // just close the activity.
    if (!initialize(savedInstanceState)) {
      finish();
      return;
    }

    setContentView(R.layout.screen_photostream);
    
    Intent it = new Intent(this, UploadService.class);
    it.putExtras(getIntent().getExtras());
    it.putExtra("SM_ALBUM", mAlbum);
    it.putExtra("SM_ID", mUser.getId());
    it.putExtra("SM_PASSWORD", mUser.getPassword());
    //SmugMugAccount ac = sm.getAccount();
    //it.putExtra("SM_ACCOUNT", ac);
    startService(it);
    Toast.makeText(MediaShareActivity.this,
        "Upload Initiated, Please check your Notifications", Toast.LENGTH_LONG)
        .show();

    finish();
  }

  private void uploadToSmugMug() {

    //mTask = new UploadSMPhotoTask().execute(extras);
  }

  private void clearNotification() {
    final int notification = getIntent()
        .getIntExtra(EXTRA_NOTIFICATION, -1);
    if (notification != -1) {
      NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
      manager.cancel(notification);
    }
  }

  /**
   * Starts the PhotostreamActivity for the specified user.
   * 
   * @param context
   *            The application's environment.
   * @param string
   *            The user whose photos to display with a PhotostreamActivity.
   */
  static void show(Context context, String string) {
    final Intent intent = new Intent(ACTION);

    intent.putExtras(((Activity) context).getIntent());
    intent.putExtra(SmugMugBundleHelper.EXTRA_ALBUM, string);
    context.startActivity(intent);
  }

  /**
   * Restores a previously saved state or, if missing, finds the user's NSID
   * from the intent used to start the activity.
   * 
   * @param savedInstanceState
   *            The saved state, if any.
   * 
   * @return true if a {@link com.megagoodsoftware.MediaShare.User} was found
   *         either in the saved state or the intent.
   */
  private boolean initialize(Bundle savedInstanceState) {
    User user;
    if (savedInstanceState != null) {
      user = savedInstanceState.getParcelable(STATE_USER);
      savedInstanceState.getInt(STATE_PAGE);
      savedInstanceState.getInt(STATE_PAGE_COUNT);
    } else {
            final Intent intent = getIntent();

            user = SmugMugBundleHelper.getUserFromBundle(intent);
            mAlbum = SmugMugBundleHelper.getAlbumFromBundle(intent);
    }
    mUser = user;
    return (mUser != null && mAlbum != null) || mUsername != null;
  }

  @Override
  protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    outState.putParcelable(STATE_USER, mUser);
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    if (mTask != null && mTask.getStatus() == AsyncTask.Status.RUNNING) {
      mTask.cancel(true);
    }
  }

  @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case 0: {
                ProgressDialog dialog = new ProgressDialog(this);
                dialog.setMessage("Please wait while loading...");
                dialog.setIndeterminate(true);
                dialog.setCancelable(true);
                return dialog;
            }
        }
    return null;
    }

   private boolean uploadTarget(final UploadSMPhotoTask uploadSMPhotoTask, Uri target) {
    InputStream md5is = null;
    InputStream in = null;
    try {
      final MediaShareFile file = new MediaShareFile(getContentResolver(), target);
      // need to open a separate input stream to get the md5sum
      md5is = file.openInputStream();
      in = file.openInputStream();
      System.out.println("file size = " + file.getSize());
      final ProgressBar bar = (ProgressBar) findViewById(R.id.progress);
      bar.setIndeterminate(false);
      bar.setMax(101);

      //uploadSMPhotoTask.publishProgress(new Integer(-5));
      ProgressListener listener = new ProgressListener() {
        
        @Override
        public void transferred(int num) {
          System.out.println("num = " + num);
          int percent = (int)(((float)num/file.getSize()) * 100);
          bar.setProgress(percent);
          //uploadSMPhotoTask.publishProgress(new Integer(percent));
        }
      };
      
      sm = new SmugMug(Integer.parseInt(mUser.getId()), mUser
          .getPassword());
      Log.i(Constants.TAG, sm.getAccount().toString()); 

      sm.upload(listener, in, SmugMugUtil.getMd5Hash(md5is), sm.getAlbums(mAlbum).get(0),
          file.getName());
      //uploadSMPhotoTask.publishProgress(new Integer(101));
      bar.setProgress(101);
      return true;
    } catch (SmugMugConnectionError e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (SmugMugFailedResponse e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (SmugMugInternalError e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (FileNotFoundException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (Exception e) {
      Log.d(Constants.TAG, "Unexpected exception: " + e);
    } finally {
      try {
        md5is.close();
        in.close();
      } catch (IOException e) {
        Log.w(Constants.TAG, "Unable to close connection: " + e);
      }
    }
    return false;
  }

  /**
   * Background task used to load the list of photos. The tasks queries Flickr
   * for the list of photos to display and ends by starting the
   * LoadPhotosTask.
   */
  private class UploadSMPhotoTask extends AsyncTask<Bundle, Integer, Boolean> {
    public Boolean doInBackground(Bundle... params) {
      Bundle extras = params[0];
      boolean retVal = false;
      if (extras != null) {
        Object o = extras.get(Intent.EXTRA_STREAM);
        if (o instanceof Uri) {
          Uri target = (Uri) o;
          retVal = uploadTarget(this, target);
        } else if (o instanceof ArrayList<?>) {
          ArrayList<?> uris = (ArrayList<?>) o;
          for (Iterator<?> it = uris.iterator(); it.hasNext(); ){
            retVal |= uploadTarget(this, (Uri)it.next());
          }
        }
      }
      return retVal;
        }

    @Override
    public void onProgressUpdate(Integer... values) {
      int i = values[0].intValue();
      switch(i) {
      case -5:
        bar.setIndeterminate(false);
        bar.setVisibility(View.VISIBLE);
        break;
      default:
        bar.setProgress(i);
        break;
      }
    }

    @Override
    public void onPostExecute(Boolean result) {
      mTask = null;
      if (result == true) {
        Toast.makeText(MediaShareActivity.this,
            R.string.success_file_upload, Toast.LENGTH_SHORT)
            .show();
      } else {
        Toast.makeText(MediaShareActivity.this,
            R.string.failure_file_upload, Toast.LENGTH_SHORT)
            .show();
      }
      finish();
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.