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.adad; 
 
import static com.congenialmobile.DebugSettings.DEBUG_ADAD; 
import static com.congenialmobile.DebugSettings.TAG; 
 
import java.net.URLEncoder; 
import java.util.Locale; 
import java.util.UUID; 
 
import android.app.Activity; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.pm.ApplicationInfo; 
import android.content.pm.PackageManager; 
import android.content.pm.PackageManager.NameNotFoundException; 
import android.os.Build; 
import android.os.Bundle; 
import android.provider.Settings.Secure; 
import android.telephony.TelephonyManager; 
import android.util.Log; 
 
public class AdsManager { 
 
    private final static String PREF_TAG    = "ADAD_PREF"
    private final static String PREF_UUID   = "PREF_UUID"
 
    private final static String URL_BASE    = "http://adad.ir/"
//    private final static String URL_BASE    = "http://10.0.0.61:8000/"; 
    private final static String URL_AD_VIEW = "adview/"
 
    private Context             mContext; 
 
    private String              mToken      = ""
    private String              mUUID       = ""
    private float               mDensity    = 0
    private int                 mWidth      = 0
    private int                 mHeight     = 0
 
    AdsManager(Context context) { 
        mContext = context; 
        readAppToken(); 
        prepareUUID(); 
    } 
 
    public void setDensity(float density) { 
        mDensity = density; 
    } 
 
    public void setWidthHeight(int w, int h) { 
        mWidth = w; 
        mHeight = h; 
    } 
 
    /**
     * Reads the app token from AndroidManifest.xml. 
     *  
     * Adad gives a special token for each app, according to its package name, and this should be saved in the 
     * AndroidManifest as told by our manual. This function reads that. 
     */
 
    private void readAppToken() { 
        try { 
            ApplicationInfo appinfo = mContext.getPackageManager().getApplicationInfo(mContext.getPackageName(), 
                    PackageManager.GET_META_DATA); 
            Bundle bundle = appinfo.metaData; 
            if (bundle != null) { 
                mToken = bundle.getString("ADAD_TOKEN"); 
            } 
        } catch (NameNotFoundException nfe) { 
            if (DEBUG_ADAD) { 
                Log.w(TAG, "AdsManager :: NameNotFoundException in readAppToken", nfe); 
            } 
        } 
    } 
 
    /**
     * Prepares the unique UUID for this app installation. 
     *  
     * This actually means making UUID for the first time and saving this. The next time the UUID will be loaded from 
     * preferences. 
     */
 
    private void prepareUUID() { 
        // Does it exist already? 
        SharedPreferences pref = mContext.getSharedPreferences(PREF_TAG, Activity.MODE_PRIVATE); 
        mUUID = pref.getString(PREF_UUID, ""); 
        if (mUUID.length() > 0) { 
            return
        } 
 
        // No, it seems to be the first time this app runs on this device. Make a new UUID. 
        mUUID = UUID.randomUUID().toString(); 
        ; 
 
        // Save the new generated UUID; 
        SharedPreferences.Editor editor = pref.edit(); 
        editor.putString(PREF_UUID, mUUID); 
        editor.commit(); 
    } 
 
    /**
     * Prepare the data that should be sent to the server. 
     *  
     * The returned string 
     *  
     * @return The string ready to be appended to the URL for passing data by GET method. 
     */
 
    private String prepareData() { 
        TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); 
 
        String s = null
        s = "deviceid=" + mUUID; 
        s += "&androidid=" + Secure.getString(mContext.getContentResolver(), Secure.ANDROID_ID); 
        s += "&token=" + mToken; 
        s += "&brand=" + URLEncoder.encode(Build.BRAND); 
        s += "&model=" + URLEncoder.encode(Build.MODEL); 
        s += "&width=" + mWidth; 
        s += "&height=" + mHeight; 
        s += "&density=" + mDensity; 
        s += "&car=" + URLEncoder.encode(tm.getNetworkOperator()); 
        s += "&data="
        if (tm.getDataState() == TelephonyManager.DATA_CONNECTED) { 
            s += "1"
        } else { 
            s += "0"
        } 
        s += "&lang=" + Locale.getDefault().getLanguage(); 
        //TODO: send bazaar version and adad-client version too 
        // ComponentName c = new ComponentName(); 
        // PackageInfo pinfo = mpm.getPackageInfor(comp.getPacks) 
        // 
 
        return s; 
    } 
 
    /**
     * Makes the ad URL for this app on this device. 
     *  
     * @return The URL to be shown as ad. 
     */
 
    public String getURL() { 
        String url = URL_BASE + URL_AD_VIEW + "?" + prepareData(); 
        if (DEBUG_ADAD) { 
            Log.i(TAG, "AdsManager :: getURL() :: url = " + url); 
        } 
        return url; 
    } 
}