1 /* 2 * Copyright (C) 2013 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.android.camera.data; 18 19 import android.app.Activity; 20 import android.content.Context; 21 import android.net.Uri; 22 import android.view.View; 23 24 import com.android.camera.ui.FilmStripView.DataAdapter; 25 import com.android.camera.ui.FilmStripView.ImageData; 26 27 /** 28 * A {@link LocalDataAdapter} which puts a {@link LocalData} fixed at the first 29 * position. It's done by combining a {@link LocalData} and another 30 * {@link LocalDataAdapter}. 31 */ 32 public class FixedFirstDataAdapter extends AbstractLocalDataAdapterWrapper 33 implements DataAdapter.Listener { 34 35 @SuppressWarnings("unused") 36 private static final String TAG = "CAM_FixedFirstDataAdapter"; 37 38 private LocalData mFirstData; 39 private Listener mListener; 40 41 /** 42 * Constructor. 43 * 44 * @param wrappedAdapter The {@link LocalDataAdapter} to be wrapped. 45 * @param firstData The {@link LocalData} to be placed at the first 46 * position. 47 */ 48 public FixedFirstDataAdapter( 49 LocalDataAdapter wrappedAdapter, 50 LocalData firstData) { 51 super(wrappedAdapter); 52 if (firstData == null) { 53 throw new AssertionError("data is null"); 54 } 55 mFirstData = firstData; 56 } 57 58 @Override 59 public LocalData getLocalData(int dataID) { 60 if (dataID == 0) { 61 return mFirstData; 62 } 63 return mAdapter.getLocalData(dataID - 1); 64 } 65 66 @Override 67 public void removeData(Context context, int dataID) { 68 if (dataID > 0) { 69 mAdapter.removeData(context, dataID - 1); 70 } 71 } 72 73 @Override 74 public int findDataByContentUri(Uri uri) { 75 int pos = mAdapter.findDataByContentUri(uri); 76 if (pos != -1) { 77 return pos + 1; 78 } 79 return -1; 80 } 81 82 @Override 83 public void updateData(int pos, LocalData data) { 84 if (pos == 0) { 85 mFirstData = data; 86 if (mListener != null) { 87 mListener.onDataUpdated(new UpdateReporter() { 88 @Override 89 public boolean isDataRemoved(int dataID) { 90 return false; 91 } 92 93 @Override 94 public boolean isDataUpdated(int dataID) { 95 return (dataID == 0); 96 } 97 }); 98 } 99 } else { 100 mAdapter.updateData(pos - 1, data); 101 } 102 } 103 104 @Override 105 public int getTotalNumber() { 106 return (mAdapter.getTotalNumber() + 1); 107 } 108 109 @Override 110 public View getView(Activity activity, int dataID) { 111 if (dataID == 0) { 112 return mFirstData.getView( 113 activity, mSuggestedWidth, mSuggestedHeight, null, null); 114 } 115 return mAdapter.getView(activity, dataID - 1); 116 } 117 118 @Override 119 public ImageData getImageData(int dataID) { 120 if (dataID == 0) { 121 return mFirstData; 122 } 123 return mAdapter.getImageData(dataID - 1); 124 } 125 126 @Override 127 public void setListener(Listener listener) { 128 mListener = listener; 129 mAdapter.setListener((listener == null) ? null : this); 130 // The first data is always there. Thus, When the listener is set, 131 // we should call listener.onDataLoaded(). 132 if (mListener != null) { 133 mListener.onDataLoaded(); 134 } 135 } 136 137 @Override 138 public boolean canSwipeInFullScreen(int dataID) { 139 if (dataID == 0) { 140 return mFirstData.canSwipeInFullScreen(); 141 } 142 return mAdapter.canSwipeInFullScreen(dataID - 1); 143 } 144 145 @Override 146 public void onDataLoaded() { 147 if (mListener == null) { 148 return; 149 } 150 mListener.onDataUpdated(new UpdateReporter() { 151 @Override 152 public boolean isDataRemoved(int dataID) { 153 return false; 154 } 155 156 @Override 157 public boolean isDataUpdated(int dataID) { 158 return (dataID != 0); 159 } 160 }); 161 } 162 163 @Override 164 public void onDataUpdated(final UpdateReporter reporter) { 165 mListener.onDataUpdated(new UpdateReporter() { 166 @Override 167 public boolean isDataRemoved(int dataID) { 168 return (dataID != 0) && reporter.isDataRemoved(dataID - 1); 169 } 170 171 @Override 172 public boolean isDataUpdated(int dataID) { 173 return (dataID != 0) && reporter.isDataUpdated(dataID - 1); 174 } 175 }); 176 } 177 178 @Override 179 public void onDataInserted(int dataID, ImageData data) { 180 mListener.onDataInserted(dataID + 1, data); 181 } 182 183 @Override 184 public void onDataRemoved(int dataID, ImageData data) { 185 mListener.onDataRemoved(dataID + 1, data); 186 } 187 } 188