1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.example.android.wearable.recipeassistant;
18 
19 import android.content.Context;
20 import android.database.DataSetObserver;
21 import android.graphics.Bitmap;
22 import android.util.Log;
23 import android.view.LayoutInflater;
24 import android.view.View;
25 import android.view.ViewGroup;
26 import android.widget.ImageView;
27 import android.widget.ListAdapter;
28 import android.widget.TextView;
29 
30 import org.json.JSONArray;
31 import org.json.JSONException;
32 import org.json.JSONObject;
33 
34 import java.util.ArrayList;
35 import java.util.List;
36 
37 public class RecipeListAdapter implements ListAdapter {
38     private String TAG = "RecipeListAdapter";
39 
40     private class Item {
41         String title;
42         String name;
43         String summary;
44         Bitmap image;
45     }
46 
47     private List<Item> mItems = new ArrayList<Item>();
48     private Context mContext;
49     private DataSetObserver mObserver;
50 
RecipeListAdapter(Context context)51     public RecipeListAdapter(Context context) {
52         mContext = context;
53         loadRecipeList();
54     }
55 
loadRecipeList()56     private void loadRecipeList() {
57         JSONObject jsonObject = AssetUtils.loadJSONAsset(mContext, Constants.RECIPE_LIST_FILE);
58         if (jsonObject != null) {
59             List<Item> items = parseJson(jsonObject);
60             appendItemsToList(items);
61         }
62     }
63 
parseJson(JSONObject json)64     private List<Item> parseJson(JSONObject json) {
65         List<Item> result = new ArrayList<Item>();
66         try {
67             JSONArray items = json.getJSONArray(Constants.RECIPE_FIELD_LIST);
68             for (int i = 0; i < items.length(); i++) {
69                 JSONObject item = items.getJSONObject(i);
70                 Item parsed = new Item();
71                 parsed.name = item.getString(Constants.RECIPE_FIELD_NAME);
72                 parsed.title = item.getString(Constants.RECIPE_FIELD_TITLE);
73                 if (item.has(Constants.RECIPE_FIELD_IMAGE)) {
74                     String imageFile = item.getString(Constants.RECIPE_FIELD_IMAGE);
75                     parsed.image = AssetUtils.loadBitmapAsset(mContext, imageFile);
76                 }
77                 parsed.summary = item.getString(Constants.RECIPE_FIELD_SUMMARY);
78                 result.add(parsed);
79             }
80         } catch (JSONException e) {
81             Log.e(TAG, "Failed to parse recipe list: " + e);
82         }
83         return result;
84     }
85 
appendItemsToList(List<Item> items)86     private void appendItemsToList(List<Item> items) {
87         mItems.addAll(items);
88         if (mObserver != null) {
89             mObserver.onChanged();
90         }
91     }
92 
93     @Override
getCount()94     public int getCount() {
95         return mItems.size();
96     }
97 
98     @Override
getItem(int position)99     public Object getItem(int position) {
100         return mItems.get(position);
101     }
102 
103     @Override
getItemId(int position)104     public long getItemId(int position) {
105         return 0;
106     }
107 
108     @Override
getItemViewType(int position)109     public int getItemViewType(int position) {
110         return 0;
111     }
112 
113     @Override
getView(int position, View convertView, ViewGroup parent)114     public View getView(int position, View convertView, ViewGroup parent) {
115         View view = convertView;
116         if (view == null) {
117             LayoutInflater inf = LayoutInflater.from(mContext);
118             view = inf.inflate(R.layout.list_item, null);
119         }
120         Item item = (Item) getItem(position);
121         TextView titleView = (TextView) view.findViewById(R.id.textTitle);
122         TextView summaryView = (TextView) view.findViewById(R.id.textSummary);
123         ImageView iv = (ImageView) view.findViewById(R.id.imageView);
124 
125         titleView.setText(item.title);
126         summaryView.setText(item.summary);
127         if (item.image != null) {
128             iv.setImageBitmap(item.image);
129         } else {
130             iv.setImageDrawable(mContext.getResources().getDrawable(R.drawable.ic_noimage));
131         }
132         return view;
133     }
134 
135     @Override
getViewTypeCount()136     public int getViewTypeCount() {
137         return 1;
138     }
139 
140     @Override
hasStableIds()141     public boolean hasStableIds() {
142         return false;
143     }
144 
145     @Override
isEmpty()146     public boolean isEmpty() {
147         return mItems.isEmpty();
148     }
149 
150     @Override
registerDataSetObserver(DataSetObserver observer)151     public void registerDataSetObserver(DataSetObserver observer) {
152         mObserver = observer;
153     }
154 
155     @Override
unregisterDataSetObserver(DataSetObserver observer)156     public void unregisterDataSetObserver(DataSetObserver observer) {
157         mObserver = null;
158     }
159 
160     @Override
areAllItemsEnabled()161     public boolean areAllItemsEnabled() {
162         return true;
163     }
164 
165     @Override
isEnabled(int position)166     public boolean isEnabled(int position) {
167         return true;
168     }
169 
getItemName(int position)170     public String getItemName(int position) {
171         return mItems.get(position).name;
172     }
173 }
174