com.docd.purefm.adapters.BrowserListAdapter.java Source code

Java tutorial

Introduction

Here is the source code for com.docd.purefm.adapters.BrowserListAdapter.java

Source

/*
 * Copyright 2014 Yaroslav Mytkalyk
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.docd.purefm.adapters;

import com.docd.purefm.R;
import com.docd.purefm.file.CommandLineFile;
import com.docd.purefm.file.GenericFile;
import com.docd.purefm.utils.PFMFileUtils;
import com.docd.purefm.utils.PFMTextUtils;
import com.docd.purefm.ui.view.OverlayImageView;

import android.app.Activity;
import android.graphics.Typeface;
import android.support.v4.util.LongSparseArray;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import android.support.annotation.NonNull;

import java.math.BigInteger;

/**
 * Browser adapter for ListView
 * @author Doctoror
 */
public final class BrowserListAdapter extends BrowserBaseAdapter {

    @NonNull
    private final Typeface mTypefaceMonospace;

    @NonNull
    private final LongSparseArray<String> mHumanReadableLastModified = new LongSparseArray<>();

    @NonNull
    private final LongSparseArray<String> mHumanReadableLength = new LongSparseArray<>();

    public BrowserListAdapter(@NonNull final Activity context) {
        super(context);
        mTypefaceMonospace = Typeface.createFromAsset(context.getAssets(), "DroidSansMono.ttf");
    }

    @Override
    public View getView(int pos, View v, ViewGroup arg2) {
        if (pos >= this.getCount()) {
            //workaround for indexOutOfBoundsException when deleting from adapter
            // and notifyDataSetChanged is not yet called
            return v;
        }

        Holder h;

        if (v == null) {
            v = this.mLayoutInflater.inflate(R.layout.list_item_file, arg2, false);
            if (v == null) {
                throw new RuntimeException("Inflated View is null");
            }
            h = new Holder();
            h.mIcon = (OverlayImageView) v.findViewById(android.R.id.icon);
            h.mTitle = (TextView) v.findViewById(android.R.id.title);
            h.mDate = (TextView) v.findViewById(android.R.id.text1);
            h.mPerm = (TextView) v.findViewById(android.R.id.text2);
            h.mSize = (TextView) v.findViewById(R.id.size);

            h.mDate.setTypeface(this.mTypefaceMonospace);
            h.mPerm.setTypeface(this.mTypefaceMonospace);
            h.mSize.setTypeface(this.mTypefaceMonospace);
            v.setTag(h);
        } else {
            h = (Holder) v.getTag();
        }

        final GenericFile f = this.getItem(pos);
        this.setIcon(f, h.mIcon, false);
        this.applyOverlay(f, h.mIcon);

        if (mSettings.listShowPreviewsEnabled()) {
            loadPreview(f, h.mIcon);
        }
        h.mTitle.setText(f.getName());

        if (mSettings.listShowModifiedDateEnabled()) {
            final long lastModified = f.lastModified();
            String humanReadableLastModified = mHumanReadableLastModified.get(lastModified);
            if (humanReadableLastModified == null) {
                humanReadableLastModified = PFMTextUtils.humanReadableDate(lastModified,
                        f instanceof CommandLineFile);
                mHumanReadableLastModified.put(lastModified, humanReadableLastModified);
            }
            h.mDate.setText(humanReadableLastModified);
        } else {
            h.mDate.setText(null);
        }

        if (mSettings.listShowFileSizeEnabled() && !f.isDirectory()) {
            final long fileSize = f.length();
            String humanReadableFileSize = mHumanReadableLength.get(fileSize);
            if (humanReadableFileSize == null) {
                humanReadableFileSize = PFMFileUtils.byteCountToDisplaySize(BigInteger.valueOf(fileSize));
                mHumanReadableLength.put(fileSize, humanReadableFileSize);
            }
            h.mSize.setText(humanReadableFileSize);
        } else {
            h.mSize.setText(null);
        }

        if (mSettings.listShowPermissionsEnabled()) {
            h.mPerm.setText(f.getPermissions().toString());
        } else {
            h.mPerm.setText(null);
        }

        return v;
    }

    private static final class Holder {

        Holder() {
        }

        OverlayImageView mIcon;
        TextView mTitle;
        TextView mSize;
        TextView mDate;
        TextView mPerm;

    }

}