13c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen/* 23c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * Copyright (C) 2009 The Android Open Source Project 33c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * 43c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * Licensed under the Apache License, Version 2.0 (the "License"); 53c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * you may not use this file except in compliance with the License. 63c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * You may obtain a copy of the License at 73c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * 83c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * http://www.apache.org/licenses/LICENSE-2.0 93c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * 103c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * Unless required by applicable law or agreed to in writing, software 113c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * distributed under the License is distributed on an "AS IS" BASIS, 123c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * See the License for the specific language governing permissions and 143c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen * limitations under the License. 153c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen */ 163c02f2877dc2f8f0b5c01d03fa2b487c040e4000Wei-Ta Chen 17d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkatpackage com.cooliris.app; 18d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 19d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkatimport android.app.Activity; 20d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkatimport android.content.Context; 21d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkatimport android.os.Handler; 22d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkatimport android.os.HandlerThread; 23d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkatimport android.util.DisplayMetrics; 24d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkatimport android.widget.Toast; 25d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 26d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkatimport java.util.HashMap; 27d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkatimport java.util.TimeZone; 28d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 29d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkatimport com.cooliris.media.ReverseGeocoder; 30d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 31d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat/* 32d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat * TODO: consider adding HashMap<object, object> for globals globals 33d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat * TODO: hook up other activity classes to App (besides Gallery and Search) 34d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat */ 35d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkatpublic class App { 36d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat static private final HashMap<Context, App> mMap = new HashMap<Context, App>(); 37d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 38d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat static public App get(Context context) { 39d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat return mMap.get(context); 40d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 41d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 42d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat public static final TimeZone CURRENT_TIME_ZONE = TimeZone.getDefault(); 43d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat public static float PIXEL_DENSITY = 0.0f; 44d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 45d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat private final Context mContext; 46d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat private final HandlerThread mHandlerThread = new HandlerThread("AppHandlerThread"); 47d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat private final Handler mHandler; 48d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat private ReverseGeocoder mReverseGeocoder = null; 49d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 50d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat private boolean mPaused = false; 51d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 52d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat public App(Context context) { 53d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat // register 54d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat mMap.put(context, this); 55d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 56d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat mContext = context; 57d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 58d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat if(PIXEL_DENSITY == 0.0f) { 59d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat DisplayMetrics metrics = new DisplayMetrics(); 60d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat ((Activity)mContext).getWindowManager().getDefaultDisplay().getMetrics(metrics); 61d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat PIXEL_DENSITY = metrics.density; 62d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 63d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 64d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat mHandlerThread.start(); 65d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat mHandler = new Handler(mHandlerThread.getLooper()); 66d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 67d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat mReverseGeocoder = new ReverseGeocoder(mContext); 68d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 69d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 70d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat public void shutdown() { 71d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat mReverseGeocoder.shutdown(); 72d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 73d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat // unregister 74d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat mMap.put(mContext, null); 75d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 76d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 77d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat public Context getContext() { 78d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat return mContext; 79d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 80d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 81d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat public Handler getHandler() { 82d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat while (mHandler == null) { 83d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat // Wait till the handler is created. 84d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat ; 85d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 86d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat return mHandler; 87d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 88d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 89d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat public ReverseGeocoder getReverseGeocoder() { 90d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat return mReverseGeocoder; 91d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 92d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 93d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat public boolean isPaused() { 94d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat return mPaused; 95d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 96d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 97d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// public void onCreate(Bundle savedInstanceState) { 98d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// } 99d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// 100d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// public void onStart() { 101d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// } 102d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// 103d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// public void onRestart() { 104d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// } 105d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 106d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat public void onResume() { 107d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat mPaused = false; 108d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 109d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 110d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat public void onPause() { 111d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat mReverseGeocoder.flushCache(); 112d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat mPaused = true; 113d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 114d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 115d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// public void onStop() { 116d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// 117d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// } 118d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// 119d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// public void onDestroy() { 120d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat// } 121d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat 122d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat public void showToast(final String string, final int duration) { 123d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat mHandler.post(new Runnable() { 124d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat public void run() { 125d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat Toast.makeText(mContext, string, duration).show(); 126d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 127d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat }); 128d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat } 129d93f177bf2bc26f4ad64ca2f7725da8b0347a77fVenkat} 130