/* * Copyright 2012 The Stanford MobiSocial Laboratory * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package mobisocial.musubi.feed.action; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import mobisocial.musubi.Helpers; import mobisocial.musubi.R; import mobisocial.musubi.feed.iface.FeedAction; import mobisocial.musubi.objects.PictureObj; import mobisocial.musubi.ui.FeedPannerActivity; import mobisocial.musubi.ui.LatestPictureActivity; import mobisocial.musubi.util.ActivityCallout; import mobisocial.musubi.util.InstrumentedActivity; import mobisocial.socialkit.obj.MemObj; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.pm.LabeledIntent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Environment; import android.util.Log; import android.widget.Toast; /** * Adds a PictureObj to a feed from an external Android application * such as the Gallery. * */ public class GalleryAction extends FeedAction { private static final String TAG = "GalleryAction"; @Override public String getName() { return "Gallery"; } @Override public Drawable getIcon(Context c) { return c.getResources().getDrawable(R.drawable.ic_attach_picture_holo_light); } @Override public void onClick(final Context context, final Uri feedUri) { ((InstrumentedActivity)context).doActivityForResult(new GalleryCallout(context, feedUri)); } @Override public boolean isActive(Context c) { return true; } class GalleryCallout implements ActivityCallout { private final Context mmContext; private final Uri mmFeedUri; private GalleryCallout(Context context, Uri feedUri) { mmContext = context; mmFeedUri = feedUri; } @Override public void handleResult(int resultCode, final Intent data) { if (resultCode == Activity.RESULT_OK) { new Thread() { @Override public void run() { try { Uri uri = data.getData(); // TODO: mimeType; local_uri = data.toString(); MemObj outboundObj = PictureObj.from(mmContext, uri, true); Helpers.sendToFeed(mmContext, outboundObj, mmFeedUri); Helpers.emailUnclaimedMembers(mmContext, outboundObj, mmFeedUri); } catch (IOException e) { Toast.makeText(mmContext, "Error reading photo data.", Toast.LENGTH_SHORT).show(); Log.e(TAG, "Error reading photo data.", e); } } }.start(); } } @Override public Intent getStartIntent() { Intent gallery = new Intent(Intent.ACTION_GET_CONTENT); gallery.setType("image/*"); Intent chooser = Intent.createChooser(gallery, "Choose image..."); List<Intent> more = new ArrayList<Intent>(); File pictures = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); File screenshots = new File(pictures, "Screenshots"); if (screenshots.isDirectory()) { Intent screenie = new Intent("mobisocial.musubi.LATEST_SCREENSHOT"); screenie.setClass(mmContext, LatestPictureActivity.class); //screenie.setClass(mmContext, LatestPictureActivity.class); screenie.putExtra(LatestPictureActivity.EXTRA_BUCKET, LatestPictureActivity.BUCKET_SCREENSHOTS); Intent labeled = new LabeledIntent(screenie, mmContext.getPackageName(), "Latest Screenshot", R.drawable.ic_launcher_gallery); more.add(labeled); } Intent shareLatest = new Intent(Intent.ACTION_GET_CONTENT); shareLatest.setType("image/*"); shareLatest.setPackage("com.bjdodson.sharelatestphoto"); ResolveInfo info = mmContext.getPackageManager().resolveActivity( shareLatest, PackageManager.MATCH_DEFAULT_ONLY); if (info == null) { Intent camera = new Intent("mobisocial.musubi.LATEST_CAMERA"); camera.setClass(mmContext, LatestPictureActivity.class); camera.putExtra(LatestPictureActivity.EXTRA_BUCKET, LatestPictureActivity.BUCKET_CAMERA); Intent labeled = new LabeledIntent(camera, mmContext.getPackageName(), "Latest from Camera", R.drawable.ic_launcher_camera); more.add(labeled); } if (more.size() > 0) { chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, more.toArray(new Intent[more.size()])); } return chooser; } }; }