/******************************************************************************* * Copyright 2011, 2012, 2013 fanfou.com, Xiaoke, Zhang * * 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.fanfou.app.opensource; import android.app.Application; import android.content.ContentResolver; import android.content.Context; import android.content.SharedPreferences; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.preference.PreferenceManager; import android.util.Log; import com.fanfou.app.opensource.api.ApiClient; import com.fanfou.app.opensource.api.ApiClientFactory; import com.fanfou.app.opensource.api.bean.User; import com.fanfou.app.opensource.auth.OAuthToken; import com.fanfou.app.opensource.cache.ImageLoader; import com.fanfou.app.opensource.cache.ImageLoaderFactory; import com.fanfou.app.opensource.db.Contents.DirectMessageInfo; import com.fanfou.app.opensource.db.Contents.DraftInfo; import com.fanfou.app.opensource.db.Contents.StatusInfo; import com.fanfou.app.opensource.db.Contents.UserInfo; import com.fanfou.app.opensource.util.AlarmHelper; import com.fanfou.app.opensource.util.IOHelper; import com.fanfou.app.opensource.util.NetworkHelper; import com.fanfou.app.opensource.util.OptionHelper; import com.fanfou.app.opensource.util.StringHelper; /** * @author mcxiaoke * @version 1.0 2011.05.25 */ public class AppContext extends Application { public static enum Mobile { WIFI, HSDPA, NET, WAP; } // DEBUG开关,为false时不打印任何日志 public static final boolean DEBUG = false; public static final boolean TEST = false; public static boolean active = false; public static boolean noConnection = false; public static boolean verified; public static int appVersionCode; public static String appVersionName; private static String sUserId; private static String sUserScreenName; private static AppContext sInstance; private static SharedPreferences sPreferences; private static OAuthToken sToken; private static ImageLoader sLoader; private static ApiClient sApiClient; public static ApiClient getApiClient() { return AppContext.sApiClient; } public static AppContext getAppContext() { return AppContext.sInstance; } public static String getConsumerKey() { return AppContext.getAppContext().getString(R.string.api_consumer_key); } public static String getConsumerSecret() { return AppContext.getAppContext().getString( R.string.api_consumer_secret); } public static ImageLoader getImageLoader() { return AppContext.sLoader; } public static OAuthToken getOAuthToken() { return AppContext.sToken; } public static SharedPreferences getPreferences() { return AppContext.sPreferences; } public static String getUserId() { return AppContext.sUserId; } public static String getUserName() { return AppContext.sUserScreenName; } public static synchronized void handleLogout(final Context context) { AppContext.getImageLoader().clearQueue(); AppContext.removeAccountAlarms(context); AppContext.removeAccountInfo(context); AppContext.removeAccountData(context); } public static synchronized void handleReset(final Context context) { AppContext.getImageLoader().clearQueue(); AppContext.removeAccountAlarms(context); AppContext.removeAccountInfo(context); AppContext.removeAccountData(context); OptionHelper.clearSettings(); IOHelper.ClearCache(context); } public static boolean isWifi() { return NetworkHelper.isWifi(AppContext.getAppContext()); } private static void removeAccountAlarms(final Context context) { AlarmHelper.unsetScheduledTasks(context); } private static void removeAccountData(final Context context) { if (AppContext.DEBUG) { Log.d("App", "removeAccountData"); } final ContentResolver cr = context.getContentResolver(); cr.delete(StatusInfo.CONTENT_URI, null, null); cr.delete(UserInfo.CONTENT_URI, null, null); cr.delete(DirectMessageInfo.CONTENT_URI, null, null); cr.delete(DraftInfo.CONTENT_URI, null, null); } private static void removeAccountInfo(final Context context) { if (AppContext.DEBUG) { Log.d("App", "removeAccountInfo"); } AppContext.setOAuthToken(null); AppContext.sUserId = null; AppContext.sUserScreenName = null; OptionHelper.removeAccountInfo(context); } public synchronized static void setOAuthToken(final OAuthToken otoken) { if (otoken == null) { AppContext.verified = false; AppContext.sToken = null; } else { AppContext.verified = true; AppContext.sToken = otoken; } } public static void updateAccountInfo(final Context context, final User u, final OAuthToken otoken) { if (AppContext.DEBUG) { Log.d("App", "updateAccountInfo"); } AppContext.sUserId = u.id; AppContext.sUserScreenName = u.screenName; AppContext.setOAuthToken(otoken); OptionHelper.updateAccountInfo(context, u, otoken); } private void init() { AppContext.sInstance = this; AppContext.sPreferences = PreferenceManager .getDefaultSharedPreferences(this); } private void initAppInfo() { if (AppContext.DEBUG) { Log.d("App", "initAppInfo"); } final PackageManager pm = getPackageManager(); PackageInfo pi; try { pi = pm.getPackageInfo(getPackageName(), 0); } catch (final NameNotFoundException e) { pi = new PackageInfo(); pi.versionName = "1.0"; pi.versionCode = 20110901; } AppContext.appVersionCode = pi.versionCode; AppContext.appVersionName = pi.versionName; } private void initPreferences() { PreferenceManager.setDefaultValues(this, R.xml.options, false); AppContext.sUserId = OptionHelper.readString(this, R.string.option_userid, null); AppContext.sUserScreenName = OptionHelper.readString(this, R.string.option_username, null); final String oauthAccessToken = OptionHelper.readString(this, R.string.option_oauth_token, null); final String oauthAccessTokenSecret = OptionHelper.readString(this, R.string.option_oauth_token_secret, null); AppContext.verified = !StringHelper.isEmpty(oauthAccessTokenSecret); if (AppContext.verified) { AppContext.sToken = new OAuthToken(oauthAccessToken, oauthAccessTokenSecret); } } @Override public void onCreate() { super.onCreate(); init(); initAppInfo(); initPreferences(); versionCheck(); AppContext.sLoader = ImageLoaderFactory.createImageLoader(); AppContext.sApiClient = ApiClientFactory.createApiClient(this); } public void updateUserInfo(final User u) { if (AppContext.DEBUG) { Log.d("App", "updateAccountInfo u"); } AppContext.sUserId = u.id; AppContext.sUserScreenName = u.screenName; OptionHelper.updateUserInfo(this, u); } private void versionCheck() { final int oldVersionCode = OptionHelper.readInt(this, R.string.option_old_version_code, 0); if (oldVersionCode < AppContext.appVersionCode) { OptionHelper.saveInt(this, R.string.option_old_version_code, AppContext.appVersionCode); AlarmHelper.cleanAlarmFlags(this); } if (AppContext.DEBUG) { Log.d("App", "versionCheck old=" + oldVersionCode + " current=" + AppContext.appVersionCode); } AlarmHelper.checkScheduledTasks(this); } }