some refactoring, no functionality change

This commit is contained in:
tibbi 2016-06-18 23:10:50 +02:00
parent fd9980ba41
commit 9ebdffdda0
15 changed files with 425 additions and 404 deletions

View File

@ -5,6 +5,7 @@ import android.util.AttributeSet;
import android.widget.ImageView;
public class MyImageView extends ImageView {
public MyImageView(Context context) {
super(context);
}

View File

@ -21,14 +21,15 @@ public class AboutActivity extends AppCompatActivity {
@BindView(R.id.about_copyright) TextView copyright;
@BindView(R.id.about_version) TextView version;
@BindView(R.id.about_email) TextView emailTV;
private Resources res;
private static Resources mRes;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_about);
ButterKnife.bind(this);
res = getResources();
mRes = getResources();
setupEmail();
setupVersion();
@ -36,8 +37,8 @@ public class AboutActivity extends AppCompatActivity {
}
private void setupEmail() {
final String email = res.getString(R.string.email);
final String appName = res.getString(R.string.app_name);
final String email = mRes.getString(R.string.email);
final String appName = mRes.getString(R.string.app_name);
final String href = "<a href=\"mailto:" + email + "?subject=" + appName + "\">" + email + "</a>";
emailTV.setText(Html.fromHtml(href));
emailTV.setMovementMethod(LinkMovementMethod.getInstance());
@ -45,13 +46,13 @@ public class AboutActivity extends AppCompatActivity {
private void setupVersion() {
final String versionName = BuildConfig.VERSION_NAME;
final String versionText = String.format(res.getString(R.string.version), versionName);
final String versionText = String.format(mRes.getString(R.string.version), versionName);
version.setText(versionText);
}
private void setupCopyright() {
final int year = Calendar.getInstance().get(Calendar.YEAR);
final String copyrightText = String.format(res.getString(R.string.copyright), year);
final String copyrightText = String.format(mRes.getString(R.string.copyright), year);
copyright.setText(copyrightText);
}

View File

@ -11,6 +11,7 @@ import butterknife.ButterKnife;
import butterknife.OnClick;
public class LicenseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

View File

@ -45,33 +45,34 @@ import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity
implements AdapterView.OnItemClickListener, GridView.MultiChoiceModeListener, GridView.OnTouchListener {
@BindView(R.id.directories_grid) GridView gridView;
@BindView(R.id.directories_grid) GridView mGridView;
private static final int STORAGE_PERMISSION = 1;
private static final int PICK_MEDIA = 2;
private List<Directory> dirs;
private int selectedItemsCnt;
private Snackbar snackbar;
private boolean isSnackbarShown;
private List<String> toBeDeleted;
private ActionMode actionMode;
private Parcelable state;
private boolean isPickImageIntent;
private boolean isPickVideoIntent;
private static List<Directory> mDirs;
private static Snackbar mSnackbar;
private static List<String> mToBeDeleted;
private static ActionMode mActionMode;
private static Parcelable mState;
private static boolean mIsSnackbarShown;
private static boolean mIsPickImageIntent;
private static boolean mIsPickVideoIntent;
private static int mSelectedItemsCnt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
isPickImageIntent = isPickImageIntent(getIntent());
isPickVideoIntent = isPickVideoIntent(getIntent());
mIsPickImageIntent = isPickImageIntent(getIntent());
mIsPickVideoIntent = isPickVideoIntent(getIntent());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@ -91,16 +92,16 @@ public class MainActivity extends AppCompatActivity
protected void onResume() {
super.onResume();
tryloadGallery();
if (state != null && gridView != null)
gridView.onRestoreInstanceState(state);
if (mState != null && mGridView != null)
mGridView.onRestoreInstanceState(mState);
}
@Override
protected void onPause() {
super.onPause();
deleteDirs();
if (gridView != null)
state = gridView.onSaveInstanceState();
if (mGridView != null)
mState = mGridView.onSaveInstanceState();
}
private void tryloadGallery() {
@ -126,26 +127,26 @@ public class MainActivity extends AppCompatActivity
}
private void initializeGallery() {
toBeDeleted = new ArrayList<>();
dirs = getDirectories();
final DirectoryAdapter adapter = new DirectoryAdapter(this, dirs);
mToBeDeleted = new ArrayList<>();
mDirs = getDirectories();
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(this);
gridView.setMultiChoiceModeListener(this);
gridView.setOnTouchListener(this);
final DirectoryAdapter adapter = new DirectoryAdapter(this, mDirs);
mGridView.setAdapter(adapter);
mGridView.setOnItemClickListener(this);
mGridView.setMultiChoiceModeListener(this);
mGridView.setOnTouchListener(this);
}
private List<Directory> getDirectories() {
final Map<String, Directory> directories = new LinkedHashMap<>();
final List<String> invalidFiles = new ArrayList<>();
for (int i = 0; i < 2; i++) {
if (isPickVideoIntent && i == 0)
if (mIsPickVideoIntent && i == 0)
continue;
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
if (i == 1) {
if (isPickImageIntent)
if (mIsPickImageIntent)
continue;
uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
@ -172,7 +173,7 @@ public class MainActivity extends AppCompatActivity
final Directory directory = directories.get(fileDir);
final int newImageCnt = directory.getMediaCnt() + 1;
directory.setMediaCnt(newImageCnt);
} else if (!toBeDeleted.contains(fileDir)) {
} else if (!mToBeDeleted.contains(fileDir)) {
final String dirName = Utils.getFilename(fileDir);
directories.put(fileDir, new Directory(fileDir, path, dirName, 1, timestamp));
}
@ -192,14 +193,14 @@ public class MainActivity extends AppCompatActivity
private void prepareForDeleting() {
Utils.showToast(this, R.string.deleting);
final SparseBooleanArray items = gridView.getCheckedItemPositions();
int cnt = items.size();
final SparseBooleanArray items = mGridView.getCheckedItemPositions();
final int cnt = items.size();
int deletedCnt = 0;
for (int i = 0; i < cnt; i++) {
if (items.valueAt(i)) {
final int id = items.keyAt(i);
final String path = dirs.get(id).getPath();
toBeDeleted.add(path);
final String path = mDirs.get(id).getPath();
mToBeDeleted.add(path);
deletedCnt++;
}
}
@ -208,31 +209,31 @@ public class MainActivity extends AppCompatActivity
}
private void notifyDeletion(int cnt) {
dirs = getDirectories();
mDirs = getDirectories();
final CoordinatorLayout coordinator = (CoordinatorLayout) findViewById(R.id.coordinator_layout);
final Resources res = getResources();
final String msg = res.getQuantityString(R.plurals.folders_deleted, cnt, cnt);
snackbar = Snackbar.make(coordinator, msg, Snackbar.LENGTH_INDEFINITE);
snackbar.setAction(res.getString(R.string.undo), undoDeletion);
snackbar.setActionTextColor(Color.WHITE);
snackbar.show();
isSnackbarShown = true;
mSnackbar = Snackbar.make(coordinator, msg, Snackbar.LENGTH_INDEFINITE);
mSnackbar.setAction(res.getString(R.string.undo), undoDeletion);
mSnackbar.setActionTextColor(Color.WHITE);
mSnackbar.show();
mIsSnackbarShown = true;
updateGridView();
}
private void deleteDirs() {
if (toBeDeleted == null || toBeDeleted.isEmpty())
if (mToBeDeleted == null || mToBeDeleted.isEmpty())
return;
if (snackbar != null) {
snackbar.dismiss();
if (mSnackbar != null) {
mSnackbar.dismiss();
}
isSnackbarShown = false;
mIsSnackbarShown = false;
final List<String> updatedFiles = new ArrayList<>();
for (String delPath : toBeDeleted) {
for (String delPath : mToBeDeleted) {
final File dir = new File(delPath);
if (dir.exists()) {
final File[] files = dir.listFiles();
@ -247,32 +248,32 @@ public class MainActivity extends AppCompatActivity
final String[] deletedPaths = updatedFiles.toArray(new String[updatedFiles.size()]);
MediaScannerConnection.scanFile(this, deletedPaths, null, null);
toBeDeleted.clear();
mToBeDeleted.clear();
}
private View.OnClickListener undoDeletion = new View.OnClickListener() {
@Override
public void onClick(View v) {
snackbar.dismiss();
isSnackbarShown = false;
toBeDeleted.clear();
dirs = getDirectories();
mSnackbar.dismiss();
mIsSnackbarShown = false;
mToBeDeleted.clear();
mDirs = getDirectories();
updateGridView();
}
};
private void updateGridView() {
final DirectoryAdapter adapter = (DirectoryAdapter) gridView.getAdapter();
adapter.updateItems(dirs);
final DirectoryAdapter adapter = (DirectoryAdapter) mGridView.getAdapter();
adapter.updateItems(mDirs);
}
private void editDirectory() {
final SparseBooleanArray items = gridView.getCheckedItemPositions();
final SparseBooleanArray items = mGridView.getCheckedItemPositions();
final int cnt = items.size();
for (int i = 0; i < cnt; i++) {
if (items.valueAt(i)) {
final int id = items.keyAt(i);
final String path = dirs.get(id).getPath();
final String path = mDirs.get(id).getPath();
renameDir(path);
break;
}
@ -312,7 +313,7 @@ public class MainActivity extends AppCompatActivity
if (dir.renameTo(newDir)) {
Utils.showToast(getApplicationContext(), R.string.renaming_folder);
alertDialog.dismiss();
actionMode.finish();
mActionMode.finish();
final File[] files = newDir.listFiles();
for (File f : files) {
@ -361,22 +362,22 @@ public class MainActivity extends AppCompatActivity
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
final Intent intent = new Intent(this, MediaActivity.class);
intent.putExtra(Constants.DIRECTORY, dirs.get(position).getPath());
intent.putExtra(Constants.PICK_IMAGE_INTENT, isPickImageIntent);
intent.putExtra(Constants.PICK_VIDEO_INTENT, isPickVideoIntent);
intent.putExtra(Constants.DIRECTORY, mDirs.get(position).getPath());
intent.putExtra(Constants.PICK_IMAGE_INTENT, mIsPickImageIntent);
intent.putExtra(Constants.PICK_VIDEO_INTENT, mIsPickVideoIntent);
startActivityForResult(intent, PICK_MEDIA);
}
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
if (checked) {
selectedItemsCnt++;
mSelectedItemsCnt++;
} else {
selectedItemsCnt--;
mSelectedItemsCnt--;
}
if (selectedItemsCnt > 0) {
mode.setTitle(String.valueOf(selectedItemsCnt));
if (mSelectedItemsCnt > 0) {
mode.setTitle(String.valueOf(mSelectedItemsCnt));
}
mode.invalidate();
@ -386,14 +387,14 @@ public class MainActivity extends AppCompatActivity
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
final MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.directories_menu, menu);
actionMode = mode;
mActionMode = mode;
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
final MenuItem menuItem = menu.findItem(R.id.cab_edit);
menuItem.setVisible(selectedItemsCnt == 1);
menuItem.setVisible(mSelectedItemsCnt == 1);
return true;
}
@ -414,12 +415,12 @@ public class MainActivity extends AppCompatActivity
@Override
public void onDestroyActionMode(ActionMode mode) {
selectedItemsCnt = 0;
mSelectedItemsCnt = 0;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (isSnackbarShown) {
if (mIsSnackbarShown) {
deleteDirs();
}
@ -429,13 +430,13 @@ public class MainActivity extends AppCompatActivity
private void scanCompleted(final String path) {
final File dir = new File(path);
if (dir.isDirectory()) {
dirs = getDirectories();
mDirs = getDirectories();
runOnUiThread(new Runnable() {
@Override
public void run() {
updateGridView();
gridView.requestLayout();
mGridView.requestLayout();
Utils.showToast(getApplicationContext(), R.string.rename_folder_ok);
}
});

View File

@ -39,41 +39,42 @@ import butterknife.ButterKnife;
public class MediaActivity extends AppCompatActivity
implements AdapterView.OnItemClickListener, GridView.MultiChoiceModeListener, GridView.OnTouchListener {
@BindView(R.id.media_grid) GridView gridView;
@BindView(R.id.media_grid) GridView mGridView;
private List<Medium> media;
private int selectedItemsCnt;
private String path;
private Snackbar snackbar;
private boolean isSnackbarShown;
private List<String> toBeDeleted;
private Parcelable state;
private boolean isPickImageIntent;
private boolean isPickVideoIntent;
private static List<Medium> mMedia;
private static String mPath;
private static Snackbar mSnackbar;
private static List<String> mToBeDeleted;
private static Parcelable mState;
private static boolean mIsSnackbarShown;
private static boolean mIsPickImageIntent;
private static boolean mIsPickVideoIntent;
private static int mSelectedItemsCnt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_media);
ButterKnife.bind(this);
isPickImageIntent = getIntent().getBooleanExtra(Constants.PICK_IMAGE_INTENT, false);
isPickVideoIntent = getIntent().getBooleanExtra(Constants.PICK_VIDEO_INTENT, false);
mIsPickImageIntent = getIntent().getBooleanExtra(Constants.PICK_IMAGE_INTENT, false);
mIsPickVideoIntent = getIntent().getBooleanExtra(Constants.PICK_VIDEO_INTENT, false);
}
@Override
protected void onResume() {
super.onResume();
tryloadGallery();
if (state != null && gridView != null)
gridView.onRestoreInstanceState(state);
if (mState != null && mGridView != null)
mGridView.onRestoreInstanceState(mState);
}
@Override
protected void onPause() {
super.onPause();
deleteFiles();
if (gridView != null)
state = gridView.onSaveInstanceState();
if (mGridView != null)
mState = mGridView.onSaveInstanceState();
}
private void tryloadGallery() {
@ -85,60 +86,60 @@ public class MediaActivity extends AppCompatActivity
}
private void initializeGallery() {
toBeDeleted = new ArrayList<>();
path = getIntent().getStringExtra(Constants.DIRECTORY);
media = getMedia();
mToBeDeleted = new ArrayList<>();
mPath = getIntent().getStringExtra(Constants.DIRECTORY);
mMedia = getMedia();
if (isDirEmpty())
return;
final MediaAdapter adapter = new MediaAdapter(this, media);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(this);
gridView.setMultiChoiceModeListener(this);
gridView.setOnTouchListener(this);
isSnackbarShown = false;
final MediaAdapter adapter = new MediaAdapter(this, mMedia);
mGridView.setAdapter(adapter);
mGridView.setOnItemClickListener(this);
mGridView.setMultiChoiceModeListener(this);
mGridView.setOnTouchListener(this);
mIsSnackbarShown = false;
final String dirName = Utils.getFilename(path);
final String dirName = Utils.getFilename(mPath);
setTitle(dirName);
}
private void deleteDirectoryIfEmpty() {
final File file = new File(path);
final File file = new File(mPath);
if (file.isDirectory() && file.listFiles().length == 0) {
file.delete();
}
}
private List<Medium> getMedia() {
final List<Medium> myMedia = new ArrayList<>();
final List<Medium> media = new ArrayList<>();
final List<String> invalidFiles = new ArrayList<>();
for (int i = 0; i < 2; i++) {
if (isPickVideoIntent && i == 0)
if (mIsPickVideoIntent && i == 0)
continue;
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
if (i == 1) {
if (isPickImageIntent)
if (mIsPickImageIntent)
continue;
uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
}
final String where = MediaStore.Images.Media.DATA + " like ? ";
final String[] args = new String[]{path + "%"};
final String[] args = new String[]{mPath + "%"};
final String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.DATE_TAKEN};
final Cursor cursor = getContentResolver().query(uri, columns, where, args, null);
final String pattern = Pattern.quote(path) + "/[^/]*";
final String pattern = Pattern.quote(mPath) + "/[^/]*";
if (cursor != null && cursor.moveToFirst()) {
final int pathIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
do {
final String curPath = cursor.getString(pathIndex);
if (curPath.matches(pattern) && !toBeDeleted.contains(curPath)) {
if (curPath.matches(pattern) && !mToBeDeleted.contains(curPath)) {
final File file = new File(curPath);
if (file.exists()) {
final int dateIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN);
final long timestamp = cursor.getLong(dateIndex);
myMedia.add(new Medium(curPath, (i == 1), timestamp));
media.add(new Medium(curPath, (i == 1), timestamp));
} else {
invalidFiles.add(file.getAbsolutePath());
}
@ -148,16 +149,16 @@ public class MediaActivity extends AppCompatActivity
}
}
Collections.sort(myMedia);
Collections.sort(media);
final String[] invalids = invalidFiles.toArray(new String[invalidFiles.size()]);
MediaScannerConnection.scanFile(getApplicationContext(), invalids, null, null);
return myMedia;
return media;
}
private boolean isDirEmpty() {
if (media.size() <= 0) {
if (mMedia.size() <= 0) {
deleteDirectoryIfEmpty();
finish();
return true;
@ -167,14 +168,14 @@ public class MediaActivity extends AppCompatActivity
private void prepareForDeleting() {
Utils.showToast(this, R.string.deleting);
final SparseBooleanArray items = gridView.getCheckedItemPositions();
int cnt = items.size();
final SparseBooleanArray items = mGridView.getCheckedItemPositions();
final int cnt = items.size();
int deletedCnt = 0;
for (int i = 0; i < cnt; i++) {
if (items.valueAt(i)) {
final int id = items.keyAt(i);
final String path = media.get(id).getPath();
toBeDeleted.add(path);
final String path = mMedia.get(id).getPath();
mToBeDeleted.add(path);
deletedCnt++;
}
}
@ -183,79 +184,79 @@ public class MediaActivity extends AppCompatActivity
}
private void notifyDeletion(int cnt) {
media = getMedia();
mMedia = getMedia();
if (media.isEmpty()) {
if (mMedia.isEmpty()) {
deleteFiles();
} else {
final CoordinatorLayout coordinator = (CoordinatorLayout) findViewById(R.id.coordinator_layout);
final Resources res = getResources();
final String msg = res.getQuantityString(R.plurals.files_deleted, cnt, cnt);
snackbar = Snackbar.make(coordinator, msg, Snackbar.LENGTH_INDEFINITE);
snackbar.setAction(res.getString(R.string.undo), undoDeletion);
snackbar.setActionTextColor(Color.WHITE);
snackbar.show();
isSnackbarShown = true;
mSnackbar = Snackbar.make(coordinator, msg, Snackbar.LENGTH_INDEFINITE);
mSnackbar.setAction(res.getString(R.string.undo), undoDeletion);
mSnackbar.setActionTextColor(Color.WHITE);
mSnackbar.show();
mIsSnackbarShown = true;
updateGridView();
}
}
private void deleteFiles() {
if (toBeDeleted == null || toBeDeleted.isEmpty())
if (mToBeDeleted == null || mToBeDeleted.isEmpty())
return;
if (snackbar != null) {
snackbar.dismiss();
if (mSnackbar != null) {
mSnackbar.dismiss();
}
isSnackbarShown = false;
mIsSnackbarShown = false;
for (String delPath : toBeDeleted) {
for (String delPath : mToBeDeleted) {
final File file = new File(delPath);
if (file.exists())
file.delete();
}
final String[] deletedPaths = toBeDeleted.toArray(new String[toBeDeleted.size()]);
final String[] deletedPaths = mToBeDeleted.toArray(new String[mToBeDeleted.size()]);
MediaScannerConnection.scanFile(this, deletedPaths, null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
if (media != null && media.isEmpty()) {
if (mMedia != null && mMedia.isEmpty()) {
finish();
}
}
});
toBeDeleted.clear();
mToBeDeleted.clear();
}
private View.OnClickListener undoDeletion = new View.OnClickListener() {
@Override
public void onClick(View v) {
snackbar.dismiss();
isSnackbarShown = false;
toBeDeleted.clear();
media = getMedia();
mSnackbar.dismiss();
mIsSnackbarShown = false;
mToBeDeleted.clear();
mMedia = getMedia();
updateGridView();
}
};
private void updateGridView() {
if (!isDirEmpty()) {
final MediaAdapter adapter = (MediaAdapter) gridView.getAdapter();
adapter.updateItems(media);
final MediaAdapter adapter = (MediaAdapter) mGridView.getAdapter();
adapter.updateItems(mMedia);
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (isPickImageIntent || isPickVideoIntent) {
if (mIsPickImageIntent || mIsPickVideoIntent) {
final Intent result = new Intent();
result.setData(Uri.parse(media.get(position).getPath()));
result.setData(Uri.parse(mMedia.get(position).getPath()));
setResult(RESULT_OK, result);
finish();
} else {
final Intent intent = new Intent(this, ViewPagerActivity.class);
intent.putExtra(Constants.MEDIUM, media.get(position).getPath());
intent.putExtra(Constants.MEDIUM, mMedia.get(position).getPath());
startActivity(intent);
}
}
@ -263,13 +264,13 @@ public class MediaActivity extends AppCompatActivity
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
if (checked) {
selectedItemsCnt++;
mSelectedItemsCnt++;
} else {
selectedItemsCnt--;
mSelectedItemsCnt--;
}
if (selectedItemsCnt > 0)
mode.setTitle(String.valueOf(selectedItemsCnt));
if (mSelectedItemsCnt > 0)
mode.setTitle(String.valueOf(mSelectedItemsCnt));
mode.invalidate();
}
@ -300,12 +301,12 @@ public class MediaActivity extends AppCompatActivity
@Override
public void onDestroyActionMode(ActionMode mode) {
selectedItemsCnt = 0;
mSelectedItemsCnt = 0;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if (isSnackbarShown) {
if (mIsSnackbarShown) {
deleteFiles();
}

View File

@ -16,32 +16,33 @@ import com.simplemobiletools.gallery.fragments.ViewPagerFragment;
import com.simplemobiletools.gallery.models.Medium;
public class PhotoActivity extends AppCompatActivity implements ViewPagerFragment.FragmentClickListener {
private ActionBar actionbar;
private boolean isFullScreen;
private Uri uri;
private static ActionBar mActionbar;
private static Uri mUri;
private static boolean mIsFullScreen;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_holder);
uri = getIntent().getData();
if (uri == null)
mUri = getIntent().getData();
if (mUri == null)
return;
actionbar = getSupportActionBar();
isFullScreen = true;
mActionbar = getSupportActionBar();
mIsFullScreen = true;
hideSystemUI();
final Bundle bundle = new Bundle();
final Medium medium = new Medium(uri.toString(), false, 0);
final Medium medium = new Medium(mUri.toString(), false, 0);
bundle.putSerializable(Constants.MEDIUM, medium);
final ViewPagerFragment fragment = new PhotoFragment();
fragment.setListener(this);
fragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_holder, fragment).commit();
hideSystemUI();
setTitle(Utils.getFilename(uri.toString()));
setTitle(Utils.getFilename(mUri.toString()));
}
@Override
@ -65,15 +66,15 @@ public class PhotoActivity extends AppCompatActivity implements ViewPagerFragmen
final String shareTitle = getResources().getString(R.string.share_via);
final Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.putExtra(Intent.EXTRA_STREAM, mUri);
sendIntent.setType("image/*");
startActivity(Intent.createChooser(sendIntent, shareTitle));
}
@Override
public void fragmentClicked() {
isFullScreen = !isFullScreen;
if (isFullScreen) {
mIsFullScreen = !mIsFullScreen;
if (mIsFullScreen) {
hideSystemUI();
} else {
showSystemUI();
@ -81,10 +82,10 @@ public class PhotoActivity extends AppCompatActivity implements ViewPagerFragmen
}
private void hideSystemUI() {
Utils.hideSystemUI(actionbar, getWindow());
Utils.hideSystemUI(mActionbar, getWindow());
}
private void showSystemUI() {
Utils.showSystemUI(actionbar, getWindow());
Utils.showSystemUI(mActionbar, getWindow());
}
}

View File

@ -16,32 +16,33 @@ import com.simplemobiletools.gallery.fragments.ViewPagerFragment;
import com.simplemobiletools.gallery.models.Medium;
public class VideoActivity extends AppCompatActivity implements ViewPagerFragment.FragmentClickListener {
private ActionBar actionbar;
private boolean isFullScreen;
private Uri uri;
private static ActionBar mActionbar;
private static Uri mUri;
private static boolean mIsFullScreen;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_holder);
uri = getIntent().getData();
if (uri == null)
mUri = getIntent().getData();
if (mUri == null)
return;
actionbar = getSupportActionBar();
isFullScreen = true;
mActionbar = getSupportActionBar();
mIsFullScreen = true;
hideSystemUI();
final Bundle bundle = new Bundle();
final Medium medium = new Medium(uri.toString(), true, 0);
final Medium medium = new Medium(mUri.toString(), true, 0);
bundle.putSerializable(Constants.MEDIUM, medium);
final ViewPagerFragment fragment = new VideoFragment();
fragment.setListener(this);
fragment.setArguments(bundle);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_holder, fragment).commit();
hideSystemUI();
setTitle(Utils.getFilename(uri.toString()));
setTitle(Utils.getFilename(mUri.toString()));
}
@Override
@ -65,15 +66,15 @@ public class VideoActivity extends AppCompatActivity implements ViewPagerFragmen
final String shareTitle = getResources().getString(R.string.share_via);
final Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
sendIntent.putExtra(Intent.EXTRA_STREAM, mUri);
sendIntent.setType("video/*");
startActivity(Intent.createChooser(sendIntent, shareTitle));
}
@Override
public void fragmentClicked() {
isFullScreen = !isFullScreen;
if (isFullScreen) {
mIsFullScreen = !mIsFullScreen;
if (mIsFullScreen) {
hideSystemUI();
} else {
showSystemUI();
@ -81,10 +82,10 @@ public class VideoActivity extends AppCompatActivity implements ViewPagerFragmen
}
private void hideSystemUI() {
Utils.hideSystemUI(actionbar, getWindow());
Utils.hideSystemUI(mActionbar, getWindow());
}
private void showSystemUI() {
Utils.showSystemUI(actionbar, getWindow());
Utils.showSystemUI(mActionbar, getWindow());
}
}

View File

@ -40,18 +40,19 @@ import butterknife.OnClick;
public class ViewPagerActivity extends AppCompatActivity
implements ViewPager.OnPageChangeListener, View.OnSystemUiVisibilityChangeListener, ViewPager.OnTouchListener,
ViewPagerFragment.FragmentClickListener {
@BindView(R.id.undo_delete) View undoBtn;
@BindView(R.id.view_pager) MyViewPager pager;
@BindView(R.id.undo_delete) View mUndoBtn;
@BindView(R.id.view_pager) MyViewPager mPager;
private int pos;
private boolean isFullScreen;
private boolean isUndoShown;
private ActionBar actionbar;
private List<Medium> media;
private String path;
private String directory;
private String toBeDeleted;
private String beingDeleted;
private static ActionBar mActionbar;
private static List<Medium> mMedia;
private static String mPath;
private static String mDirectory;
private static String mToBeDeleted;
private static String mBeingDeleted;
private static boolean mIsFullScreen;
private static boolean mIsUndoShown;
private static int mPos;
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -64,26 +65,26 @@ public class ViewPagerActivity extends AppCompatActivity
return;
}
pos = 0;
isFullScreen = true;
actionbar = getSupportActionBar();
toBeDeleted = "";
beingDeleted = "";
mPos = 0;
mIsFullScreen = true;
mActionbar = getSupportActionBar();
mToBeDeleted = "";
mBeingDeleted = "";
hideSystemUI();
path = getIntent().getStringExtra(Constants.MEDIUM);
MediaScannerConnection.scanFile(this, new String[]{path}, null, null);
mPath = getIntent().getStringExtra(Constants.MEDIUM);
MediaScannerConnection.scanFile(this, new String[]{mPath}, null, null);
addUndoMargin();
directory = new File(path).getParent();
media = getMedia();
mDirectory = new File(mPath).getParent();
mMedia = getMedia();
if (isDirEmpty())
return;
final MyPagerAdapter adapter = new MyPagerAdapter(this, getSupportFragmentManager(), media);
pager.setAdapter(adapter);
pager.setCurrentItem(pos);
pager.addOnPageChangeListener(this);
pager.setOnTouchListener(this);
final MyPagerAdapter adapter = new MyPagerAdapter(this, getSupportFragmentManager(), mMedia);
mPager.setAdapter(adapter);
mPager.setCurrentItem(mPos);
mPager.addOnPageChangeListener(this);
mPager.setOnTouchListener(this);
getWindow().getDecorView().setOnSystemUiVisibilityChangeListener(this);
updateActionbarTitle();
@ -99,10 +100,10 @@ public class ViewPagerActivity extends AppCompatActivity
@OnClick(R.id.undo_delete)
public void undoDeletion() {
isUndoShown = false;
toBeDeleted = "";
beingDeleted = "";
undoBtn.setVisibility(View.GONE);
mIsUndoShown = false;
mToBeDeleted = "";
mBeingDeleted = "";
mUndoBtn.setVisibility(View.GONE);
reloadViewPager();
}
@ -138,37 +139,38 @@ public class ViewPagerActivity extends AppCompatActivity
final Uri uri = Uri.fromFile(file);
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_STREAM, uri);
if (medium.getIsVideo())
if (medium.getIsVideo()) {
sendIntent.setType("video/*");
else
} else {
sendIntent.setType("image/*");
}
startActivity(Intent.createChooser(sendIntent, shareTitle));
}
private void notifyDeletion() {
toBeDeleted = getCurrentFile().getAbsolutePath();
mToBeDeleted = getCurrentFile().getAbsolutePath();
if (media.size() <= 1) {
if (mMedia.size() <= 1) {
deleteFile();
} else {
Utils.showToast(this, R.string.file_deleted);
undoBtn.setVisibility(View.VISIBLE);
isUndoShown = true;
mUndoBtn.setVisibility(View.VISIBLE);
mIsUndoShown = true;
reloadViewPager();
}
}
private void deleteFile() {
if (toBeDeleted.isEmpty())
if (mToBeDeleted.isEmpty())
return;
isUndoShown = false;
beingDeleted = "";
mIsUndoShown = false;
mBeingDeleted = "";
final File file = new File(toBeDeleted);
final File file = new File(mToBeDeleted);
if (file.delete()) {
beingDeleted = toBeDeleted;
final String[] deletedPath = new String[]{toBeDeleted};
mBeingDeleted = mToBeDeleted;
final String[] deletedPath = new String[]{mToBeDeleted};
MediaScannerConnection.scanFile(this, deletedPath, null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
@ -176,12 +178,12 @@ public class ViewPagerActivity extends AppCompatActivity
}
});
}
toBeDeleted = "";
undoBtn.setVisibility(View.GONE);
mToBeDeleted = "";
mUndoBtn.setVisibility(View.GONE);
}
private boolean isDirEmpty() {
if (media.size() <= 0) {
if (mMedia.size() <= 0) {
deleteDirectoryIfEmpty();
finish();
return true;
@ -229,8 +231,8 @@ public class ViewPagerActivity extends AppCompatActivity
final File newFile = new File(file.getParent(), fileName + "." + extension);
if (file.renameTo(newFile)) {
final int currItem = pager.getCurrentItem();
media.set(currItem, new Medium(newFile.getAbsolutePath(), media.get(currItem).getIsVideo(), 0));
final int currItem = mPager.getCurrentItem();
mMedia.set(currItem, new Medium(newFile.getAbsolutePath(), mMedia.get(currItem).getIsVideo(), 0));
final String[] changedFiles = {file.getAbsolutePath(), newFile.getAbsolutePath()};
MediaScannerConnection.scanFile(getApplicationContext(), changedFiles, null, null);
@ -244,75 +246,75 @@ public class ViewPagerActivity extends AppCompatActivity
}
private void reloadViewPager() {
final MyPagerAdapter adapter = (MyPagerAdapter) pager.getAdapter();
final int curPos = pager.getCurrentItem();
media = getMedia();
final MyPagerAdapter adapter = (MyPagerAdapter) mPager.getAdapter();
final int curPos = mPager.getCurrentItem();
mMedia = getMedia();
if (isDirEmpty())
return;
pager.setAdapter(null);
adapter.updateItems(media);
pager.setAdapter(adapter);
mPager.setAdapter(null);
adapter.updateItems(mMedia);
mPager.setAdapter(adapter);
final int newPos = Math.min(curPos, adapter.getCount());
pager.setCurrentItem(newPos);
mPager.setCurrentItem(newPos);
updateActionbarTitle();
}
private void deleteDirectoryIfEmpty() {
final File file = new File(directory);
final File file = new File(mDirectory);
if (file.isDirectory() && file.listFiles().length == 0) {
file.delete();
}
final String[] toBeDeleted = new String[]{directory};
final String[] toBeDeleted = new String[]{mDirectory};
MediaScannerConnection.scanFile(getApplicationContext(), toBeDeleted, null, null);
}
private List<Medium> getMedia() {
final List<Medium> myMedia = new ArrayList<>();
final List<Medium> media = new ArrayList<>();
for (int i = 0; i < 2; i++) {
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
if (i == 1) {
uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
}
final String where = MediaStore.Images.Media.DATA + " like ? ";
final String[] args = new String[]{directory + "%"};
final String[] args = new String[]{mDirectory + "%"};
final String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.DATE_TAKEN};
final Cursor cursor = getContentResolver().query(uri, columns, where, args, null);
final String pattern = Pattern.quote(directory) + "/[^/]*";
final String pattern = Pattern.quote(mDirectory) + "/[^/]*";
if (cursor != null && cursor.moveToFirst()) {
final int pathIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
do {
final String curPath = cursor.getString(pathIndex);
if (curPath.matches(pattern) && !curPath.equals(toBeDeleted) && !curPath.equals(beingDeleted)) {
if (curPath.matches(pattern) && !curPath.equals(mToBeDeleted) && !curPath.equals(mBeingDeleted)) {
final int dateIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN);
final long timestamp = cursor.getLong(dateIndex);
myMedia.add(new Medium(curPath, i == 1, timestamp));
media.add(new Medium(curPath, i == 1, timestamp));
}
} while (cursor.moveToNext());
cursor.close();
}
}
Collections.sort(myMedia);
Collections.sort(media);
int j = 0;
for (Medium medium : myMedia) {
if (medium.getPath().equals(path)) {
pos = j;
for (Medium medium : media) {
if (medium.getPath().equals(mPath)) {
mPos = j;
break;
}
j++;
}
return myMedia;
return media;
}
@Override
public void fragmentClicked() {
deleteFile();
isFullScreen = !isFullScreen;
if (isFullScreen) {
mIsFullScreen = !mIsFullScreen;
if (mIsFullScreen) {
hideSystemUI();
} else {
showSystemUI();
@ -320,21 +322,21 @@ public class ViewPagerActivity extends AppCompatActivity
}
private void hideSystemUI() {
Utils.hideSystemUI(actionbar, getWindow());
Utils.hideSystemUI(mActionbar, getWindow());
}
private void showSystemUI() {
Utils.showSystemUI(actionbar, getWindow());
Utils.showSystemUI(mActionbar, getWindow());
}
private void updateActionbarTitle() {
setTitle(Utils.getFilename(media.get(pager.getCurrentItem()).getPath()));
setTitle(Utils.getFilename(mMedia.get(mPager.getCurrentItem()).getPath()));
}
private Medium getCurrentMedium() {
if (pos >= media.size())
pos = media.size() - 1;
return media.get(pos);
if (mPos >= mMedia.size())
mPos = mMedia.size() - 1;
return mMedia.get(mPos);
}
private File getCurrentFile() {
@ -343,7 +345,7 @@ public class ViewPagerActivity extends AppCompatActivity
private void addUndoMargin() {
final Resources res = getResources();
final RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) undoBtn.getLayoutParams();
final RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mUndoBtn.getLayoutParams();
final int topMargin = Utils.getStatusBarHeight(res) + Utils.getActionBarHeight(getApplicationContext(), res);
int rightMargin = params.rightMargin;
@ -362,33 +364,33 @@ public class ViewPagerActivity extends AppCompatActivity
@Override
public void onPageSelected(int position) {
updateActionbarTitle();
pos = position;
mPos = position;
}
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_DRAGGING) {
final MyPagerAdapter adapter = (MyPagerAdapter) pager.getAdapter();
adapter.itemDragged(pos);
final MyPagerAdapter adapter = (MyPagerAdapter) mPager.getAdapter();
adapter.itemDragged(mPos);
}
}
@Override
public void onSystemUiVisibilityChange(int visibility) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
isFullScreen = false;
mIsFullScreen = false;
}
final MyPagerAdapter adapter = (MyPagerAdapter) pager.getAdapter();
adapter.updateUiVisibility(isFullScreen, pos);
final MyPagerAdapter adapter = (MyPagerAdapter) mPager.getAdapter();
adapter.updateUiVisibility(mIsFullScreen, mPos);
}
private void scanCompleted() {
beingDeleted = "";
mBeingDeleted = "";
runOnUiThread(new Runnable() {
@Override
public void run() {
if (media != null && media.size() <= 1) {
if (mMedia != null && mMedia.size() <= 1) {
reloadViewPager();
}
}
@ -397,7 +399,7 @@ public class ViewPagerActivity extends AppCompatActivity
@Override
public boolean onTouch(View v, MotionEvent event) {
if (isUndoShown) {
if (mIsUndoShown) {
deleteFile();
}

View File

@ -9,8 +9,8 @@ import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.simplemobiletools.gallery.models.Directory;
import com.simplemobiletools.gallery.R;
import com.simplemobiletools.gallery.models.Directory;
import java.util.List;
@ -18,43 +18,44 @@ import butterknife.BindView;
import butterknife.ButterKnife;
public class DirectoryAdapter extends BaseAdapter {
private final Context context;
private final List<Directory> dirs;
private final LayoutInflater inflater;
private final Context mContext;
private final List<Directory> mDirs;
private final LayoutInflater mInflater;
public DirectoryAdapter(Context context, List<Directory> dirs) {
this.context = context;
this.dirs = dirs;
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.mContext = context;
this.mDirs = dirs;
this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View view, ViewGroup parent) {
ViewHolder holder;
if (view == null) {
view = inflater.inflate(R.layout.directory_item, parent, false);
view = mInflater.inflate(R.layout.directory_item, parent, false);
holder = new ViewHolder(view);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}
final Directory dir = dirs.get(position);
final Directory dir = mDirs.get(position);
holder.dirName.setText(dir.getName());
holder.photoCnt.setText(String.valueOf(dir.getMediaCnt()));
Glide.with(context).load(dir.getThumbnail()).placeholder(R.color.tmb_background).centerCrop().crossFade().into(holder.dirThumbnail);
Glide.with(mContext).load(dir.getThumbnail()).placeholder(R.color.tmb_background).centerCrop().crossFade()
.into(holder.dirThumbnail);
return view;
}
@Override
public int getCount() {
return dirs.size();
return mDirs.size();
}
@Override
public Object getItem(int position) {
return dirs.get(position);
return mDirs.get(position);
}
@Override
@ -63,8 +64,8 @@ public class DirectoryAdapter extends BaseAdapter {
}
public void updateItems(List<Directory> newDirs) {
dirs.clear();
dirs.addAll(newDirs);
mDirs.clear();
mDirs.addAll(newDirs);
notifyDataSetChanged();
}

View File

@ -17,22 +17,22 @@ import butterknife.BindView;
import butterknife.ButterKnife;
public class MediaAdapter extends BaseAdapter {
private final Context context;
private final List<Medium> media;
private final LayoutInflater inflater;
private final Context mContext;
private final List<Medium> mMedia;
private final LayoutInflater mInflater;
public MediaAdapter(Context context, List<Medium> media) {
this.context = context;
this.media = media;
this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.mContext = context;
this.mMedia = media;
this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View view, ViewGroup parent) {
final Medium medium = media.get(position);
final Medium medium = mMedia.get(position);
ViewHolder holder;
if (view == null) {
view = inflater.inflate(R.layout.video_item, parent, false);
view = mInflater.inflate(R.layout.video_item, parent, false);
holder = new ViewHolder(view);
view.setTag(holder);
} else {
@ -46,19 +46,19 @@ public class MediaAdapter extends BaseAdapter {
}
final String path = medium.getPath();
Glide.with(context).load(path).placeholder(R.color.tmb_background).centerCrop().crossFade().into(holder.photoThumbnail);
Glide.with(mContext).load(path).placeholder(R.color.tmb_background).centerCrop().crossFade().into(holder.photoThumbnail);
return view;
}
@Override
public int getCount() {
return media.size();
return mMedia.size();
}
@Override
public Object getItem(int position) {
return media.get(position);
return mMedia.get(position);
}
@Override
@ -67,14 +67,14 @@ public class MediaAdapter extends BaseAdapter {
}
public void updateItems(List<Medium> newPhotos) {
media.clear();
media.addAll(newPhotos);
mMedia.clear();
mMedia.addAll(newPhotos);
notifyDataSetChanged();
}
static class ViewHolder {
@BindView(R.id.medium_thumbnail) ImageView photoThumbnail;
@BindView(R.id.play_outline) ImageView playOutline;
@BindView(R.id.play_outline) View playOutline;
public ViewHolder(View view) {
ButterKnife.bind(this, view);

View File

@ -17,25 +17,25 @@ import java.util.List;
import java.util.Map;
public class MyPagerAdapter extends FragmentStatePagerAdapter {
private List<Medium> media;
private Map<Integer, ViewPagerFragment> fragments;
private ViewPagerActivity activity;
private final List<Medium> mMedia;
private final Map<Integer, ViewPagerFragment> mFragments;
private final ViewPagerActivity mActivity;
public MyPagerAdapter(ViewPagerActivity act, FragmentManager fm, List<Medium> media) {
super(fm);
this.activity = act;
this.media = media;
fragments = new HashMap<>();
this.mActivity = act;
this.mMedia = media;
mFragments = new HashMap<>();
}
@Override
public int getCount() {
return media.size();
return mMedia.size();
}
@Override
public Fragment getItem(int position) {
final Medium medium = media.get(position);
final Medium medium = mMedia.get(position);
final Bundle bundle = new Bundle();
bundle.putSerializable(Constants.MEDIUM, medium);
ViewPagerFragment fragment;
@ -46,21 +46,21 @@ public class MyPagerAdapter extends FragmentStatePagerAdapter {
fragment = new PhotoFragment();
}
fragments.put(position, fragment);
mFragments.put(position, fragment);
fragment.setArguments(bundle);
fragment.setListener(activity);
fragment.setListener(mActivity);
return fragment;
}
public void itemDragged(int pos) {
if (fragments.get(pos) != null) {
fragments.get(pos).itemDragged();
if (mFragments.get(pos) != null) {
mFragments.get(pos).itemDragged();
}
}
public void updateUiVisibility(boolean isFullscreen, int pos) {
for (int i = -1; i <= 1; i++) {
ViewPagerFragment fragment = fragments.get(pos + i);
final ViewPagerFragment fragment = mFragments.get(pos + i);
if (fragment != null) {
fragment.systemUiVisibilityChanged(isFullscreen);
}
@ -68,8 +68,8 @@ public class MyPagerAdapter extends FragmentStatePagerAdapter {
}
public void updateItems(List<Medium> newPaths) {
media.clear();
media.addAll(newPaths);
mMedia.clear();
mMedia.addAll(newPaths);
notifyDataSetChanged();
}
}

View File

@ -37,10 +37,10 @@ public class PhotoFragment extends ViewPagerFragment implements View.OnClickList
@Override
public void onClick(View v) {
if (listener == null)
listener = (FragmentClickListener) getActivity();
if (mListener == null)
mListener = (FragmentClickListener) getActivity();
listener.fragmentClicked();
mListener.fragmentClicked();
}
@Override

View File

@ -35,33 +35,34 @@ public class VideoFragment extends ViewPagerFragment
SeekBar.OnSeekBarChangeListener, OnPreparedListener {
private static final String TAG = VideoFragment.class.getSimpleName();
private static final String PROGRESS = "progress";
private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private ImageView playOutline;
private TextView currTimeView;
private TextView durationView;
private Handler timerHandler;
private SeekBar seekBar;
private Medium medium;
private View timeHolder;
private boolean isPlaying;
private boolean isDragged;
private boolean isFullscreen;
private int currTime;
private int duration;
private MediaPlayer mMediaPlayer;
private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
private ImageView mPlayOutline;
private TextView mCurrTimeView;
private TextView mDurationView;
private Handler mTimerHandler;
private SeekBar mSeekBar;
private Medium mMedium;
private View mTimeHolder;
private boolean mIsPlaying;
private boolean mIsDragged;
private boolean mIsFullscreen;
private int mCurrTime;
private int mDuration;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.pager_video_item, container, false);
medium = (Medium) getArguments().getSerializable(Constants.MEDIUM);
mMedium = (Medium) getArguments().getSerializable(Constants.MEDIUM);
if (savedInstanceState != null) {
currTime = savedInstanceState.getInt(PROGRESS);
mCurrTime = savedInstanceState.getInt(PROGRESS);
}
isFullscreen = (getActivity().getWindow().getDecorView().getSystemUiVisibility() & View.SYSTEM_UI_FLAG_FULLSCREEN) ==
mIsFullscreen = (getActivity().getWindow().getDecorView().getSystemUiVisibility() & View.SYSTEM_UI_FLAG_FULLSCREEN) ==
View.SYSTEM_UI_FLAG_FULLSCREEN;
setupPlayer(view);
view.setOnClickListener(this);
@ -73,13 +74,13 @@ public class VideoFragment extends ViewPagerFragment
if (getActivity() == null)
return;
playOutline = (ImageView) view.findViewById(R.id.video_play_outline);
playOutline.setOnClickListener(this);
mPlayOutline = (ImageView) view.findViewById(R.id.video_play_outline);
mPlayOutline.setOnClickListener(this);
surfaceView = (SurfaceView) view.findViewById(R.id.video_surface);
surfaceView.setOnClickListener(this);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
mSurfaceView = (SurfaceView) view.findViewById(R.id.video_surface);
mSurfaceView.setOnClickListener(this);
mSurfaceHolder = mSurfaceView.getHolder();
mSurfaceHolder.addCallback(this);
initTimeHolder(view);
}
@ -90,42 +91,42 @@ public class VideoFragment extends ViewPagerFragment
@Override
public void systemUiVisibilityChanged(boolean toFullscreen) {
if (isFullscreen != toFullscreen) {
isFullscreen = toFullscreen;
if (mIsFullscreen != toFullscreen) {
mIsFullscreen = toFullscreen;
checkFullscreen();
}
}
private void initTimeHolder(View view) {
timeHolder = view.findViewById(R.id.video_time_holder);
mTimeHolder = view.findViewById(R.id.video_time_holder);
final Resources res = getResources();
final int height = Utils.getNavBarHeight(res);
final int left = timeHolder.getPaddingLeft();
final int top = timeHolder.getPaddingTop();
final int right = timeHolder.getPaddingRight();
final int bottom = timeHolder.getPaddingBottom();
final int left = mTimeHolder.getPaddingLeft();
final int top = mTimeHolder.getPaddingTop();
final int right = mTimeHolder.getPaddingRight();
final int bottom = mTimeHolder.getPaddingBottom();
if (Utils.hasNavBar(res)) {
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
timeHolder.setPadding(left, top, right, bottom + height);
mTimeHolder.setPadding(left, top, right, bottom + height);
} else {
timeHolder.setPadding(left, top, right + height, bottom);
mTimeHolder.setPadding(left, top, right + height, bottom);
}
}
currTimeView = (TextView) view.findViewById(R.id.video_curr_time);
durationView = (TextView) view.findViewById(R.id.video_duration);
seekBar = (SeekBar) view.findViewById(R.id.video_seekbar);
seekBar.setOnSeekBarChangeListener(this);
mCurrTimeView = (TextView) view.findViewById(R.id.video_curr_time);
mDurationView = (TextView) view.findViewById(R.id.video_duration);
mSeekBar = (SeekBar) view.findViewById(R.id.video_seekbar);
mSeekBar.setOnSeekBarChangeListener(this);
if (isFullscreen)
timeHolder.setVisibility(View.INVISIBLE);
if (mIsFullscreen)
mTimeHolder.setVisibility(View.INVISIBLE);
}
private void setupTimeHolder() {
seekBar.setMax(duration);
durationView.setText(getTimeString(duration));
timerHandler = new Handler();
mSeekBar.setMax(mDuration);
mDurationView.setText(getTimeString(mDuration));
mTimerHandler = new Handler();
setupTimer();
}
@ -133,13 +134,13 @@ public class VideoFragment extends ViewPagerFragment
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (mediaPlayer != null && !isDragged && isPlaying) {
currTime = mediaPlayer.getCurrentPosition() / 1000;
seekBar.setProgress(currTime);
currTimeView.setText(getTimeString(currTime));
if (mMediaPlayer != null && !mIsDragged && mIsPlaying) {
mCurrTime = mMediaPlayer.getCurrentPosition() / 1000;
mSeekBar.setProgress(mCurrTime);
mCurrTimeView.setText(getTimeString(mCurrTime));
}
timerHandler.postDelayed(this, 1000);
mTimerHandler.postDelayed(this, 1000);
}
});
}
@ -147,7 +148,7 @@ public class VideoFragment extends ViewPagerFragment
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(PROGRESS, currTime);
outState.putInt(PROGRESS, mCurrTime);
}
@Override
@ -157,31 +158,31 @@ public class VideoFragment extends ViewPagerFragment
togglePlayPause();
break;
default:
isFullscreen = !isFullscreen;
mIsFullscreen = !mIsFullscreen;
checkFullscreen();
if (listener == null)
listener = (FragmentClickListener) getActivity();
listener.fragmentClicked();
if (mListener == null)
mListener = (FragmentClickListener) getActivity();
mListener.fragmentClicked();
break;
}
}
private void checkFullscreen() {
int anim = R.anim.fade_in;
if (isFullscreen) {
if (mIsFullscreen) {
anim = R.anim.fade_out;
seekBar.setOnSeekBarChangeListener(null);
mSeekBar.setOnSeekBarChangeListener(null);
} else {
seekBar.setOnSeekBarChangeListener(this);
mSeekBar.setOnSeekBarChangeListener(this);
}
final Animation animation = AnimationUtils.loadAnimation(getContext(), anim);
timeHolder.startAnimation(animation);
mTimeHolder.startAnimation(animation);
}
private void pauseVideo() {
if (isPlaying) {
if (mIsPlaying) {
togglePlayPause();
}
}
@ -190,19 +191,19 @@ public class VideoFragment extends ViewPagerFragment
if (getActivity() == null)
return;
isPlaying = !isPlaying;
if (isPlaying) {
if (mediaPlayer != null) {
mediaPlayer.start();
mIsPlaying = !mIsPlaying;
if (mIsPlaying) {
if (mMediaPlayer != null) {
mMediaPlayer.start();
}
playOutline.setImageDrawable(null);
mPlayOutline.setImageDrawable(null);
} else {
if (mediaPlayer != null) {
mediaPlayer.pause();
if (mMediaPlayer != null) {
mMediaPlayer.pause();
}
playOutline.setImageDrawable(getResources().getDrawable(R.mipmap.play_outline_big));
mPlayOutline.setImageDrawable(getResources().getDrawable(R.mipmap.play_outline_big));
}
}
@ -212,32 +213,32 @@ public class VideoFragment extends ViewPagerFragment
}
private void initMediaPlayer() {
if (mediaPlayer != null)
if (mMediaPlayer != null)
return;
try {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(getContext(), Uri.parse(medium.getPath()));
mediaPlayer.setDisplay(surfaceHolder);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnVideoSizeChangedListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync();
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setDataSource(getContext(), Uri.parse(mMedium.getPath()));
mMediaPlayer.setDisplay(mSurfaceHolder);
mMediaPlayer.setOnCompletionListener(this);
mMediaPlayer.setOnVideoSizeChangedListener(this);
mMediaPlayer.setOnPreparedListener(this);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.prepareAsync();
} catch (IOException e) {
Log.e(TAG, "init media player " + e.getMessage());
}
}
private void setProgress(int seconds) {
mediaPlayer.seekTo(seconds * 1000);
seekBar.setProgress(seconds);
currTimeView.setText(getTimeString(seconds));
mMediaPlayer.seekTo(seconds * 1000);
mSeekBar.setProgress(seconds);
mCurrTimeView.setText(getTimeString(seconds));
}
private void addPreviewImage() {
mediaPlayer.start();
mediaPlayer.pause();
mMediaPlayer.start();
mMediaPlayer.pause();
}
@Override
@ -257,19 +258,19 @@ public class VideoFragment extends ViewPagerFragment
private void cleanup() {
pauseVideo();
if (currTimeView != null)
currTimeView.setText(getTimeString(0));
if (mCurrTimeView != null)
mCurrTimeView.setText(getTimeString(0));
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
if (mMediaPlayer != null) {
mMediaPlayer.release();
mMediaPlayer = null;
}
if (seekBar != null)
seekBar.setProgress(0);
if (mSeekBar != null)
mSeekBar.setProgress(0);
if (timerHandler != null)
timerHandler.removeCallbacksAndMessages(null);
if (mTimerHandler != null)
mTimerHandler.removeCallbacksAndMessages(null);
}
@Override
@ -284,8 +285,8 @@ public class VideoFragment extends ViewPagerFragment
@Override
public void onCompletion(MediaPlayer mp) {
seekBar.setProgress(seekBar.getMax());
currTimeView.setText(getTimeString(duration));
mSeekBar.setProgress(mSeekBar.getMax());
mCurrTimeView.setText(getTimeString(mDuration));
pauseVideo();
}
@ -315,7 +316,7 @@ public class VideoFragment extends ViewPagerFragment
final float screenProportion = (float) screenWidth / (float) screenHeight;
final android.view.ViewGroup.LayoutParams lp = surfaceView.getLayoutParams();
final android.view.ViewGroup.LayoutParams lp = mSurfaceView.getLayoutParams();
if (videoProportion > screenProportion) {
lp.width = screenWidth;
lp.height = (int) ((float) screenWidth / videoProportion);
@ -323,7 +324,7 @@ public class VideoFragment extends ViewPagerFragment
lp.width = (int) (videoProportion * (float) screenHeight);
lp.height = screenHeight;
}
surfaceView.setLayoutParams(lp);
mSurfaceView.setLayoutParams(lp);
}
private String getTimeString(int duration) {
@ -344,36 +345,36 @@ public class VideoFragment extends ViewPagerFragment
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (mediaPlayer != null && fromUser) {
if (mMediaPlayer != null && fromUser) {
setProgress(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
if (mediaPlayer == null)
if (mMediaPlayer == null)
initMediaPlayer();
mediaPlayer.pause();
isDragged = true;
mMediaPlayer.pause();
mIsDragged = true;
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
if (!isPlaying) {
if (!mIsPlaying) {
togglePlayPause();
} else {
mediaPlayer.start();
mMediaPlayer.start();
}
isDragged = false;
mIsDragged = false;
}
@Override
public void onPrepared(MediaPlayer mp) {
duration = mp.getDuration() / 1000;
mDuration = mp.getDuration() / 1000;
addPreviewImage();
setupTimeHolder();
setProgress(currTime);
setProgress(mCurrTime);
}
}

View File

@ -3,10 +3,10 @@ package com.simplemobiletools.gallery.fragments;
import android.support.v4.app.Fragment;
public abstract class ViewPagerFragment extends Fragment {
protected FragmentClickListener listener;
protected FragmentClickListener mListener;
public void setListener(FragmentClickListener ln) {
listener = ln;
public void setListener(FragmentClickListener listener) {
mListener = listener;
}
public abstract void itemDragged();

View File

@ -49,4 +49,14 @@ public class Directory implements Comparable {
}
return 0;
}
@Override
public String toString() {
return "Directory {" +
"path=" + getPath() +
", thumbnail=" + getThumbnail() +
", name=" + getName() +
", timestamp=" + getTimestamp() +
", mediaCnt=" + getMediaCnt() + "}";
}
}