summaryrefslogtreecommitdiffstats
path: root/src/org/lineageos/eleven/model/SearchResult.java
blob: 278705ddd668545cc6c4d40e6603a9a967fc87c0 (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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*
* Copyright (C) 2014 The CyanogenMod Project
*
* 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.cyanogenmod.eleven.model;

import android.database.Cursor;
import android.provider.MediaStore;
import android.util.Log;

import com.cyanogenmod.eleven.Config;

import java.util.Comparator;

public class SearchResult {
    private static final String TAG = SearchResult.class.getSimpleName();

    public static final Comparator COMPARATOR = new Comparator<SearchResult>() {
        @Override
        public int compare(final SearchResult lhs, final SearchResult rhs) {
            return lhs.mType.ordinal() - rhs.mType.ordinal();
        }
    };

    public static enum ResultType {
        Song,
        Artist,
        Album,
        Playlist,
        Unknown;

        public static int getNumTypes() {
            // # of items minus the unknown
            return ResultType.values().length - 1;
        }

        public static ResultType getResultType(final String mimetype) {
            if (mimetype != null) {
                if (mimetype.equals("artist")) {
                    return Artist;
                } else if (mimetype.equals("album")) {
                    return Album;
                } else if (mimetype.startsWith("audio/") || mimetype.equals("application/ogg")
                        || mimetype.equals("application/x-ogg")) {
                    return Song;
                }
            }

            return Unknown;
        }

        public static ResultType getResultType(final Cursor cursor, int index) {
            return getResultType(cursor.getString(index));
        }

        public static ResultType getResultType(final Cursor cursor) {
            try {
                return getResultType(cursor,
                        cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.MIME_TYPE));
            } catch(IllegalArgumentException ex) {
                return Unknown;
            }
        }

        public Config.IdType getSourceType() {
            switch (this) {
                case Artist:
                    return Config.IdType.Artist;
                case Album:
                    return Config.IdType.Album;
                case Playlist:
                    return Config.IdType.Playlist;
                case Song:
                default:
                    return Config.IdType.NA;
            }
        }
    };

    public ResultType mType;
    public String mArtist;
    public String mAlbum;
    public String mTitle;
    public long mId;
    public long mAlbumId;
    public int mAlbumCount;
    public int mSongCount;

    public static SearchResult createSearchResult(final Cursor cursor) {
        SearchResult result = new SearchResult();

        result.mType = ResultType.getResultType(cursor);

        // not a valid mime type - quitting
        if (result.mType == ResultType.Unknown) {
            Log.e(TAG, "No valid mime type found!");
            return null;
        }

        // Get the Id of the content
        result.mId = cursor.getLong(cursor
                .getColumnIndexOrThrow(android.provider.BaseColumns._ID));

        // title
        result.mTitle = cursor.getString(cursor
                .getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));

        // Get the artist name
        result.mArtist = cursor.getString(cursor
                .getColumnIndexOrThrow(MediaStore.Audio.Artists.ARTIST));

        // Get the album name
        result.mAlbum = cursor.getString(cursor
                .getColumnIndexOrThrow(MediaStore.Audio.Albums.ALBUM));

        // album count
        result.mAlbumCount = cursor.getInt(cursor.getColumnIndexOrThrow("data1"));

        // song count
        result.mSongCount = cursor.getInt(cursor.getColumnIndexOrThrow("data2"));

        return result;
    }

    public static SearchResult createPlaylistResult(final Cursor cursor) {
        SearchResult result = new SearchResult();

        result.mType = ResultType.Playlist;

        // Get the Id of the content
        result.mId = cursor.getLong(cursor
                .getColumnIndexOrThrow(android.provider.BaseColumns._ID));

        // title
        result.mTitle = cursor.getString(cursor
                .getColumnIndexOrThrow(MediaStore.Audio.PlaylistsColumns.NAME));

        return result;
    }
}