Skip to content

Commit

Permalink
Merge pull request #5640 from wordpress-mobile/feature/media-metadata…
Browse files Browse the repository at this point in the history
…-overlay

Feature/media metadata overlay
  • Loading branch information
daniloercoli authored Apr 14, 2017
2 parents 6f34c7c + f34bed4 commit 93e093f
Show file tree
Hide file tree
Showing 11 changed files with 460 additions and 1,023 deletions.
7 changes: 4 additions & 3 deletions WordPress/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -160,9 +160,6 @@
android:name=".ui.posts.AddCategoryActivity"
android:label="@string/add_new_category"
android:theme="@style/Theme.AppCompat.Light.Dialog" />
<activity
android:name=".ui.media.MediaPreviewActivity"
android:theme="@style/Theme.AppCompat.NoActionBar" />
<activity
android:name=".editor.legacy.EditLinkActivity"
android:label="@string/create_a_link"
Expand Down Expand Up @@ -234,6 +231,10 @@
<activity
android:name=".ui.media.MediaBrowserActivity"
android:theme="@style/Calypso.NoActionBar" />
<activity
android:name=".ui.media.MediaPreviewActivity"
android:windowSoftInputMode="adjustNothing"
android:theme="@style/Theme.AppCompat.NoActionBar" />
<activity android:name=".ui.media.MediaGalleryActivity" />
<activity android:name=".ui.media.MediaGalleryPickerActivity" />

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
import org.wordpress.android.ui.media.MediaGalleryEditFragment;
import org.wordpress.android.ui.media.MediaGalleryPickerActivity;
import org.wordpress.android.ui.media.MediaGridFragment;
import org.wordpress.android.ui.media.MediaItemFragment;
import org.wordpress.android.ui.media.services.MediaDeleteService;
import org.wordpress.android.ui.media.services.MediaUploadService;
import org.wordpress.android.ui.notifications.NotificationsDetailActivity;
Expand Down Expand Up @@ -145,7 +144,6 @@ public interface AppComponent {
void inject(PlansActivity object);
void inject(MediaBrowserActivity object);
void inject(MediaGridFragment object);
void inject(MediaItemFragment object);
void inject(MediaEditFragment object);
void inject(MediaGalleryEditFragment object);
void inject(MediaGalleryPickerActivity object);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,11 @@

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.FragmentManager.OnBackStackChangedListener;
import android.app.FragmentTransaction;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
Expand Down Expand Up @@ -62,9 +58,7 @@
import org.wordpress.android.models.MediaUploadState;
import org.wordpress.android.ui.ActivityId;
import org.wordpress.android.ui.RequestCodes;
import org.wordpress.android.ui.media.MediaEditFragment.MediaEditFragmentCallback;
import org.wordpress.android.ui.media.MediaGridFragment.MediaGridListener;
import org.wordpress.android.ui.media.MediaItemFragment.MediaItemFragmentCallback;
import org.wordpress.android.ui.media.services.MediaDeleteService;
import org.wordpress.android.ui.media.services.MediaUploadService;
import org.wordpress.android.util.ActivityUtils;
Expand All @@ -74,8 +68,8 @@
import org.wordpress.android.util.MediaUtils;
import org.wordpress.android.util.NetworkUtils;
import org.wordpress.android.util.PermissionUtils;
import org.wordpress.android.util.StringUtils;
import org.wordpress.android.util.ToastUtils;
import org.wordpress.android.util.WPActivityUtils;
import org.wordpress.android.util.WPMediaUtils;
import org.wordpress.passcodelock.AppLockManager;

Expand All @@ -92,8 +86,8 @@
* The main activity in which the user can browse their media.
*/
public class MediaBrowserActivity extends AppCompatActivity implements MediaGridListener,
MediaItemFragmentCallback, OnQueryTextListener, OnActionExpandListener,
MediaEditFragmentCallback, WordPressMediaUtils.LaunchCameraCallback {
OnQueryTextListener, OnActionExpandListener,
WordPressMediaUtils.LaunchCameraCallback {
private static final int MEDIA_PERMISSION_REQUEST_CODE = 1;

private static final String SAVED_QUERY = "SAVED_QUERY";
Expand All @@ -105,8 +99,6 @@ public class MediaBrowserActivity extends AppCompatActivity implements MediaGrid
private SiteModel mSite;

private MediaGridFragment mMediaGridFragment;
private MediaItemFragment mMediaItemFragment;
private MediaEditFragment mMediaEditFragment;
private PopupWindow mAddMediaPopup;

// Views
Expand Down Expand Up @@ -155,18 +147,6 @@ public void onCreate(Bundle savedInstanceState) {
fm.addOnBackStackChangedListener(mOnBackStackChangedListener);

mMediaGridFragment = (MediaGridFragment) fm.findFragmentById(R.id.mediaGridFragment);
mMediaItemFragment = (MediaItemFragment) fm.findFragmentByTag(MediaItemFragment.TAG);
mMediaEditFragment = (MediaEditFragment) fm.findFragmentByTag(MediaEditFragment.TAG);

FragmentTransaction ft = fm.beginTransaction();
if (mMediaItemFragment != null) {
ft.hide(mMediaGridFragment);
}
if (mMediaEditFragment != null && !mMediaEditFragment.isInLayout()) {
ft.hide(mMediaItemFragment);
}
ft.commitAllowingStateLoss();

setupAddMenuPopup();

// if media was shared add it to the library
Expand All @@ -191,23 +171,13 @@ protected void onPause() {
}
}

@Override
public void onPause(Fragment fragment) {
invalidateOptionsMenu();
}

@Override
protected void onResume() {
super.onResume();
startMediaDeleteService(null);
ActivityId.trackLastActivity(ActivityId.MEDIA);
}

@Override
public void onResume(Fragment fragment) {
invalidateOptionsMenu();
}

@Override
public void onStop() {
unregisterReceiver(mReceiver);
Expand Down Expand Up @@ -241,35 +211,6 @@ protected void onRestoreInstanceState(Bundle savedInstanceState) {
mQuery = savedInstanceState.getString(SAVED_QUERY);
}

@Override
public void onBackPressed() {
FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
if (mMediaEditFragment != null && mMediaEditFragment.isVisible() && mMediaEditFragment.isDirty()) {
// alert the user that there are unsaved changes
new AlertDialog.Builder(this)
.setMessage(R.string.confirm_discard_changes)
.setCancelable(true)
.setPositiveButton(R.string.discard, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// make sure the keyboard is dismissed
WPActivityUtils.hideKeyboard(getCurrentFocus());

// pop the edit fragment
doPopBackStack(getFragmentManager());
}})
.setNegativeButton(R.string.cancel, null)
.create()
.show();
} else {
doPopBackStack(fm);
}
} else {
super.onBackPressed();
}
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Expand Down Expand Up @@ -399,31 +340,6 @@ public boolean onOptionsItemSelected(MenuItem item) {
onQueryTextSubmit(mQuery);
mSearchView.setQuery(mQuery, true);
}
return true;
case R.id.menu_edit_media:
int localMediaId = mMediaItemFragment.getLocalMediaId();

if (mMediaEditFragment == null || !mMediaEditFragment.isInLayout()) {
// phone layout: hide item details, show and update edit fragment
FragmentManager fm = getFragmentManager();
mMediaEditFragment = MediaEditFragment.newInstance(mSite, localMediaId);

FragmentTransaction ft = fm.beginTransaction();
if (mMediaItemFragment.isVisible()) {
ft.hide(mMediaItemFragment);
}
ft.add(R.id.media_browser_container, mMediaEditFragment, MediaEditFragment.TAG);
ft.addToBackStack(null);
ft.commitAllowingStateLoss();
} else {
// tablet layout: update edit fragment
mMediaEditFragment.loadMedia(localMediaId);
}

if (mSearchView != null) {
mSearchView.clearFocus();
}

return true;
}

Expand Down Expand Up @@ -481,36 +397,17 @@ public boolean onQueryTextChange(String newText) {
return true;
}

@Override
public void setLookClosable() {
mToolbar.setNavigationIcon(R.drawable.ic_close_white_24dp);
}

@Override
public void onMediaItemSelected(View sourceView, int localMediaId) {
final String tempQuery = mQuery;

if (mSearchView != null) {
mSearchView.clearFocus();
}

if (mSearchMenuItem != null) {
MenuItemCompat.collapseActionView(mSearchMenuItem);
}

FragmentManager fm = getFragmentManager();
if (fm.getBackStackEntryCount() == 0) {
mMediaGridFragment.clearSelectedItems();
mMediaItemFragment = MediaItemFragment.newInstance(mSite, localMediaId);

FragmentTransaction ft = fm.beginTransaction();
ft.hide(mMediaGridFragment);
ft.add(R.id.media_browser_container, mMediaItemFragment, MediaItemFragment.TAG);
ft.addToBackStack(null);
ft.commitAllowingStateLoss();

mQuery = tempQuery;
MediaModel media = mMediaStore.getMediaWithLocalId(localMediaId);
if (media != null) {
// TODO: right now only images & videos are supported
String mimeType = StringUtils.notNullStr(media.getMimeType()).toLowerCase();
if (!mimeType.startsWith("image") && !mimeType.startsWith("video")) {
return;
}
}
MediaPreviewActivity.showPreview(this, sourceView, mSite, localMediaId);
}

@Override
Expand Down Expand Up @@ -554,20 +451,10 @@ public void onMediaChanged(OnMediaChanged event) {
break;
}

// If the media was deleted, remove it from multi select (if it was selected) and hide it from the
// detail view (if it was the one displayed)
// If the media was deleted, remove it from multi select if it was selected
for (MediaModel mediaModel : event.mediaList) {
int localMediaId = mediaModel.getId();
mMediaGridFragment.removeFromMultiSelect(localMediaId);
if (mMediaEditFragment != null && mMediaEditFragment.isVisible()
&& localMediaId == mMediaEditFragment.getLocalMediaId()) {
updateOnMediaChanged(localMediaId);
if (mMediaEditFragment.isInLayout()) {
mMediaEditFragment.loadMedia(MediaEditFragment.MISSING_MEDIA_ID);
} else {
getFragmentManager().popBackStack();
}
}
}
break;
}
Expand Down Expand Up @@ -613,46 +500,9 @@ public void onMediaUploaded(OnMediaUploaded event) {
}
}

