Search in sources :

Example 1 with SelectorModeManager

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();
}
Also used : WindowInsets(android.view.WindowInsets) GridMarginDecoration(us.koller.cameraroll.ui.widget.GridMarginDecoration) NoFolderRecyclerViewAdapter(us.koller.cameraroll.adapter.main.NoFolderRecyclerViewAdapter) FloatingActionButton(android.support.design.widget.FloatingActionButton) FastScrollerRecyclerView(us.koller.cameraroll.ui.widget.FastScrollerRecyclerView) ViewTreeObserver(android.view.ViewTreeObserver) Settings(us.koller.cameraroll.data.Settings) ActionBar(android.support.v7.app.ActionBar) Toolbar(android.support.v7.widget.Toolbar) MainAdapter(us.koller.cameraroll.adapter.main.MainAdapter) SimpleItemAnimator(android.support.v7.widget.SimpleItemAnimator) ViewGroup(android.view.ViewGroup) Drawable(android.graphics.drawable.Drawable) View(android.view.View) FastScrollerRecyclerView(us.koller.cameraroll.ui.widget.FastScrollerRecyclerView) RecyclerView(android.support.v7.widget.RecyclerView) ParallaxImageView(us.koller.cameraroll.ui.widget.ParallaxImageView) GridLayoutManager(android.support.v7.widget.GridLayoutManager) SelectorModeManager(us.koller.cameraroll.adapter.SelectorModeManager) RequiresApi(android.support.annotation.RequiresApi) FastScrollerRecyclerView(us.koller.cameraroll.ui.widget.FastScrollerRecyclerView) RecyclerView(android.support.v7.widget.RecyclerView)

Example 2 with SelectorModeManager

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();
    }
}
Also used : SelectorModeManager(us.koller.cameraroll.adapter.SelectorModeManager) View(android.view.View) FastScrollerRecyclerView(us.koller.cameraroll.ui.widget.FastScrollerRecyclerView) RecyclerView(android.support.v7.widget.RecyclerView) ViewTreeObserver(android.view.ViewTreeObserver) ActionBar(android.support.v7.app.ActionBar)

Example 3 with SelectorModeManager

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);
}
Also used : Context(android.content.Context) ArrayList(java.util.ArrayList) Activity(android.app.Activity) VirtualAlbum(us.koller.cameraroll.data.models.VirtualAlbum) Album(us.koller.cameraroll.data.models.Album) Intent(android.content.Intent) File_POJO(us.koller.cameraroll.data.models.File_POJO) BroadcastReceiver(android.content.BroadcastReceiver) Uri(android.net.Uri) MediaProvider(us.koller.cameraroll.data.provider.MediaProvider) SelectorModeManager(us.koller.cameraroll.adapter.SelectorModeManager)

Aggregations

SelectorModeManager (us.koller.cameraroll.adapter.SelectorModeManager)3 ActionBar (android.support.v7.app.ActionBar)2 RecyclerView (android.support.v7.widget.RecyclerView)2 View (android.view.View)2 ViewTreeObserver (android.view.ViewTreeObserver)2 FastScrollerRecyclerView (us.koller.cameraroll.ui.widget.FastScrollerRecyclerView)2 Activity (android.app.Activity)1 BroadcastReceiver (android.content.BroadcastReceiver)1 Context (android.content.Context)1 Intent (android.content.Intent)1 Drawable (android.graphics.drawable.Drawable)1 Uri (android.net.Uri)1 RequiresApi (android.support.annotation.RequiresApi)1 FloatingActionButton (android.support.design.widget.FloatingActionButton)1 GridLayoutManager (android.support.v7.widget.GridLayoutManager)1 SimpleItemAnimator (android.support.v7.widget.SimpleItemAnimator)1 Toolbar (android.support.v7.widget.Toolbar)1 ViewGroup (android.view.ViewGroup)1 WindowInsets (android.view.WindowInsets)1 ArrayList (java.util.ArrayList)1