Android Open Source - SanDisk-HQME-SDK Device Description






From Project

Back to project page SanDisk-HQME-SDK.

License

The source code is released under:

Apache License

If you think the Android project SanDisk-HQME-SDK listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/** 
* This reference code is an implementation of the IEEE P2200 standard.  It is not
* a contribution to the IEEE P2200 standard.
* /*from  ww w. ja v a  2 s . c o m*/
* Copyright (c) 2011 SanDisk Corporation.  All rights reserved.
* 
* 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.hqme.cm.core;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.provider.Settings.Secure;

import com.hqme.cm.IVSD;

import java.util.ArrayList;
import java.util.UUID;

public class DeviceDescription {
    
    private static DeviceDescriptionInfo ddi = null;
    
    public static String getDeviceDescriptionXml(Context ctx) {
        if (ddi == null)
            ddi = new DeviceDescriptionInfo(ctx);
        else
            ddi.update();
        
        return ddi.getXML();
    }
    

    private static class NetworkInterfaceInfo {
        String networkAccessType;

        public NetworkInterfaceInfo(String networkAccessType) {
            this.networkAccessType = networkAccessType;
        }
    }
    
    private static class DeviceDescriptionInfo {
        private Context ctx;
        private SharedPreferences sharedPrefs;
        private Editor prefsEditor;

        private static final String pref_uniqueDeviceName = "uniqueDeviceName";
        
        private final static String TOTAL_CAPACITY = "VS_TOTAL_CAPACITY";
        private final static String AVAILABLE_CAPACITY = "VS_AVAILABLE_CAPACITY";
        
        String deviceID;
        String uniqueDeviceName;
        String currentPowerSource;
        String chargingStatus;
        String batteryPowerLevel;
        String storageCapacity;
        String storageUsage;
        String storageVSDnumbers;
        ArrayList<NetworkInterfaceInfo> niis;
        
        DeviceDescriptionInfo(Context ctx) {
            this.ctx = ctx;
            
            sharedPrefs = ctx.getSharedPreferences(DeviceDescriptionInfo.class.getName(), Context.MODE_PRIVATE);
            
            deviceID = Secure.getString(ctx.getContentResolver(), Secure.ANDROID_ID);
            if (deviceID == null)
                deviceID = "";
            
            uniqueDeviceName = sharedPrefs.getString(pref_uniqueDeviceName, null);
            if (uniqueDeviceName == null) {
                uniqueDeviceName = UUID.randomUUID().toString();
                prefsEditor = sharedPrefs.edit();
                prefsEditor.putString(pref_uniqueDeviceName, uniqueDeviceName);
                prefsEditor.commit();
            }
            
            update();
        }
        
