use of us.koller.cameraroll.adapter.SelectorModeManager in project Camera-Roll-Android-App by kollerlukas.
the class MainActivity method onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pick_photos = getIntent().getAction() != null && getIntent().getAction().equals(PICK_PHOTOS);
boolean allowMultiple = getIntent().getBooleanExtra(Intent.EXTRA_ALLOW_MULTIPLE, false);
final Settings settings = Settings.getInstance(this);
hiddenFolders = settings.getHiddenFolders();
// load media
albums = MediaProvider.getAlbums();
if (albums == null) {
albums = new ArrayList<>();
}
if (savedInstanceState == null) {
refreshPhotos();
}
final Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setBackgroundColor(!pick_photos ? toolbarColor : accentColor);
toolbar.setTitleTextColor(!pick_photos ? textColorPrimary : accentTextColor);
ActionBar actionBar = getSupportActionBar();
if (pick_photos) {
if (actionBar != null) {
actionBar.setTitle(allowMultiple ? getString(R.string.pick_photos) : getString(R.string.pick_photo));
}
toolbar.setActivated(true);
toolbar.setNavigationIcon(R.drawable.ic_clear_white);
Drawable navIcon = toolbar.getNavigationIcon();
if (navIcon != null) {
navIcon = DrawableCompat.wrap(navIcon);
DrawableCompat.setTint(navIcon.mutate(), accentTextColor);
toolbar.setNavigationIcon(navIcon);
}
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
Util.colorToolbarOverflowMenuIcon(toolbar, accentTextColor);
if (theme.darkStatusBarIconsInSelectorMode()) {
Util.setDarkStatusBarIcons(findViewById(R.id.root_view));
}
} else {
if (actionBar != null) {
actionBar.setTitle(getString(R.string.toolbar_title));
}
}
recyclerView = findViewById(R.id.recyclerView);
recyclerView.setTag(ParallaxImageView.RECYCLER_VIEW_TAG);
SelectorModeManager.Callback callback = new SelectorModeManager.SimpleCallback() {
@Override
public void onSelectorModeEnter() {
super.onSelectorModeEnter();
showAndHideFab(false);
}
@Override
public void onSelectorModeExit() {
super.onSelectorModeExit();
showAndHideFab(true);
}
};
int spanCount, spacing;
if (settings.noFolderMode()) {
spanCount = settings.getColumnCount(this);
spacing = (int) getResources().getDimension(R.dimen.album_grid_spacing) / 2;
recyclerView.addItemDecoration(new GridMarginDecoration(spacing + spacing));
recyclerViewAdapter = new NoFolderRecyclerViewAdapter(callback, recyclerView, pick_photos).setData(albums);
} else {
spanCount = settings.getStyleColumnCount(this, settings.getStyle(this, pick_photos));
spacing = settings.getStyleGridSpacing(this, settings.getStyle(this, pick_photos));
recyclerViewAdapter = new MainAdapter(this, pick_photos).setData(albums);
recyclerViewAdapter.getSelectorManager().addCallback(callback);
}
recyclerView.setAdapter(recyclerViewAdapter);
recyclerView.setLayoutManager(new GridLayoutManager(this, spanCount));
if (recyclerView instanceof FastScrollerRecyclerView) {
((FastScrollerRecyclerView) recyclerView).addOuterGridSpacing(spacing);
}
// disable default change animation
((SimpleItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
// restore Selector mode, when needed
if (savedInstanceState != null) {
SelectorModeManager manager = new SelectorModeManager(savedInstanceState);
recyclerViewAdapter.setSelectorModeManager(manager);
}
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if (pick_photos) {
return;
}
// hiding toolbar on scroll
float translationY = toolbar.getTranslationY() - dy;
if (-translationY > toolbar.getHeight()) {
translationY = -toolbar.getHeight();
if (theme.elevatedToolbar()) {
toolbar.setActivated(true);
}
} else if (translationY > 0) {
translationY = 0;
if (theme.elevatedToolbar() && !recyclerView.canScrollVertically(-1)) {
toolbar.setActivated(false);
}
}
toolbar.setTranslationY(translationY);
// animate statusBarIcon color
boolean selectorModeActive = recyclerViewAdapter.getSelectorManager().isSelectorModeActive();
if (!selectorModeActive && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && theme.isBaseLight()) {
// only animate statusBar icons color, when not in selectorMode
float animatedValue = (-translationY) / toolbar.getHeight();
if (animatedValue > 0.9f) {
Util.setLightStatusBarIcons(findViewById(R.id.root_view));
} else {
Util.setDarkStatusBarIcons(findViewById(R.id.root_view));
}
}
}
});
final FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
fabClicked(view);
}
});
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Drawable d = ContextCompat.getDrawable(this, R.drawable.ic_camera_lens_avd);
fab.setImageDrawable(d);
} else {
fab.setImageResource(R.drawable.ic_camera_white);
}
Drawable d = fab.getDrawable();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
d.setTint(accentTextColor);
} else {
d = DrawableCompat.wrap(d);
DrawableCompat.setTint(d.mutate(), accentTextColor);
}
fab.setImageDrawable(d);
if (pick_photos || !settings.getCameraShortcut()) {
fab.setVisibility(View.GONE);
}
// setting window insets manually
final ViewGroup rootView = findViewById(R.id.root_view);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
rootView.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
@Override
@RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH)
public WindowInsets onApplyWindowInsets(View view, WindowInsets insets) {
// clear this listener so insets aren't re-applied
rootView.setOnApplyWindowInsetsListener(null);
Log.d("MainActivity", "onApplyWindowInsets()" + "[" + insets.getSystemWindowInsetLeft() + ", " + insets.getSystemWindowInsetTop() + ", " + insets.getSystemWindowInsetRight() + ", " + insets.getSystemWindowInsetBottom() + "]");
toolbar.setPadding(toolbar.getPaddingStart(), toolbar.getPaddingTop() + insets.getSystemWindowInsetTop(), toolbar.getPaddingEnd(), toolbar.getPaddingBottom());
ViewGroup.MarginLayoutParams toolbarParams = (ViewGroup.MarginLayoutParams) toolbar.getLayoutParams();
toolbarParams.leftMargin = insets.getSystemWindowInsetLeft();
toolbarParams.rightMargin = insets.getSystemWindowInsetRight();
toolbar.setLayoutParams(toolbarParams);
recyclerView.setPadding(recyclerView.getPaddingStart() + insets.getSystemWindowInsetLeft(), recyclerView.getPaddingTop() + insets.getSystemWindowInsetTop(), recyclerView.getPaddingEnd() + insets.getSystemWindowInsetRight(), recyclerView.getPaddingBottom() + insets.getSystemWindowInsetBottom());
fab.setTranslationY(-insets.getSystemWindowInsetBottom());
fab.setTranslationX(-insets.getSystemWindowInsetRight());
return insets.consumeSystemWindowInsets();
}
});
} else {
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
// hacky way of getting window insets on pre-Lollipop
// somewhat works...
int[] screenSize = Util.getScreenSize(MainActivity.this);
int[] windowInsets = new int[] { Math.abs(screenSize[0] - rootView.getLeft()), Math.abs(screenSize[1] - rootView.getTop()), Math.abs(screenSize[2] - rootView.getRight()), Math.abs(screenSize[3] - rootView.getBottom()) };
toolbar.setPadding(toolbar.getPaddingStart(), toolbar.getPaddingTop() + windowInsets[1], toolbar.getPaddingEnd(), toolbar.getPaddingBottom());
ViewGroup.MarginLayoutParams toolbarParams = (ViewGroup.MarginLayoutParams) toolbar.getLayoutParams();
toolbarParams.leftMargin += windowInsets[0];
toolbarParams.rightMargin += windowInsets[2];
toolbar.setLayoutParams(toolbarParams);
recyclerView.setPadding(recyclerView.getPaddingStart() + windowInsets[0], recyclerView.getPaddingTop() + windowInsets[1], recyclerView.getPaddingEnd() + windowInsets[2], recyclerView.getPaddingBottom() + windowInsets[3]);
fab.setTranslationX(-windowInsets[2]);
fab.setTranslationY(-windowInsets[3]);
}
});
}
// needed for transparent statusBar
setSystemUiFlags();
}
use of us.koller.cameraroll.adapter.SelectorModeManager in project Camera-Roll-Android-App by kollerlukas.
the class AlbumActivity method onAlbumLoaded.
private void onAlbumLoaded(Bundle savedInstanceState) {
int sort_by = Settings.getInstance(this).sortAlbumBy();
SortUtil.sort(album.getAlbumItems(), sort_by);
ActionBar actionBar = getSupportActionBar();
if (!pick_photos && actionBar != null) {
actionBar.setTitle(album.getName());
}
recyclerViewAdapter.setData(album);
// restore Selector mode, when needed
if (savedInstanceState != null) {
final SelectorModeManager manager = new SelectorModeManager(savedInstanceState);
manager.addCallback(this);
recyclerViewAdapter.setSelectorModeManager(manager);
final View rootView = findViewById(R.id.root_view);
rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
rootView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
if (manager.isSelectorModeActive()) {
recyclerViewAdapter.restoreSelectedItems();
}
}
});
}
if (!pick_photos && menu != null) {
setupMenu();
}
}
use of us.koller.cameraroll.adapter.SelectorModeManager in project Camera-Roll-Android-App by kollerlukas.
the class AlbumActivity method onOptionsItemSelected.
@Override
public boolean onOptionsItemSelected(MenuItem item) {
final String[] selected_items_paths;
Intent intent;
switch(item.getItemId()) {
case R.id.select_all:
SelectorModeManager manager = recyclerViewAdapter.getSelectorManager();
String[] paths = new String[album.getAlbumItems().size()];
for (int i = 0; i < album.getAlbumItems().size(); i++) {
paths[i] = album.getAlbumItems().get(i).getPath();
}
manager.selectAll(paths);
recyclerViewAdapter.notifyItemRangeChanged(0, paths.length);
break;
case R.id.share:
// share multiple items
selected_items_paths = recyclerViewAdapter.cancelSelectorMode(this);
ArrayList<Uri> uris = new ArrayList<>();
for (int i = 0; i < selected_items_paths.length; i++) {
uris.add(StorageUtil.getContentUri(this, selected_items_paths[i]));
}
intent = new Intent().setAction(Intent.ACTION_SEND_MULTIPLE).setType(MediaType.getMimeType(this, uris.get(0))).putExtra(Intent.EXTRA_STREAM, uris);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(Intent.createChooser(intent, getString(R.string.share)));
}
break;
case R.id.copy:
case R.id.move:
selected_items_paths = recyclerViewAdapter.cancelSelectorMode(this);
intent = new Intent(this, FileOperationDialogActivity.class);
intent.setAction(item.getItemId() == R.id.copy ? FileOperationDialogActivity.ACTION_COPY : FileOperationDialogActivity.ACTION_MOVE);
intent.putExtra(FileOperationDialogActivity.FILES, selected_items_paths);
startActivityForResult(intent, FILE_OP_DIALOG_REQUEST);
break;
case R.id.exclude:
Provider.loadExcludedPaths(this);
if (!album.excluded) {
Provider.addExcludedPath(this, album.getPath());
album.excluded = true;
} else {
Provider.removeExcludedPath(this, album.getPath());
album.excluded = false;
}
item.setChecked(album.excluded);
break;
case R.id.pin:
Provider.loadPinnedPaths(this);
if (!album.pinned) {
Provider.pinPath(this, album.getPath());
album.pinned = true;
} else {
Provider.unpinPath(this, album.getPath());
album.pinned = false;
}
item.setChecked(album.pinned);
break;
case R.id.rename:
File_POJO file = new File_POJO(album.getPath(), false).setName(album.getName());
Rename.Util.getRenameDialog(this, file, new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final Activity activity = AlbumActivity.this;
final String newFilePath = intent.getStringExtra(Rename.NEW_FILE_PATH);
getIntent().putExtra(ALBUM_PATH, newFilePath);
boolean hiddenFolders = Settings.getInstance(activity).getHiddenFolders();
new MediaProvider(activity).loadAlbums(activity, hiddenFolders, new MediaProvider.OnMediaLoadedCallback() {
@Override
public void onMediaLoaded(ArrayList<Album> albums) {
// reload activity
MediaProvider.loadAlbum(activity, newFilePath, new MediaProvider.OnAlbumLoadedCallback() {
@Override
public void onAlbumLoaded(Album album) {
AlbumActivity.this.album = album;
AlbumActivity.this.onAlbumLoaded(null);
}
});
}
@Override
public void timeout() {
finish();
}
@Override
public void needPermission() {
finish();
}
});
}
}).show();
break;
case R.id.sort_by_date:
case R.id.sort_by_name:
item.setChecked(true);
int sort_by = item.getItemId() == R.id.sort_by_date ? SortUtil.BY_DATE : SortUtil.BY_NAME;
Settings.getInstance(this).sortAlbumBy(this, sort_by);
SortUtil.sort(album.getAlbumItems(), sort_by);
recyclerViewAdapter.notifyDataSetChanged();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
Aggregations