/**
* Copyright (c) 2008-2016 CommonsWare, LLC
* <p/>
* 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
* <p/>
* 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 com.commonsware.android.dragdrop;
import android.app.Activity;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.DragEvent;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import com.squareup.picasso.Picasso;
public class MainActivity extends Activity implements
View.OnDragListener {
private static final String STATE_IMAGE_URI=
BuildConfig.APPLICATION_ID+".IMAGE_URI";
private Uri imageUri;
private ImageView image;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
image=(ImageView)findViewById(R.id.thumbnail_large);
image.setOnDragListener(this);
if (icicle!=null) {
imageUri=icicle.getParcelable(STATE_IMAGE_URI);
if (imageUri!=null) {
showThumbnail();
}
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putParcelable(STATE_IMAGE_URI, imageUri);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.actions, menu);
return(super.onCreateOptionsMenu(menu));
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId()==R.id.paste) {
boolean handled=false;
ClipData clip=
getSystemService(ClipboardManager.class)
.getPrimaryClip();
if (clip!=null) {
ClipData.Item clipItem=clip.getItemAt(0);
if (clipItem!=null) {
imageUri=clipItem.getUri();
if (imageUri!=null) {
showThumbnail();
handled=true;
}
}
}
if (!handled) {
Toast
.makeText(this, "Could not paste an image!", Toast.LENGTH_LONG)
.show();
}
return(handled);
}
return(super.onOptionsItemSelected(item));
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_SLASH &&
event.isAltPressed() &&
event.getRepeatCount()==0 &&
Build.VERSION.SDK_INT<=Build.VERSION_CODES.M) {
new ShortcutDialogFragment().show(getFragmentManager(),
"shortcuts");
return(true);
}
return(super.onKeyDown(keyCode, event));
}
@Override
public boolean onDrag(View v, DragEvent event) {
boolean result=true;
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
if (event
.getClipDescription()
.hasMimeType(ClipDescription.MIMETYPE_TEXT_URILIST)) {
applyDropHint(v, R.drawable.droppable);
}
else {
result=false;
}
break;
case DragEvent.ACTION_DRAG_ENTERED:
applyDropHint(v, R.drawable.drop);
break;
case DragEvent.ACTION_DRAG_EXITED:
applyDropHint(v, R.drawable.droppable);
break;
case DragEvent.ACTION_DRAG_ENDED:
applyDropHint(v, -1);
break;
case DragEvent.ACTION_DROP:
requestDragAndDropPermissions(event);
ClipData.Item clip=event.getClipData().getItemAt(0);
imageUri=clip.getUri();
showThumbnail();
break;
}
return(result);
}
private void applyDropHint(View v, int drawableId) {
View parent=(View)v.getParent();
if (drawableId>-1) {
parent.setBackgroundResource(drawableId);
}
else {
parent.setBackground(null);
}
}
private void showThumbnail() {
Picasso.with(this)
.load(imageUri)
.fit().centerCrop()
.placeholder(R.drawable.ic_photo_size_select_actual_black_24dp)
.error(R.drawable.ic_error_black_24dp)
.into(image);
}
}