xref: /aosp_15_r20/external/replicaisland/src/com/replica/replicaisland/LevelSelectActivity.java (revision 5eae8ebb3c5756e41e77a1f7201fcf94b0eade1f)
1*5eae8ebbSCole Faust /*
2*5eae8ebbSCole Faust  * Copyright (C) 2010 The Android Open Source Project
3*5eae8ebbSCole Faust  *
4*5eae8ebbSCole Faust  * Licensed under the Apache License, Version 2.0 (the "License");
5*5eae8ebbSCole Faust  * you may not use this file except in compliance with the License.
6*5eae8ebbSCole Faust  * You may obtain a copy of the License at
7*5eae8ebbSCole Faust  *
8*5eae8ebbSCole Faust  *      http://www.apache.org/licenses/LICENSE-2.0
9*5eae8ebbSCole Faust  *
10*5eae8ebbSCole Faust  * Unless required by applicable law or agreed to in writing, software
11*5eae8ebbSCole Faust  * distributed under the License is distributed on an "AS IS" BASIS,
12*5eae8ebbSCole Faust  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*5eae8ebbSCole Faust  * See the License for the specific language governing permissions and
14*5eae8ebbSCole Faust  * limitations under the License.
15*5eae8ebbSCole Faust  */
16*5eae8ebbSCole Faust 
17*5eae8ebbSCole Faust package com.replica.replicaisland;
18*5eae8ebbSCole Faust 
19*5eae8ebbSCole Faust import android.app.ListActivity;
20*5eae8ebbSCole Faust import android.content.Context;
21*5eae8ebbSCole Faust import android.content.Intent;
22*5eae8ebbSCole Faust import android.media.AudioManager;
23*5eae8ebbSCole Faust import android.os.Bundle;
24*5eae8ebbSCole Faust import android.view.KeyEvent;
25*5eae8ebbSCole Faust import android.view.LayoutInflater;
26*5eae8ebbSCole Faust import android.view.Menu;
27*5eae8ebbSCole Faust import android.view.MenuItem;
28*5eae8ebbSCole Faust import android.view.View;
29*5eae8ebbSCole Faust import android.view.ViewGroup;
30*5eae8ebbSCole Faust import android.view.animation.Animation;
31*5eae8ebbSCole Faust import android.view.animation.AnimationUtils;
32*5eae8ebbSCole Faust import android.widget.ArrayAdapter;
33*5eae8ebbSCole Faust import android.widget.ListView;
34*5eae8ebbSCole Faust import android.widget.TextView;
35*5eae8ebbSCole Faust 
36*5eae8ebbSCole Faust import java.lang.reflect.InvocationTargetException;
37*5eae8ebbSCole Faust import java.util.ArrayList;
38*5eae8ebbSCole Faust import java.util.Comparator;
39*5eae8ebbSCole Faust import java.util.List;
40*5eae8ebbSCole Faust 
41*5eae8ebbSCole Faust public class LevelSelectActivity extends ListActivity {
42*5eae8ebbSCole Faust     private final static int UNLOCK_ALL_LEVELS_ID = 0;
43*5eae8ebbSCole Faust     private final static int UNLOCK_NEXT_LEVEL_ID = 1;
44*5eae8ebbSCole Faust     private final static LevelDataComparator sLevelComparator = new LevelDataComparator();
45*5eae8ebbSCole Faust     private ArrayList<LevelMetaData> mLevelData;
46*5eae8ebbSCole Faust     private Animation mButtonFlickerAnimation;
47*5eae8ebbSCole Faust     private boolean mLevelSelected;
48*5eae8ebbSCole Faust 
49*5eae8ebbSCole Faust     private class LevelMetaData {
50*5eae8ebbSCole Faust         public LevelTree.Level level;
51*5eae8ebbSCole Faust         public int x;
52*5eae8ebbSCole Faust         public int y;
53*5eae8ebbSCole Faust         boolean enabled;
54*5eae8ebbSCole Faust 
55*5eae8ebbSCole Faust         @Override
toString()56*5eae8ebbSCole Faust         public String toString() {
57*5eae8ebbSCole Faust             return level.name;
58*5eae8ebbSCole Faust         }
59*5eae8ebbSCole Faust     }
60*5eae8ebbSCole Faust 
61*5eae8ebbSCole Faust     private class DisableItemArrayAdapter<T> extends ArrayAdapter<T> {
62*5eae8ebbSCole Faust     	private static final int TYPE_ENABLED = 0;
63*5eae8ebbSCole Faust     	private static final int TYPE_DISABLED = 1;
64*5eae8ebbSCole Faust     	private static final int TYPE_COMPLETED = 2;
65*5eae8ebbSCole Faust     	private static final int TYPE_COUNT = 3;
66*5eae8ebbSCole Faust 
67*5eae8ebbSCole Faust         private int mRowResource;
68*5eae8ebbSCole Faust         private int mDisabledRowResource;
69*5eae8ebbSCole Faust         private int mCompletedRowResource;
70*5eae8ebbSCole Faust         private Context mContext;
71*5eae8ebbSCole Faust         private int mTextViewResource;
72*5eae8ebbSCole Faust         private int mTextViewResource2;
73*5eae8ebbSCole Faust 
DisableItemArrayAdapter(Context context, int resource, int disabledResource, int completedResource, int textViewResourceId, int textViewResourceId2, List<T> objects)74*5eae8ebbSCole Faust         public DisableItemArrayAdapter(Context context, int resource, int disabledResource, int completedResource,
75*5eae8ebbSCole Faust                 int textViewResourceId, int textViewResourceId2, List<T> objects) {
76*5eae8ebbSCole Faust             super(context, resource, textViewResourceId, objects);
77*5eae8ebbSCole Faust             mRowResource = resource;
78*5eae8ebbSCole Faust             mDisabledRowResource = disabledResource;
79*5eae8ebbSCole Faust             mCompletedRowResource = completedResource;
80*5eae8ebbSCole Faust             mContext = context;
81*5eae8ebbSCole Faust             mTextViewResource = textViewResourceId;
82*5eae8ebbSCole Faust             mTextViewResource2 = textViewResourceId2;
83*5eae8ebbSCole Faust         }
84*5eae8ebbSCole Faust 
85*5eae8ebbSCole Faust         @Override
isEnabled(int position)86*5eae8ebbSCole Faust         public boolean isEnabled(int position) {
87*5eae8ebbSCole Faust             // TODO: do we have separators in this list?
88*5eae8ebbSCole Faust             return mLevelData.get(position).enabled;
89*5eae8ebbSCole Faust         }
90*5eae8ebbSCole Faust 
91*5eae8ebbSCole Faust 
92*5eae8ebbSCole Faust         @Override
areAllItemsEnabled()93*5eae8ebbSCole Faust 		public boolean areAllItemsEnabled() {
94*5eae8ebbSCole Faust 			return false;
95*5eae8ebbSCole Faust 		}
96*5eae8ebbSCole Faust 
97*5eae8ebbSCole Faust 		@Override
getItemViewType(int position)98*5eae8ebbSCole Faust 		public int getItemViewType(int position) {
99*5eae8ebbSCole Faust 			int type = TYPE_ENABLED;
100*5eae8ebbSCole Faust 			LevelMetaData level = mLevelData.get(position);
101*5eae8ebbSCole Faust 			if (level != null) {
102*5eae8ebbSCole Faust 				if (!level.enabled) {
103*5eae8ebbSCole Faust 					if (level.level.completed) {
104*5eae8ebbSCole Faust 						type = TYPE_COMPLETED;
105*5eae8ebbSCole Faust 					} else {
106*5eae8ebbSCole Faust 						type = TYPE_DISABLED;
107*5eae8ebbSCole Faust 					}
108*5eae8ebbSCole Faust 				}
109*5eae8ebbSCole Faust 			}
110*5eae8ebbSCole Faust 			return type;
111*5eae8ebbSCole Faust 		}
112*5eae8ebbSCole Faust 
113*5eae8ebbSCole Faust 		@Override
getViewTypeCount()114*5eae8ebbSCole Faust 		public int getViewTypeCount() {
115*5eae8ebbSCole Faust 			return TYPE_COUNT;
116*5eae8ebbSCole Faust 		}
117*5eae8ebbSCole Faust 
118*5eae8ebbSCole Faust 		@Override
hasStableIds()119*5eae8ebbSCole Faust 		public boolean hasStableIds() {
120*5eae8ebbSCole Faust 			return true;
121*5eae8ebbSCole Faust 		}
122*5eae8ebbSCole Faust 
123*5eae8ebbSCole Faust 		@Override
isEmpty()124*5eae8ebbSCole Faust 		public boolean isEmpty() {
125*5eae8ebbSCole Faust 			return mLevelData.size() > 0;
126*5eae8ebbSCole Faust 		}
127*5eae8ebbSCole Faust 
128*5eae8ebbSCole Faust 		@Override
getView(int position, View convertView, ViewGroup parent)129*5eae8ebbSCole Faust         public View getView (int position, View convertView, ViewGroup parent) {
130*5eae8ebbSCole Faust             View sourceView = null;
131*5eae8ebbSCole Faust             if (mLevelData.get(position).enabled) {
132*5eae8ebbSCole Faust             	if (convertView != null && convertView.getId() == mRowResource) {
133*5eae8ebbSCole Faust             		sourceView = convertView;
134*5eae8ebbSCole Faust             	} else {
135*5eae8ebbSCole Faust             		sourceView = LayoutInflater.from(mContext).inflate(
136*5eae8ebbSCole Faust             				mRowResource, parent, false);
137*5eae8ebbSCole Faust             	}
138*5eae8ebbSCole Faust             } else if (mLevelData.get(position).level.completed) {
139*5eae8ebbSCole Faust             	if (convertView != null && convertView.getId() == mCompletedRowResource) {
140*5eae8ebbSCole Faust             		sourceView = convertView;
141*5eae8ebbSCole Faust             	} else {
142*5eae8ebbSCole Faust             		sourceView = LayoutInflater.from(mContext).inflate(
143*5eae8ebbSCole Faust             				mCompletedRowResource, parent, false);
144*5eae8ebbSCole Faust             	}
145*5eae8ebbSCole Faust             } else {
146*5eae8ebbSCole Faust             	if (convertView != null && convertView.getId() == mDisabledRowResource) {
147*5eae8ebbSCole Faust             		sourceView = convertView;
148*5eae8ebbSCole Faust             	} else {
149*5eae8ebbSCole Faust             		sourceView = LayoutInflater.from(mContext).inflate(
150*5eae8ebbSCole Faust                         mDisabledRowResource, parent, false);
151*5eae8ebbSCole Faust             	}
152*5eae8ebbSCole Faust             }
153*5eae8ebbSCole Faust             TextView view = (TextView)sourceView.findViewById(mTextViewResource);
154*5eae8ebbSCole Faust             if (view != null) {
155*5eae8ebbSCole Faust                 view.setText(mLevelData.get(position).level.name);
156*5eae8ebbSCole Faust             }
157*5eae8ebbSCole Faust 
158*5eae8ebbSCole Faust             TextView view2 = (TextView)sourceView.findViewById(mTextViewResource2);
159*5eae8ebbSCole Faust             if (view2 != null) {
160*5eae8ebbSCole Faust                 view2.setText(mLevelData.get(position).level.timeStamp);
161*5eae8ebbSCole Faust             }
162*5eae8ebbSCole Faust             return sourceView;
163*5eae8ebbSCole Faust         }
164*5eae8ebbSCole Faust 
165*5eae8ebbSCole Faust     }
166*5eae8ebbSCole Faust 
167*5eae8ebbSCole Faust     /** Called when the activity is first created. */
168*5eae8ebbSCole Faust     @Override
onCreate(Bundle savedInstanceState)169*5eae8ebbSCole Faust     public void onCreate(Bundle savedInstanceState) {
170*5eae8ebbSCole Faust         super.onCreate(savedInstanceState);
171*5eae8ebbSCole Faust         setContentView(R.layout.level_select);
172*5eae8ebbSCole Faust         mLevelData = new ArrayList<LevelMetaData>();
173*5eae8ebbSCole Faust 
174*5eae8ebbSCole Faust         if (getIntent().getBooleanExtra("unlockAll", false)) {
175*5eae8ebbSCole Faust         	generateLevelList(false);
176*5eae8ebbSCole Faust         	for (LevelMetaData level : mLevelData) {
177*5eae8ebbSCole Faust                 level.enabled = true;
178*5eae8ebbSCole Faust             }
179*5eae8ebbSCole Faust         } else {
180*5eae8ebbSCole Faust         	generateLevelList(true);
181*5eae8ebbSCole Faust         }
182*5eae8ebbSCole Faust 
183*5eae8ebbSCole Faust 
184*5eae8ebbSCole Faust         DisableItemArrayAdapter<LevelMetaData> adapter = new DisableItemArrayAdapter<LevelMetaData>(
185*5eae8ebbSCole Faust                 this, R.layout.level_select_row, R.layout.level_select_disabled_row, R.layout.level_select_completed_row,
186*5eae8ebbSCole Faust                 R.id.title, R.id.time, mLevelData);
187*5eae8ebbSCole Faust 
188*5eae8ebbSCole Faust         adapter.sort(sLevelComparator);
189*5eae8ebbSCole Faust 
190*5eae8ebbSCole Faust         setListAdapter(adapter);
191*5eae8ebbSCole Faust 
192*5eae8ebbSCole Faust         mButtonFlickerAnimation = AnimationUtils.loadAnimation(this, R.anim.button_flicker);
193*5eae8ebbSCole Faust 
194*5eae8ebbSCole Faust         mLevelSelected = false;
195*5eae8ebbSCole Faust 
196*5eae8ebbSCole Faust         // Keep the volume control type consistent across all activities.
197*5eae8ebbSCole Faust         setVolumeControlStream(AudioManager.STREAM_MUSIC);
198*5eae8ebbSCole Faust     }
199*5eae8ebbSCole Faust 
generateLevelList(boolean onlyAllowThePast)200*5eae8ebbSCole Faust     protected void generateLevelList(boolean onlyAllowThePast) {
201*5eae8ebbSCole Faust     	final int count = LevelTree.levels.size();
202*5eae8ebbSCole Faust         boolean oneBranchUnlocked = false;
203*5eae8ebbSCole Faust         for (int x = 0; x < count; x++) {
204*5eae8ebbSCole Faust             boolean anyUnlocksThisBranch = false;
205*5eae8ebbSCole Faust             final LevelTree.LevelGroup group = LevelTree.levels.get(x);
206*5eae8ebbSCole Faust             for (int y = 0; y < group.levels.size(); y++) {
207*5eae8ebbSCole Faust                 LevelTree.Level level = group.levels.get(y);
208*5eae8ebbSCole Faust                 boolean enabled = false;
209*5eae8ebbSCole Faust                 if (!level.completed && !oneBranchUnlocked) {
210*5eae8ebbSCole Faust                     enabled = true;
211*5eae8ebbSCole Faust                     anyUnlocksThisBranch = true;
212*5eae8ebbSCole Faust                 }
213*5eae8ebbSCole Faust                 if (enabled || level.completed || !onlyAllowThePast || (onlyAllowThePast && level.inThePast)) {
214*5eae8ebbSCole Faust                 	addItem(level, x, y, enabled);
215*5eae8ebbSCole Faust                 }
216*5eae8ebbSCole Faust             }
217*5eae8ebbSCole Faust             if (anyUnlocksThisBranch) {
218*5eae8ebbSCole Faust                 oneBranchUnlocked = true;
219*5eae8ebbSCole Faust             }
220*5eae8ebbSCole Faust         }
221*5eae8ebbSCole Faust     }
222*5eae8ebbSCole Faust 
unlockNext()223*5eae8ebbSCole Faust     protected void unlockNext() {
224*5eae8ebbSCole Faust     	final int count = LevelTree.levels.size();
225*5eae8ebbSCole Faust         for (int x = 0; x < count; x++) {
226*5eae8ebbSCole Faust             final LevelTree.LevelGroup group = LevelTree.levels.get(x);
227*5eae8ebbSCole Faust             for (int y = 0; y < group.levels.size(); y++) {
228*5eae8ebbSCole Faust                 LevelTree.Level level = group.levels.get(y);
229*5eae8ebbSCole Faust                 if (!level.completed) {
230*5eae8ebbSCole Faust                 	level.completed = true;
231*5eae8ebbSCole Faust                     return;
232*5eae8ebbSCole Faust                 }
233*5eae8ebbSCole Faust             }
234*5eae8ebbSCole Faust 
235*5eae8ebbSCole Faust         }
236*5eae8ebbSCole Faust     }
237*5eae8ebbSCole Faust 
238*5eae8ebbSCole Faust 
239*5eae8ebbSCole Faust     @Override
onListItemClick(ListView l, View v, int position, long id)240*5eae8ebbSCole Faust     protected void onListItemClick(ListView l, View v, int position, long id) {
241*5eae8ebbSCole Faust         if (!mLevelSelected) {
242*5eae8ebbSCole Faust 	        super.onListItemClick(l, v, position, id);
243*5eae8ebbSCole Faust 	        LevelMetaData selectedLevel = mLevelData.get(position);
244*5eae8ebbSCole Faust 	        if (selectedLevel.enabled) {
245*5eae8ebbSCole Faust 	        	mLevelSelected = true;
246*5eae8ebbSCole Faust 	            Intent intent = new Intent();
247*5eae8ebbSCole Faust 
248*5eae8ebbSCole Faust 	            intent.putExtra("resource", selectedLevel.level.resource);
249*5eae8ebbSCole Faust 	            intent.putExtra("row", selectedLevel.x);
250*5eae8ebbSCole Faust 	            intent.putExtra("index", selectedLevel.y);
251*5eae8ebbSCole Faust 	            TextView text = (TextView)v.findViewById(R.id.title);
252*5eae8ebbSCole Faust 	            if (text != null) {
253*5eae8ebbSCole Faust 	            	text.startAnimation(mButtonFlickerAnimation);
254*5eae8ebbSCole Faust 	            	mButtonFlickerAnimation.setAnimationListener(new EndActivityAfterAnimation(intent));
255*5eae8ebbSCole Faust 	            } else {
256*5eae8ebbSCole Faust 	                setResult(RESULT_OK, intent);
257*5eae8ebbSCole Faust 	            	finish();
258*5eae8ebbSCole Faust 	            	if (UIConstants.mOverridePendingTransition != null) {
259*5eae8ebbSCole Faust 		 		       try {
260*5eae8ebbSCole Faust 		 		    	  UIConstants.mOverridePendingTransition.invoke(LevelSelectActivity.this, R.anim.activity_fade_in, R.anim.activity_fade_out);
261*5eae8ebbSCole Faust 		 		       } catch (InvocationTargetException ite) {
262*5eae8ebbSCole Faust 		 		           DebugLog.d("Activity Transition", "Invocation Target Exception");
263*5eae8ebbSCole Faust 		 		       } catch (IllegalAccessException ie) {
264*5eae8ebbSCole Faust 		 		    	   DebugLog.d("Activity Transition", "Illegal Access Exception");
265*5eae8ebbSCole Faust 		 		       }
266*5eae8ebbSCole Faust 		            }
267*5eae8ebbSCole Faust 	            }
268*5eae8ebbSCole Faust 	        }
269*5eae8ebbSCole Faust         }
270*5eae8ebbSCole Faust     }
271*5eae8ebbSCole Faust 
addItem(LevelTree.Level level, int x, int y, boolean enabled)272*5eae8ebbSCole Faust     private void addItem(LevelTree.Level level, int x, int y, boolean enabled) {
273*5eae8ebbSCole Faust         LevelMetaData data = new LevelMetaData();
274*5eae8ebbSCole Faust         data.level = level;
275*5eae8ebbSCole Faust         data.x = x;
276*5eae8ebbSCole Faust         data.y = y;
277*5eae8ebbSCole Faust         data.enabled = enabled;
278*5eae8ebbSCole Faust         mLevelData.add(data);
279*5eae8ebbSCole Faust     }
280*5eae8ebbSCole Faust 
281*5eae8ebbSCole Faust     @Override
onCreateOptionsMenu(Menu menu)282*5eae8ebbSCole Faust     public boolean onCreateOptionsMenu(Menu menu) {
283*5eae8ebbSCole Faust         super.onCreateOptionsMenu(menu);
284*5eae8ebbSCole Faust         boolean handled = false;
285*5eae8ebbSCole Faust         if (AndouKun.VERSION < 0) {
286*5eae8ebbSCole Faust         	menu.add(0, UNLOCK_NEXT_LEVEL_ID, 0, R.string.unlock_next_level);
287*5eae8ebbSCole Faust         	menu.add(0, UNLOCK_ALL_LEVELS_ID, 0, R.string.unlock_levels);
288*5eae8ebbSCole Faust 
289*5eae8ebbSCole Faust         	handled = true;
290*5eae8ebbSCole Faust         }
291*5eae8ebbSCole Faust         return handled;
292*5eae8ebbSCole Faust     }
293*5eae8ebbSCole Faust 
294*5eae8ebbSCole Faust     @Override
onMenuItemSelected(int featureId, MenuItem item)295*5eae8ebbSCole Faust     public boolean onMenuItemSelected(int featureId, MenuItem item) {
296*5eae8ebbSCole Faust         switch(item.getItemId()) {
297*5eae8ebbSCole Faust         case UNLOCK_NEXT_LEVEL_ID:
298*5eae8ebbSCole Faust         	unlockNext();
299*5eae8ebbSCole Faust         	mLevelData.clear();
300*5eae8ebbSCole Faust         	generateLevelList(false);
301*5eae8ebbSCole Faust             ((ArrayAdapter)getListAdapter()).sort(sLevelComparator);
302*5eae8ebbSCole Faust             ((ArrayAdapter)getListAdapter()).notifyDataSetChanged();
303*5eae8ebbSCole Faust 
304*5eae8ebbSCole Faust         	return true;
305*5eae8ebbSCole Faust 
306*5eae8ebbSCole Faust         case UNLOCK_ALL_LEVELS_ID:
307*5eae8ebbSCole Faust         	// Regenerate the level list to remove the past-only filter.
308*5eae8ebbSCole Faust         	mLevelData.clear();
309*5eae8ebbSCole Faust         	generateLevelList(false);
310*5eae8ebbSCole Faust             for (LevelMetaData level : mLevelData) {
311*5eae8ebbSCole Faust                 level.enabled = true;
312*5eae8ebbSCole Faust             }
313*5eae8ebbSCole Faust 
314*5eae8ebbSCole Faust             ((ArrayAdapter)getListAdapter()).sort(sLevelComparator);
315*5eae8ebbSCole Faust             ((ArrayAdapter)getListAdapter()).notifyDataSetChanged();
316*5eae8ebbSCole Faust             return true;
317*5eae8ebbSCole Faust         }
318*5eae8ebbSCole Faust 
319*5eae8ebbSCole Faust         return super.onMenuItemSelected(featureId, item);
320*5eae8ebbSCole Faust     }
321*5eae8ebbSCole Faust 
322*5eae8ebbSCole Faust 
323*5eae8ebbSCole Faust     @Override
onKeyDown(int keyCode, KeyEvent event)324*5eae8ebbSCole Faust 	public boolean onKeyDown(int keyCode, KeyEvent event) {
325*5eae8ebbSCole Faust     	boolean result = false;
326*5eae8ebbSCole Faust 		if (keyCode == KeyEvent.KEYCODE_BACK) {
327*5eae8ebbSCole Faust 			result = true;
328*5eae8ebbSCole Faust 		}
329*5eae8ebbSCole Faust 		return result;
330*5eae8ebbSCole Faust 	}
331*5eae8ebbSCole Faust 
332*5eae8ebbSCole Faust 	@Override
onKeyUp(int keyCode, KeyEvent event)333*5eae8ebbSCole Faust 	public boolean onKeyUp(int keyCode, KeyEvent event) {
334*5eae8ebbSCole Faust 		boolean result = false;
335*5eae8ebbSCole Faust 		if (keyCode == KeyEvent.KEYCODE_BACK) {
336*5eae8ebbSCole Faust 			result = true;
337*5eae8ebbSCole Faust 		}
338*5eae8ebbSCole Faust 		return result;
339*5eae8ebbSCole Faust 	}
340*5eae8ebbSCole Faust 
341*5eae8ebbSCole Faust 
342*5eae8ebbSCole Faust 	/** Comparator for level meta data. */
343*5eae8ebbSCole Faust     private final static class LevelDataComparator implements Comparator<LevelMetaData> {
compare(final LevelMetaData object1, final LevelMetaData object2)344*5eae8ebbSCole Faust         public int compare(final LevelMetaData object1, final LevelMetaData object2) {
345*5eae8ebbSCole Faust             int result = 0;
346*5eae8ebbSCole Faust             if (object1 == null && object2 != null) {
347*5eae8ebbSCole Faust                 result = 1;
348*5eae8ebbSCole Faust             } else if (object1 != null && object2 == null) {
349*5eae8ebbSCole Faust                 result = -1;
350*5eae8ebbSCole Faust             } else if (object1 != null && object2 != null) {
351*5eae8ebbSCole Faust                 result = object1.level.timeStamp.compareTo(object2.level.timeStamp);
352*5eae8ebbSCole Faust             }
353*5eae8ebbSCole Faust             return result;
354*5eae8ebbSCole Faust         }
355*5eae8ebbSCole Faust     }
356*5eae8ebbSCole Faust 
357*5eae8ebbSCole Faust     protected class EndActivityAfterAnimation implements Animation.AnimationListener {
358*5eae8ebbSCole Faust         private Intent mIntent;
359*5eae8ebbSCole Faust 
EndActivityAfterAnimation(Intent intent)360*5eae8ebbSCole Faust         EndActivityAfterAnimation(Intent intent) {
361*5eae8ebbSCole Faust             mIntent = intent;
362*5eae8ebbSCole Faust         }
363*5eae8ebbSCole Faust 
364*5eae8ebbSCole Faust 
onAnimationEnd(Animation animation)365*5eae8ebbSCole Faust         public void onAnimationEnd(Animation animation) {
366*5eae8ebbSCole Faust             setResult(RESULT_OK, mIntent);
367*5eae8ebbSCole Faust             finish();
368*5eae8ebbSCole Faust         }
369*5eae8ebbSCole Faust 
onAnimationRepeat(Animation animation)370*5eae8ebbSCole Faust         public void onAnimationRepeat(Animation animation) {
371*5eae8ebbSCole Faust             // TODO Auto-generated method stub
372*5eae8ebbSCole Faust 
373*5eae8ebbSCole Faust         }
374*5eae8ebbSCole Faust 
onAnimationStart(Animation animation)375*5eae8ebbSCole Faust         public void onAnimationStart(Animation animation) {
376*5eae8ebbSCole Faust             // TODO Auto-generated method stub
377*5eae8ebbSCole Faust 
378*5eae8ebbSCole Faust         }
379*5eae8ebbSCole Faust 
380*5eae8ebbSCole Faust     }
381*5eae8ebbSCole Faust }
382*5eae8ebbSCole Faust 
383