public void onSavedEdit(int localMediaId, boolean result) {
if (mMediaEditFragment != null && mMediaEditFragment.isVisible() && result) {
doPopBackStack(getFragmentManager());

// refresh media item details (phone-only)
if (mMediaItemFragment != null)
mMediaItemFragment.loadMedia(localMediaId);

// refresh grid
mMediaGridFragment.refreshMediaFromDB();
}
}

private void updateOnMediaChanged(int localMediaId) {
if (localMediaId == -1) {
return;
}

// If the media was deleted, remove it from multi select (if it was selected) and hide it from the the detail
// view (if it was the one displayed)
if (mMediaStore.getMediaWithLocalId(localMediaId) == null) {
mMediaGridFragment.removeFromMultiSelect(localMediaId);
if (mMediaEditFragment != null && mMediaEditFragment.isVisible()
&& localMediaId == mMediaEditFragment.getLocalMediaId()) {
if (mMediaEditFragment.isInLayout()) {
mMediaEditFragment.loadMedia(MediaEditFragment.MISSING_MEDIA_ID);
} else {
doPopBackStack(getFragmentManager());
}
}
}
updateViews();
}

public void deleteMedia(final ArrayList<Integer> ids) {
Set<String> sanitizedIds = new HashSet<>(ids.size());

// phone layout: pop the item fragment if it's visible
doPopBackStack(getFragmentManager());

final ArrayList<MediaModel> mediaToDelete = new ArrayList<>();
// Make sure there are no media in "uploading"
for (int currentId : ids) {
Expand Down Expand Up @@ -927,13 +777,6 @@ private void startMediaDeleteService(ArrayList<MediaModel> mediaToDelete) {
}
}

private void doPopBackStack(FragmentManager fm) {
fm.popBackStack();

// reset the button to "back" as it may have been altered by a fragment
mToolbar.setNavigationIcon(R.drawable.ic_arrow_left_white_24dp);
}

private String getRealPathFromURI(Uri uri) {
String path;
if ("content".equals(uri.getScheme())) {
Expand Down
Loading

0 comments on commit 93e093f

Please sign in to comment.