aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/cyanogenmod/filemanager/controllers/MStarUController.java
blob: 74747a61fd2247205c50d08a93cbbad447fa0975 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package com.cyanogenmod.filemanager.controllers;

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.cyanogenmod.filemanager.R;
import com.cyanogenmod.filemanager.ui.IconRenderer;
import com.cyanogenmod.filemanager.model.FileSystemObject;
import com.cyanogenmod.filemanager.preferences.FileManagerSettings;
import com.cyanogenmod.filemanager.preferences.Preferences;
import com.cyanogenmod.filemanager.ui.IconHolder;
import com.cyanogenmod.filemanager.util.MimeTypeHelper;

import java.util.List;

/**
 * This is meant to make this section more transferable
 */
public class MStarUController {

    public interface OnClickListener {
        void onItemClick(FileSystemObject fso);
        void onDetailsClick(FileSystemObject fso);
    }

    private class ViewHolder {
        /* package */ ImageView fileImage;
        /* package */ TextView fileName;
        /* package */ TextView parent;
        /* package */ View details;

        FileSystemObject fso;

        public ViewHolder(View row) {
            fileImage = (ImageView)row.findViewById(R.id.file_image);
            fileName = (TextView)row.findViewById(R.id.file_name);
            parent = (TextView)row.findViewById(R.id.file_parent);
            details = row.findViewById(R.id.file_details);
        }
    }

    private View.OnClickListener mOnItemClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            MStarUController.ViewHolder h =
                    (MStarUController.ViewHolder)view.getTag(R.id.tag_viewholder);

            if (mOnClickListener != null) {
                switch (view.getId()) {
                    case R.id.file_details:
                        mOnClickListener.onDetailsClick(h.fso);
                        break;
                    default:
                        mOnClickListener.onItemClick(h.fso);
                        break;

                }
            }
        }
    };

    private ViewGroup mStarUGroup;

    private ViewGroup mStarUEmpty;

    private MStarUController.OnClickListener mOnClickListener;

    private Context mContext;

    private IconHolder mImageLoader;

    public MStarUController(Context context, View root, MStarUController.OnClickListener l) {
        mContext = context;
        mStarUGroup = (ViewGroup)root.findViewById(R.id.mstaru_list);
        mStarUEmpty = (ViewGroup)root.findViewById(R.id.mstaru_empty);
        // This is kind of crap since it won't pick up changes if we leave the screen and come back
        FileManagerSettings displayThumbsPref = FileManagerSettings.SETTINGS_DISPLAY_THUMBS;
        final boolean displayThumbs =
                Preferences.getSharedPreferences().getBoolean(
                        displayThumbsPref.getId(),
                        ((Boolean)displayThumbsPref.getDefaultValue()).booleanValue());
        mImageLoader = new IconHolder(context, displayThumbs);
        mOnClickListener = l;
    }

    public void replaceData(List<FileSystemObject> files) {
        if (files == null || files.isEmpty()) {
            mStarUGroup.setVisibility(View.GONE);
            mStarUEmpty.setVisibility(View.VISIBLE);
            return;
        }
        mStarUGroup.setVisibility(View.VISIBLE);
        mStarUEmpty.setVisibility(View.GONE);

        int size = Math.min(files.size(), mStarUGroup.getChildCount());
        int i = 0;
        for (; i < size; i++) {
            final View row = mStarUGroup.getChildAt(i);
            final FileSystemObject fso = files.get(i);

            row.setVisibility(View.VISIBLE);
            MStarUController.ViewHolder h =
                    (MStarUController.ViewHolder)row.getTag(R.id.tag_viewholder);

            if (h == null) {
                h = new MStarUController.ViewHolder(row);
                row.setTag(R.id.tag_viewholder, h);
                row.setOnClickListener(mOnItemClickListener);
                h.details.setOnClickListener(mOnItemClickListener);
                h.details.setTag(R.id.tag_viewholder, h);
            }
            h.fso = fso;

            final int mimeTypeIconId = MimeTypeHelper.getIcon(mContext, fso);
            IconHolder.ICallback callback = new IconRenderer(mContext, mimeTypeIconId);
            mImageLoader.loadDrawable(h.fileImage, fso, mimeTypeIconId, callback);

            h.fileName.setText(fso.getName());
            h.parent.setText(fso.getParent());
        }
        size = mStarUGroup.getChildCount();
        for (; i < size; i++) {
            View row = mStarUGroup.getChildAt(i);
            row.setVisibility(View.GONE);
        }
    }
}