package org.witness.informacam.app;
import info.guardianproject.odkparser.FormWrapper.ODKFormListener;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.List;
import org.witness.informacam.InformaCam;
import org.witness.informacam.app.screens.FullScreenViewFragment;
import org.witness.informacam.app.screens.editors.FullScreenImageViewFragment;
import org.witness.informacam.app.screens.editors.FullScreenMJPEGPlayerFragment;
import org.witness.informacam.app.screens.editors.FullScreenMJPEGViewFragment;
import org.witness.informacam.app.screens.editors.FullScreenVideoViewFragment;
import org.witness.informacam.app.screens.forms.OverviewFormFragment;
import org.witness.informacam.app.screens.forms.TagFormFragment;
import org.witness.informacam.app.screens.popups.SharePopup;
import org.witness.informacam.app.utils.Constants.Codes;
import org.witness.informacam.app.utils.Constants.EditorActivityListener;
import org.witness.informacam.app.utils.UIHelpers;
import org.witness.informacam.app.views.PZSImageView;
import org.witness.informacam.informa.InformaService;
import org.witness.informacam.models.forms.IForm;
import org.witness.informacam.models.media.IImage;
import org.witness.informacam.models.media.IMedia;
import org.witness.informacam.models.media.IRegion;
import org.witness.informacam.models.media.IVideo;
import org.witness.informacam.models.notifications.INotification;
import org.witness.informacam.storage.FormUtility;
import org.witness.informacam.ui.editors.IRegionDisplay;
import org.witness.informacam.utils.Constants.App.Storage;
import org.witness.informacam.utils.Constants.IRegionDisplayListener;
import org.witness.informacam.utils.Constants.InformaCamEventListener;
import org.witness.informacam.utils.Constants.Models;
import org.witness.informacam.utils.Constants.Models.IMedia.MimeType;
import org.witness.informacam.utils.InformaCamBroadcaster.InformaCamStatusListener;
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Message;
import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.Window;
import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ProgressBar;
import android.widget.Toast;
public class EditorActivity extends FragmentActivity implements EditorActivityListener, IRegionDisplayListener, InformaCamStatusListener, InformaCamEventListener
{
Intent init;
FrameLayout rootMain;
View rootForm;
View bottomPart;
View mediaHolderView;
Fragment fullscreenView, formView;
OverviewFormFragment detailsView;
public FragmentManager fm;
private View toolbarBottom;
private boolean toolbarBottomShown;
private View toolbarBtnWriteText;
private View toolbarBtnAddTags;
private ProgressBar waitLoading;
ActionBar actionBar;
ImageButton abNavigationBack, abShareMedia;
//private final static String LOG = Constants.App.Editor.LOG;
private InformaCam informaCam;
public IMedia media;
private String mediaId;
public List<IForm> availableForms;
public enum ActivityActionMode
{
Normal, Edit, AddTags, EditText, EditForm
}
private ActivityActionMode mActionMode = ActivityActionMode.Normal;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);//or add in style.xml
if(PreferenceManager.getDefaultSharedPreferences(this).getBoolean("prefBlockScreenshots", false))
{
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
}
actionBar = getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#33cccccc")));
actionBar.setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#55cccccc")));
informaCam = (InformaCam) getApplication();
informaCam.setStatusListener(this);
informaCam.setEventListener(this);
try {
initData();
if (media.dcimEntry.thumbnail != null)
{
setContentView(R.layout.activity_editor);
rootMain = (FrameLayout) findViewById(R.id.root_main);
waitLoading = (ProgressBar) findViewById(R.id.waitLoading);
bottomPart = findViewById(R.id.rlBottomPart);
installDeferredLoader();
rootForm = findViewById(R.id.root_form);
toolbarBottom = findViewById(R.id.toolbar_bottom);
toolbarBottom.setVisibility(View.GONE);
fm = getSupportFragmentManager();
}
else
{
Toast.makeText(this, "Could not open image", Toast.LENGTH_LONG).show();
finish();
}
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void onResume() {
super.onResume();
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
//Do some stuff
// rootMain.fullscreen();
}
}
/**
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE){
//Do some stuff
// rootMain.fullscreen();
}
else
{
// rootMain.expand();
}
}*/
private void installDeferredLoader() {
final ViewTreeObserver vto = rootMain.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener()
{
@SuppressWarnings("deprecation")
@Override
public void onGlobalLayout()
{
ViewTreeObserver observer = vto;
if (!observer.isAlive())
observer = rootMain.getViewTreeObserver();
observer.removeGlobalOnLayoutListener(this);
rootMain.post(new Runnable()
{
@Override
public void run() {
try {
availableForms = FormUtility.getAvailableForms();
initToolbar();
initLayout();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
});
}
private void initData() throws InstantiationException, IllegalAccessException
{
if (!getIntent().hasExtra(Codes.Extras.EDIT_MEDIA))
{
setResult(Activity.RESULT_CANCELED);
finish();
}
mediaId = getIntent().getStringExtra(Codes.Extras.EDIT_MEDIA);
media = informaCam.mediaManifest.getById(mediaId);
if (media == null || media.dcimEntry == null || media.dcimEntry.mediaType == null)
{
setResult(Activity.RESULT_CANCELED);
finish();
return;
}
if (media.dcimEntry.mediaType.equals(MimeType.IMAGE))
{
media = new IImage(media);
}
else if (media.dcimEntry.mediaType.startsWith(MimeType.VIDEO_BASE))
{
media = new IVideo(media);
}
}
private void initLayout()
{
Bundle fullscreenViewArgs = new Bundle();
Bundle detailsViewArgs = new Bundle();
fullscreenViewArgs.putInt(Codes.Extras.SET_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
fullscreenViewArgs.putString("mediaId", mediaId);
detailsViewArgs.putInt(Codes.Extras.SET_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
detailsViewArgs.putString("mediaId", mediaId);
if (media.dcimEntry.mediaType.equals(Models.IMedia.MimeType.IMAGE))
{
fullscreenView = Fragment.instantiate(this, FullScreenImageViewFragment.class.getName(), fullscreenViewArgs);
mediaHolderView = ((FullScreenImageViewFragment)fullscreenView).getImageView();
}
else if ( media.dcimEntry.fileAsset.source == Storage.Type.IOCIPHER)
{
fullscreenView = Fragment.instantiate(this, FullScreenMJPEGViewFragment.class.getName(), fullscreenViewArgs);
//fullscreenView = Fragment.instantiate(this, FullScreenMJPEGPlayerFragment.class.getName(), fullscreenViewArgs);
}
else if (media.dcimEntry.mediaType.startsWith(Models.IMedia.MimeType.VIDEO_BASE))
{
fullscreenView = Fragment.instantiate(this, FullScreenVideoViewFragment.class.getName(), fullscreenViewArgs);
}
detailsView = (OverviewFormFragment) Fragment.instantiate(this, OverviewFormFragment.class.getName(), detailsViewArgs);
formView = Fragment.instantiate(this, TagFormFragment.class.getName());
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setHomeButtonEnabled(true);
actionBar.setLogo(this.getResources().getDrawable(R.drawable.ic_action_up));
actionBar.setDisplayUseLogoEnabled(true);
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.media_holder, fullscreenView);
ft.replace(R.id.details_form_holder, detailsView);
ft.replace(R.id.root_form, formView);
ft.addToBackStack(null);
ft.commit();
updateUIBasedOnActionMode();
}
private void saveStateAndFinish()
{
setResult(Activity.RESULT_OK);
finish();
}
private void saveState()
{
new Thread(new Runnable()
{
@Override
public void run()
{
if (((ODKFormListener) fullscreenView).saveForm() && ((ODKFormListener) detailsView).saveForm())
{
try {
media.save();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
super.onCreateOptionsMenu(menu);
if (mActionMode == ActivityActionMode.Edit)
getMenuInflater().inflate(R.menu.activity_edit_edit, menu);
else if (mActionMode == ActivityActionMode.EditText)
getMenuInflater().inflate(R.menu.activity_edit_edit_text, menu);
else
getMenuInflater().inflate(R.menu.activity_edit_normal, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
boolean isLocalShare = PreferenceManager.getDefaultSharedPreferences(this).getBoolean("prefExportLocal", false);
switch (item.getItemId())
{
case android.R.id.home:
{
if (mActionMode == ActivityActionMode.EditText)
{
try {
detailsView.stopEditNotes(true);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setActionMode(ActivityActionMode.Normal);
}
else if (mActionMode == ActivityActionMode.Edit)
{
saveState();
setActionMode(ActivityActionMode.Normal);
}
else
saveStateAndFinish();
return true;
}
case R.id.menu_share:
{
ArrayList<IMedia> mList = new ArrayList<IMedia>();
mList.add(media);
new SharePopup(this, mList, isLocalShare);
return true;
}
case R.id.menu_share_meta_j3m:
{
ArrayList<IMedia> mList = new ArrayList<IMedia>();
mList.add(media);
new SharePopup(this, mList, false, SharePopup.SHARE_TYPE_J3M, isLocalShare);
return true;
}
case R.id.menu_share_meta_csv:
{
ArrayList<IMedia> mList = new ArrayList<IMedia>();
mList.add(media);
new SharePopup(this, mList, false, SharePopup.SHARE_TYPE_CSV, isLocalShare);
return true;
}
case R.id.menu_share_hash:
{
shareHash();
return true;
}
case R.id.menu_view_meta:
{
Intent intent = new Intent(this,MetadataActivity.class);
intent.putExtra(Codes.Extras.EDIT_MEDIA, media._id);
startActivity(intent);
return true;
}
case R.id.menu_view_charts:
{
Intent intent = new Intent(this,ChartsActivity.class);
intent.putExtra(Codes.Extras.EDIT_MEDIA, media._id);
startActivity(intent);
return true;
}
case R.id.menu_edit:
{
setActionMode(ActivityActionMode.Edit);
return true;
}
case R.id.menu_done:
{
saveState();
setActionMode(ActivityActionMode.Normal);
bottomPart.setVisibility(View.GONE);
return true;
}
case R.id.menu_edittext_cancel:
{
try {
detailsView.stopEditNotes(false);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setActionMode(ActivityActionMode.Edit);
return true;
}
case R.id.menu_edittext_save:
{
try {
detailsView.stopEditNotes(true);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setActionMode(ActivityActionMode.Edit);
return true;
}
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed()
{
if (mActionMode == ActivityActionMode.EditForm)
this.setActionMode(ActivityActionMode.Edit);
else if (mActionMode == ActivityActionMode.AddTags)
this.setActionMode(ActivityActionMode.Edit);
else if (mActionMode == ActivityActionMode.Edit)
{
this.setActionMode(ActivityActionMode.Normal);
}
else if (mActionMode == ActivityActionMode.EditText)
{
try {
detailsView.stopEditNotes(true);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.setActionMode(ActivityActionMode.Normal);
}
else
saveStateAndFinish();
}
public void shareHash ()
{
try
{
String mediaId = ((IMedia) media)._id;
boolean hasBeenShared = false;
List<INotification> listNotifs = InformaCam.getInstance().notificationsManifest.sortBy(Models.INotificationManifest.Sort.DATE_DESC);
for (INotification n :listNotifs)
{
if (mediaId.equals(n.mediaId))
{
//this means we sent to an organization, likely the testbed
if ((n.type == Models.INotification.Type.EXPORTED_MEDIA) &&
n.taskComplete)
{
hasBeenShared = true;
}
}
}
@SuppressWarnings("unused")
String j3m = ((IMedia) media).buildJ3M(this, false, null);
//generate public hash id from values
String creatorHash = media.genealogy.createdOnDevice;
StringBuffer mediaHash = new StringBuffer();
for(String mHash : media.genealogy.hashes) {
mediaHash.append(mHash);
}
MessageDigest md;
try {
md = MessageDigest.getInstance("SHA-1");
md.update((creatorHash+mediaHash.toString()).getBytes());
byte[] byteData = md.digest();
StringBuffer hexString = new StringBuffer();
for (int i=0;i<byteData.length;i++) {
String hex=Integer.toHexString(0xff & byteData[i]);
if(hex.length()==1) hexString.append('0');
hexString.append(hex);
}
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
String shareHash = getString(R.string._camerav_notarization_id_) + getString(R.string._id_)+ hexString;
//if (!hasBeenShared) //if it hasn't been shared, then just show the hashes
sendIntent.putExtra(Intent.EXTRA_TEXT, shareHash);
//else //if it has, then show a URL
//sendIntent.putExtra(Intent.EXTRA_TEXT, "#" + getString(R.string.app_name) + " https://j3m.info/submissions/?hashes=" + hexString + " (media:" + mediaHash + ")");
sendIntent.setType("text/plain");
startActivity(sendIntent);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
catch (Exception e)
{
}
}
@Override
public void onMediaScanned(Uri uri)
{
((EditorActivityListener) fullscreenView).onMediaScanned(uri);
}
@Override
public void onSelected(IRegionDisplay regionDisplay)
{
((IRegionDisplayListener) fullscreenView).onSelected(regionDisplay);
}
@Override
public IMedia media()
{
return media;
}
@Override
public int[] getSpecs()
{
return ((IRegionDisplayListener) fullscreenView).getSpecs();
}
private final ActionMode.Callback mActionModeEditTags = new ActionMode.Callback()
{
// Called when the action mode is created; startActionMode() was called
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu)
{
mode.setTitle(R.string.editor_tags_add);
// Inflate a menu resource providing context menu items
// MenuInflater inflater = mode.getMenuInflater();
// inflater.inflate(R.menu.context_menu, menu);
menu.add(Menu.NONE, R.string.menu_done, 0, R.string.menu_done);
return true;
}
// Called each time the action mode is shown. Always called after
// onCreateActionMode, but
// may be called multiple times if the mode is invalidated.
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu)
{
return false; // Return false if nothing is done
}
// Called when the user selects a contextual menu item
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item)
{
switch (item.getItemId())
{
case R.string.menu_done:
mode.finish(); // Action picked, so close the CAB
return true;
default:
return false;
}
}
// Called when the user exits the action mode
@Override
public void onDestroyActionMode(ActionMode mode)
{
setActionMode(ActivityActionMode.Edit);
}
};
protected class EditFormActionMode implements ActionMode.Callback
{
private IRegion mRegion = null;
public void setEditedRegion(IRegion region)
{
mRegion = region;
}
// Called when the action mode is created; startActionMode() was called
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu)
{
mode.setTitle(R.string.editor_form_edit);
menu.add(Menu.NONE, R.string.cancel, 0, R.string.cancel);
menu.add(Menu.NONE, R.string.save, 1, R.string.save);
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu)
{
return false; // Return false if nothing is done
}
// Called when the user selects a contextual menu item
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item)
{
switch (item.getItemId())
{
case R.string.cancel:
mode.finish();
return true;
case R.string.save:
if (mRegion != null)
{
((TagFormFragment) formView).saveTagFormData(mRegion);
rootForm.setVisibility(View.GONE);
}
mode.finish(); // Action picked, so close the CAB
return true;
default:
return false;
}
}
// Called when the user exits the action mode
@Override
public void onDestroyActionMode(ActionMode mode)
{
setEditedRegion(null);
setActionMode(ActivityActionMode.Edit);
}
};
protected final EditFormActionMode mActionModeEditForm = new EditFormActionMode();
private boolean detailsViewResumed;
private boolean fullScreenViewResumed;
private boolean formViewResumed;
private boolean setActionMode(ActivityActionMode mode)
{
if (mode == ActivityActionMode.Normal)
{
if (InformaService.getInstance() != null)
{
//if we are just in normal viewing mode, don't do any cache updating
InformaService.getInstance().unassociateMedia();
}
}
// Already in action mode
if (mActionMode == mode)
return false;
else if (mActionMode == ActivityActionMode.Normal && mode != ActivityActionMode.Edit)
return false; // Invalid state
else if (mActionMode == ActivityActionMode.AddTags && (mode == ActivityActionMode.EditText))
return false;
else if (mActionMode == ActivityActionMode.EditForm && (mode == ActivityActionMode.AddTags || mode == ActivityActionMode.EditText))
return false;
else if (mActionMode == ActivityActionMode.EditText && (mode == ActivityActionMode.AddTags || mode == ActivityActionMode.EditForm))
return false;
mActionMode = mode;
if (mActionMode == ActivityActionMode.AddTags)
{
((FullScreenViewFragment) fullscreenView).setCurrentMode(FullScreenViewFragment.Mode.AddTags);
startActionMode(this.mActionModeEditTags);
}
else if (mActionMode == ActivityActionMode.EditText)
{
supportInvalidateOptionsMenu();
}
else if (mActionMode == ActivityActionMode.EditForm)
{
startActionMode(this.mActionModeEditForm);
}
else if (mActionMode == ActivityActionMode.Edit)
{
((FullScreenViewFragment) fullscreenView).setCurrentMode(FullScreenViewFragment.Mode.Edit);
supportInvalidateOptionsMenu();
detailsView.setIsEditable(true);
}
else if (mActionMode == ActivityActionMode.Normal)
{
((FullScreenViewFragment) fullscreenView).setCurrentMode(FullScreenViewFragment.Mode.Normal);
supportInvalidateOptionsMenu();
detailsView.setIsEditable(false);
}
updateUIBasedOnActionMode();
return true;
}
private void updateUIBasedOnActionMode()
{
switch (mActionMode)
{
case EditForm:
rootMain.setVisibility(View.VISIBLE);
rootForm.setVisibility(View.VISIBLE);
bottomPart.setVisibility(View.VISIBLE);
enableToolbar(false);
showToolbar(true);
getActionBar().setTitle(R.string.editor_form_edit);
break;
case AddTags:
rootForm.setVisibility(View.GONE);
rootMain.setVisibility(View.VISIBLE);
bottomPart.setVisibility(View.GONE);
enableToolbar(false);
showToolbar(false);
getActionBar().setTitle(R.string.editor_tags_add);
if (fullscreenView instanceof FullScreenImageViewFragment)
{
mediaHolderView = ((FullScreenImageViewFragment)fullscreenView).getImageView();
if (mediaHolderView != null && mediaHolderView instanceof PZSImageView)
{
((PZSImageView)mediaHolderView).setHandleTouch(false);
}
}
break;
case EditText:
rootForm.setVisibility(View.GONE);
rootMain.setVisibility(View.VISIBLE);
bottomPart.setVisibility(View.VISIBLE);
enableToolbar(false);
showToolbar(false);
getActionBar().setTitle(R.string.menu_edit);
//rootMain.collapse();
@SuppressWarnings("unused")
Rect rectAudioFiles = UIHelpers.getRectRelativeToView(rootMain, detailsView.getAudioFilesView());
//this.svRootMain.smoothScrollTo(0, rectAudioFiles.top);
detailsView.startEditNotes();
break;
case Edit:
bottomPart.setVisibility(View.VISIBLE);
// rootMain.expand();
//this.svRootMain.smoothScrollTo(0, 0);
try {
detailsView.stopEditNotes(false);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
rootForm.setVisibility(View.GONE);
rootMain.setVisibility(View.VISIBLE);
enableToolbar(true);
showToolbar(true);
getActionBar().setTitle(R.string.menu_edit);
break;
default:
rootForm.setVisibility(View.GONE);
rootMain.setVisibility(View.VISIBLE);
bottomPart.setVisibility(View.GONE);
if (mediaHolderView != null && mediaHolderView instanceof PZSImageView)
{
((PZSImageView)mediaHolderView).setHandleTouch(true);
}
showToolbar(false);
getActionBar().setTitle(R.string.menu_view);
break;
}
}
private void initToolbar()
{
toolbarBtnWriteText = toolbarBottom.findViewById(R.id.btnWriteText);
toolbarBtnWriteText.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (toolbarBottomShown && mActionMode == ActivityActionMode.Edit)
setActionMode(ActivityActionMode.EditText);
}
});
toolbarBtnAddTags = toolbarBottom.findViewById(R.id.btnAddTags);
toolbarBtnAddTags.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
if (toolbarBottomShown && mActionMode == ActivityActionMode.Edit)
setActionMode(ActivityActionMode.AddTags);
}
});
showToolbar(false);
}
private void enableToolbar(boolean enable)
{
this.toolbarBtnWriteText.setEnabled(enable);
this.toolbarBtnAddTags.setEnabled(enable);
}
private void showToolbar(boolean show)
{
if (show)
{
if (!toolbarBottomShown)
{
enableToolbar(true);
toolbarBottom.startAnimation(AnimationUtils.loadAnimation(this, R.anim.toolbar_slide_in));
toolbarBottom.setVisibility(View.VISIBLE);
toolbarBottomShown = true;
}
}
else
{
enableToolbar(false);
toolbarBottomShown = false;
Animation anim = AnimationUtils.loadAnimation(this, R.anim.toolbar_slide_out);
anim.setAnimationListener(new AnimationListener()
{
@Override
public void onAnimationEnd(Animation animation) {
toolbarBottom.setVisibility(View.GONE);
toolbarBottom.clearAnimation();
}
@Override
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationStart(Animation animation) {
}
});
toolbarBottom.clearAnimation();
toolbarBottom.startAnimation(anim);
}
}
public void showTagForm(IRegion region) throws InstantiationException, IllegalAccessException
{
if (setActionMode(ActivityActionMode.EditForm))
{
rootForm.setVisibility(View.VISIBLE);
mActionModeEditForm.setEditedRegion(region);
((TagFormFragment) formView).initTag(region);
}
}
@Override
public void onUpdate(Message message) {
}
@Override
public void onInformaCamStart(Intent intent) {
}
@Override
public void onInformaCamStop(Intent intent) {
}
@Override
public void onInformaStop(Intent intent) {
}
@Override
public void onInformaStart(Intent intent) {
//if we are in edit mode, then do cache updates
if (informaCam != null && InformaService.getInstance() != null)
InformaService.getInstance().associateMedia(media);
}
public void onFragmentResumed(Fragment f) {
if (f == this.detailsView)
detailsViewResumed = true;
else if (f == this.fullscreenView)
fullScreenViewResumed = true;
else if (f == formView)
formViewResumed = true;
if (detailsViewResumed && fullScreenViewResumed && formViewResumed)
if (!(f instanceof FullScreenVideoViewFragment))
waitLoading.setVisibility(View.GONE);
}
}