        /** Update the transient information. 
         */
        void update() {
            currentPowerSource = "Battery"; // TODO: Spec is not clear here.
            chargingStatus = RULE_CHARGING_STATE.sIsCharging ? "Chraging" : "Available";
            batteryPowerLevel = Integer.toString(RULE_POWER_LEVEL.sBatteryLevel);

            storageVSDnumbers = "0";
            storageUsage="0";
            storageCapacity="0";

            try {
                int[] storeids = WorkOrderManager.getContentProxy().getStorageIds(null);
                if (storeids != null && storeids.length > 0)
                {
                    storageVSDnumbers = Integer.toString(storeids.length);
                    
                    // TODO: Spec is not clear here. How do we accumulate results from all VSDs? 
                    // Return the results for first VSD only.
                    IVSD store = WorkOrderManager.getContentProxy().getStorage(storeids[0]);
                    if (store != null) {
                        long totalCapacity = Long.parseLong(store.getProperty(TOTAL_CAPACITY));
                        long availableCapacity = Long.parseLong(store.getProperty(AVAILABLE_CAPACITY));
                        int freePercentage = (int)(100 * (availableCapacity / (double) totalCapacity));
                        
                        storageCapacity = Long.toString(availableCapacity);
                        storageUsage = Integer.toString(freePercentage);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            niis = new ArrayList<NetworkInterfaceInfo>();
            // TODO: Spec is not clear about active versus available interfaces. (Use NetworkInterface for the other case.)
            ConnectivityManager connMgr = (ConnectivityManager)ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo[] allni = connMgr.getAllNetworkInfo();
            
            if (allni != null) {
                for (NetworkInfo ni: allni) {
                    int type = ni.getType();
                    int subType = ni.getSubtype();
                    
                    if (type == ConnectivityManager.TYPE_WIFI)
                        niis.add(new NetworkInterfaceInfo("WLAN"));
                    else if (type == ConnectivityManager.TYPE_MOBILE)
                        niis.add(new NetworkInterfaceInfo("CELL"));
                    else
                        niis.add(new NetworkInterfaceInfo(ni.getTypeName()));
                }
            }
        }
        
        String getXML() {
            // TODO: Spec has some inconsistencies with the naming of tags.
            String result
                = "<deviceInfo>\n"
                + "\t<deviceId>" + deviceID + "</deviceId>\n"
                + "\t<uniqueDeviceName>" + uniqueDeviceName + "</uniqueDeviceName>\n"
                + "\t<currentPowerSource>" + currentPowerSource + "</currentPowerSource>\n"
                + "\t<chargingStatus>" + chargingStatus + "</chargingStatus>\n"
                + "\t<batteryPowerLevel>" + batteryPowerLevel + "</batteryPowerLevel>\n"
                + "\t<storageCapacity>" + storageCapacity + "</storageCapacity>\n"
                + "\t<storageUsage>" + storageUsage + "</storageUsage>\n"
                + "\t<storageVSDnumbers>" + storageVSDnumbers + "</storageVSDnumbers>\n"
                + "\t<NetworkInterfaceList>\n"
                + "\t\t<NetworkInterfaceNumberOfEntries>" + niis.size() + "</NetworkInterfaceNumberOfEntries>\n";
            
            for (int i=0; i<niis.size(); i++) {
                result += "\t\t<NetworkInterfaceNumber>" + Integer.toString(i+1) + "</NetworkInterfaceNumber>\n";
                result += "\t\t<networkAccessType>" + niis.get(i).networkAccessType + "</networkAccessType>\n";
            }
                
            result += "\t</NetworkInterfaceList>\n";
            result += "</deviceInfo>\n";
            
            return result;
        }
    }
}




Java Source Code List

com.hqme.cm.Account.java
com.hqme.cm.EventsNotify.java
com.hqme.cm.HqmeError.java
com.hqme.cm.OriginACL.java
com.hqme.cm.Permission.java
com.hqme.cm.Property.java
com.hqme.cm.QueueRequestState.java
com.hqme.cm.ReqEvents.java
com.hqme.cm.VSDEvent.java
com.hqme.cm.VSDFunctionGroups.java
com.hqme.cm.VSDProperties.java
com.hqme.cm.cache.PlaybackTokens.java
com.hqme.cm.cache.StreamingServer.java
com.hqme.cm.cache.UntenCacheService.java
com.hqme.cm.cache.UntenMedia.java
com.hqme.cm.core.CmApplication.java
com.hqme.cm.core.DeviceDescription.java
com.hqme.cm.core.HQMEProvider.java
com.hqme.cm.core.HQME.java
com.hqme.cm.core.Package.java
com.hqme.cm.core.Policy.java
com.hqme.cm.core.ProtocolException.java
com.hqme.cm.core.ProtocolHandlerInputStream.java
com.hqme.cm.core.ProtocolHandler.java
com.hqme.cm.core.ProtocolManager.java
com.hqme.cm.core.ProtocolPluginHttp.java
com.hqme.cm.core.ProtocolPlugin.java
com.hqme.cm.core.QueueRequestObject.java
com.hqme.cm.core.QueueRequestProperties.java
com.hqme.cm.core.RULE_AVAILABLE_SPACE.java
com.hqme.cm.core.RULE_BANDWIDTH_LIMIT.java
com.hqme.cm.core.RULE_CHARGING_STATE.java
com.hqme.cm.core.RULE_CONNECTION_TYPE.java
com.hqme.cm.core.RULE_DOWNLOAD_LIMIT.java
com.hqme.cm.core.RULE_EXPIRE.java
com.hqme.cm.core.RULE_FREE_SPACE.java
com.hqme.cm.core.RULE_FUNCTIONGROUPS.java
com.hqme.cm.core.RULE_MANDATORY_TIME.java
com.hqme.cm.core.RULE_MAX_SIZE.java
com.hqme.cm.core.RULE_POWER_LEVEL.java
com.hqme.cm.core.RULE_PRIORITY.java
com.hqme.cm.core.RULE_ROAMING.java
com.hqme.cm.core.RULE_SCHEDULE.java
com.hqme.cm.core.RULE_TIME.java
com.hqme.cm.core.Record.java
com.hqme.cm.core.RuleBase.java
com.hqme.cm.core.RuleCollection.java
com.hqme.cm.core.Rule.java
com.hqme.cm.core.StorageManager.java
com.hqme.cm.core.WorkOrderManager.java
com.hqme.cm.core.WorkOrder.java
com.hqme.cm.core.policyParser.Expression.java
com.hqme.cm.core.policyParser.HqmePolicyException.java
com.hqme.cm.core.policyParser.LogicalExpression.java
com.hqme.cm.core.policyParser.NegateExpression.java
com.hqme.cm.core.policyParser.Operator.java
com.hqme.cm.core.policyParser.PolicyElementParser.java
com.hqme.cm.core.policyParser.PolicyExpression.java
com.hqme.cm.core.policyParser.Precedence.java
com.hqme.cm.core.policyParser.Token.java
com.hqme.cm.core.policyParser.Tokenizer.java
com.hqme.cm.sample.HqmeClientActivity.java
com.hqme.cm.sample.HqmeClientReceiver.java
com.hqme.cm.util.CmClientUtil.java
com.hqme.cm.util.CmDate.java
com.hqme.cm.util.CmNumber.java
com.hqme.cm.util.CmProperties.java
com.hqme.cm.util.CmUri.java