Project: BazaarUtils
/*
 * Copyright (C) 2011 Congenial Mobile Co. 
 * 
 * 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.congenialmobile.utils; 
 
import static com.congenialmobile.DebugSettings.DEBUG_BAZAARUTILS; 
import static com.congenialmobile.DebugSettings.TAG; 
 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLEncoder; 
import java.util.Scanner; 
 
import android.content.Context; 
import android.content.ContextWrapper; 
import android.content.pm.PackageManager.NameNotFoundException; 
import android.util.Log; 
 
/**
 * Bazaar (Android application marketplace) related utility methods 
 *  
 * @author Reza Mohammadi <[email protected]
 *  
 */
 
public class BazaarUtils { 
 
    public final static String URLPREFIX_CAFEBAZAAR_VERSION = "http://cafebazaar.ir/app/version/?all=1&app="
    public final static String BAZAAR_PACKAGENAME = "com.farsitel.bazaar"
 
    /**
     *  
     * @param packageName 
     * @return versionCode of the latest version on Bazaar, or -1 if not found 
     * @throws IOException 
     */
 
    public static long getLatestVersionCodeOnBazaar(String packageName) throws IOException { 
        URL url = new URL(URLPREFIX_CAFEBAZAAR_VERSION + URLEncoder.encode(packageName)); 
        HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
        connection.setConnectTimeout(20000); 
        connection.setReadTimeout(20000); 
        connection.addRequestProperty("Cache-Control""no-cache,max-age=0"); 
        connection.addRequestProperty("Pragma""no-cache"); 
 
        int responseCode = connection.getResponseCode(); 
 
        if (responseCode == HttpURLConnection.HTTP_OK) { 
            InputStream is = connection.getInputStream(); 
            Scanner sc = new Scanner(is); 
            return sc.nextLong(); 
        } else { 
            if (DEBUG_BAZAARUTILS) 
                Log.w(TAG, "HTTPError for " + packageName + ": " + responseCode); 
        } 
        return -1
    } 
 
    /**
     *  
     * @param context 
     * @return versionCode of the latest version on Bazaar, or -1 if not found 
     */
 
    public static long getLatestVersionCodeOnBazaar(Context context) throws IOException { 
        return getLatestVersionCodeOnBazaar(context.getPackageName()); 
    } 
 
    /**
     *  
     * @param contextWrapper 
     * @param packageName 
     * @return true if the app can be upgraded on Bazaar 
     */
 
    public static boolean isUpgradableOnBazaar(ContextWrapper contextWrapper, String packageName) throws IOException { 
        long remoteVersion = getLatestVersionCodeOnBazaar(packageName); 
        long localVersion = 0
        try { 
            localVersion = contextWrapper.getPackageManager().getPackageInfo(packageName, 0).versionCode; 
            if (DEBUG_BAZAARUTILS) 
                Log.i(TAG, "Result for " + packageName + ": remoteVersion(" + (localVersion > remoteVersion) + ")=" 
                        + remoteVersion + ", localVersion=" + localVersion); 
        } catch (NameNotFoundException e) { 
            Log.w(TAG, "NameNotFoundException for " + packageName + "! How is it possible?", e); 
        } 
        return localVersion < remoteVersion; 
    } 
 
    /**
     *  
     * @param contextWrapper 
     * @return true if the current app can be upgraded on Bazaar 
     */
 
    public static boolean isUpgradableOnBazaar(ContextWrapper contextWrapper) throws IOException { 
        String packageName = contextWrapper.getPackageName(); 
        return isUpgradableOnBazaar(contextWrapper, packageName); 
    } 
}