Forráskód Böngészése

-Removed ANT build system for Android, as it was deprecated by Google
-Added new Gradle build system, as it is the required build system

Juan Linietsky 9 éve
szülő
commit
401622cc22
100 módosított fájl, 612 hozzáadás és 3075 törlés
  1. 16 9
      SConstruct
  2. 23 18
      methods.py
  3. 1 1
      platform/android/AndroidManifest.xml.template
  4. 45 15
      platform/android/SCsub
  5. 72 0
      platform/android/build.gradle.template
  6. 0 4
      platform/android/detect.py
  7. 144 0
      platform/android/java/aidl/com/android/vending/billing/IInAppBillingService.aidl
  8. 0 17
      platform/android/java/ant.properties
  9. 0 17
      platform/android/java/build.properties
  10. 0 92
      platform/android/java/build.xml
  11. 0 11
      platform/android/java/default.properties
  12. BIN
      platform/android/java/gradle/wrapper/gradle-wrapper.jar
  13. 6 0
      platform/android/java/gradle/wrapper/gradle-wrapper.properties
  14. 164 0
      platform/android/java/gradlew
  15. 90 0
      platform/android/java/gradlew.bat
  16. BIN
      platform/android/java/my-release-key.keystore
  17. 0 20
      platform/android/java/proguard-project.txt
  18. 0 36
      platform/android/java/proguard.cfg
  19. 0 0
      platform/android/java/res/drawable-hdpi/notify_panel_notification_icon_bg.png
  20. 0 0
      platform/android/java/res/drawable-mdpi/notify_panel_notification_icon_bg.png
  21. 0 0
      platform/android/java/res/layout/status_bar_ongoing_event_progress_bar.xml
  22. 0 0
      platform/android/java/res/values-v11/styles.xml
  23. 0 0
      platform/android/java/res/values-v9/styles.xml
  24. 41 1
      platform/android/java/res/values/strings.xml
  25. 0 0
      platform/android/java/res/values/styles.xml
  26. 1 1
      platform/android/java/src/com/android/godot/Dictionary.java
  27. 1 1
      platform/android/java/src/com/android/godot/Godot.java
  28. 1 1
      platform/android/java/src/com/android/godot/GodotIO.java
  29. 1 1
      platform/android/java/src/com/android/godot/GodotLib.java
  30. 1 1
      platform/android/java/src/com/android/godot/GodotView.java
  31. 0 0
      platform/android/java/src/com/android/vending/licensing/AESObfuscator.java
  32. 0 0
      platform/android/java/src/com/android/vending/licensing/APKExpansionPolicy.java
  33. 0 0
      platform/android/java/src/com/android/vending/licensing/DeviceLimiter.java
  34. 0 0
      platform/android/java/src/com/android/vending/licensing/ILicenseResultListener.aidl
  35. 0 0
      platform/android/java/src/com/android/vending/licensing/ILicenseResultListener.java
  36. 0 0
      platform/android/java/src/com/android/vending/licensing/ILicensingService.aidl
  37. 0 0
      platform/android/java/src/com/android/vending/licensing/ILicensingService.java
  38. 1 1
      platform/android/java/src/com/android/vending/licensing/LicenseChecker.java
  39. 0 0
      platform/android/java/src/com/android/vending/licensing/LicenseCheckerCallback.java
  40. 0 0
      platform/android/java/src/com/android/vending/licensing/LicenseValidator.java
  41. 0 0
      platform/android/java/src/com/android/vending/licensing/NullDeviceLimiter.java
  42. 0 0
      platform/android/java/src/com/android/vending/licensing/Obfuscator.java
  43. 0 0
      platform/android/java/src/com/android/vending/licensing/Policy.java
  44. 0 0
      platform/android/java/src/com/android/vending/licensing/PreferenceObfuscator.java
  45. 0 0
      platform/android/java/src/com/android/vending/licensing/ResponseData.java
  46. 0 0
      platform/android/java/src/com/android/vending/licensing/ServerManagedPolicy.java
  47. 0 0
      platform/android/java/src/com/android/vending/licensing/StrictPolicy.java
  48. 0 0
      platform/android/java/src/com/android/vending/licensing/ValidationException.java
  49. 0 0
      platform/android/java/src/com/android/vending/licensing/util/Base64.java
  50. 0 0
      platform/android/java/src/com/android/vending/licensing/util/Base64DecoderException.java
  51. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/Constants.java
  52. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java
  53. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java
  54. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java
  55. 1 1
      platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java
  56. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/IDownloaderClient.java
  57. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/IDownloaderService.java
  58. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/IStub.java
  59. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/SystemFacade.java
  60. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/impl/AndroidHttpClient.java
  61. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/impl/CustomIntentService.java
  62. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/impl/CustomNotificationFactory.java
  63. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadInfo.java
  64. 1 1
      platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java
  65. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadThread.java
  66. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java
  67. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadsDB.java
  68. 0 0
      platform/android/java/src/com/google/android/vending/expansion/downloader/impl/HttpDateTime.java
  69. 1 1
      platform/android/java/src/com/google/android/vending/expansion/downloader/impl/V14CustomNotification.java
  70. 1 1
      platform/android/java/src/com/google/android/vending/expansion/downloader/impl/V3CustomNotification.java
  71. 0 9
      platform/android/libs/apk_expansion/AndroidManifest.xml
  72. 0 92
      platform/android/libs/apk_expansion/build.xml
  73. 0 20
      platform/android/libs/apk_expansion/proguard-project.txt
  74. 0 13
      platform/android/libs/apk_expansion/project.properties
  75. 0 41
      platform/android/libs/apk_expansion/res/values/strings.xml
  76. 0 231
      platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java
  77. 0 101
      platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/V14CustomNotification.java
  78. 0 9
      platform/android/libs/downloader_library/.classpath
  79. 0 4
      platform/android/libs/downloader_library/.settings/org.eclipse.jdt.core.prefs
  80. 0 9
      platform/android/libs/downloader_library/AndroidManifest.xml
  81. 0 92
      platform/android/libs/downloader_library/build.xml
  82. 0 20
      platform/android/libs/downloader_library/proguard-project.txt
  83. 0 13
      platform/android/libs/downloader_library/project.properties
  84. BIN
      platform/android/libs/downloader_library/res/drawable-hdpi/notify_panel_notification_icon_bg.png
  85. BIN
      platform/android/libs/downloader_library/res/drawable-mdpi/notify_panel_notification_icon_bg.png
  86. 0 104
      platform/android/libs/downloader_library/res/layout/status_bar_ongoing_event_progress_bar.xml
  87. 0 6
      platform/android/libs/downloader_library/res/values-v11/styles.xml
  88. 0 5
      platform/android/libs/downloader_library/res/values-v9/styles.xml
  89. 0 41
      platform/android/libs/downloader_library/res/values/strings.xml
  90. 0 25
      platform/android/libs/downloader_library/res/values/styles.xml
  91. 0 236
      platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/Constants.java
  92. 0 80
      platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java
  93. 0 277
      platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java
  94. 0 181
      platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java
  95. 0 306
      platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/Helpers.java
  96. 0 126
      platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/IDownloaderClient.java
  97. 0 83
      platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/IDownloaderService.java
  98. 0 41
      platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/IStub.java
  99. 0 123
      platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/SystemFacade.java
  100. 0 536
      platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/impl/AndroidHttpClient.java

+ 16 - 9
SConstruct

@@ -66,20 +66,27 @@ env_base=Environment(tools=custom_tools,ENV = {'PATH' : os.environ['PATH']});
 
 #env_base=Environment(tools=custom_tools);
 env_base.global_defaults=global_defaults
-env_base.android_source_modules=[]
-env_base.android_source_files=[]
-env_base.android_module_libraries=[]
+env_base.android_maven_repos=[]
+env_base.android_dependencies=[]
+env_base.android_java_dirs=[]
+env_base.android_res_dirs=[]
+env_base.android_aidl_dirs=[]
+env_base.android_jni_dirs=[]
 env_base.android_manifest_chunk=""
 env_base.android_permission_chunk=""
 env_base.android_appattributes_chunk=""
 env_base.disabled_modules=[]
 
-env_base.__class__.android_module_source = methods.android_module_source
-env_base.__class__.android_module_library = methods.android_module_library
-env_base.__class__.android_module_file = methods.android_module_file
-env_base.__class__.android_module_manifest = methods.android_module_manifest
-env_base.__class__.android_module_permission = methods.android_module_permission
-env_base.__class__.android_module_attribute = methods.android_module_attribute
+
+env_base.__class__.android_add_maven_repository=methods.android_add_maven_repository
+env_base.__class__.android_add_dependency=methods.android_add_dependency
+env_base.__class__.android_add_java_dir=methods.android_add_java_dir
+env_base.__class__.android_add_res_dir=methods.android_add_res_dir
+env_base.__class__.android_add_aidl_dir=methods.android_add_aidl_dir
+env_base.__class__.android_add_jni_dir=methods.android_add_jni_dir
+env_base.__class__.android_add_to_manifest = methods.android_add_to_manifest
+env_base.__class__.android_add_to_permissions = methods.android_add_to_permissions
+env_base.__class__.android_add_to_attributes = methods.android_add_to_attributes
 env_base.__class__.disable_module = methods.disable_module
 
 env_base.__class__.add_source_files = methods.add_source_files

+ 23 - 18
methods.py

@@ -1274,30 +1274,35 @@ def win32_spawn(sh, escape, cmd, args, spawnenv):
 	return exit_code
 """
 
-def android_module_source(self,subpath,manifest=""):
-	base_path = "../../../modules/"+self.current_module+"/"+subpath
-	self.android_source_modules.append(base_path)		
-
-def android_module_library(self,subpath,manifest=""):
-	base_path = ""
-	if (os.path.isabs(subpath)):
-		base_path=subpath
-	else:
-		base_path = self.Dir(".").abspath+"/modules/"+self.current_module+"/"+subpath
-	self.android_module_libraries.append(base_path)		
-
-def android_module_file(self,file):
-	base_path = self.Dir(".").abspath+"/modules/"+self.current_module+"/"+file
-	self.android_source_files.append(base_path)		
-def android_module_manifest(self,file):
+def android_add_maven_repository(self,url):
+	self.android_maven_repos.append(url)
+
+def android_add_dependency(self,depline):
+	self.android_dependencies.append(depline)
+
+def android_add_java_dir(self,subpath):
+	base_path = self.Dir(".").abspath+"/modules/"+self.current_module+"/"+subpath
+	self.android_java_dirs.append(base_path)
+
+def android_add_res_dir(self,subpath):
+	base_path = self.Dir(".").abspath+"/modules/"+self.current_module+"/"+subpath
+	self.android_res_dirs.append(base_path)
+def android_add_aidl_dir(self,file):
+	base_path = self.Dir(".").abspath+"/modules/"+self.current_module+"/"+subpath
+	self.android_aidl_dirs.append(base_path)
+def android_add_jni_dir(self,file):
+	base_path = self.Dir(".").abspath+"/modules/"+self.current_module+"/"+subpath
+	self.android_jni_dirs.append(base_path)
+
+def android_add_to_manifest(self,file):
 	base_path = self.Dir(".").abspath+"/modules/"+self.current_module+"/"+file
 	f = open(base_path,"rb")
 	self.android_manifest_chunk+=f.read()
-def android_module_permission(self,file):
+def android_add_to_permissions(self,file):
 	base_path = self.Dir(".").abspath+"/modules/"+self.current_module+"/"+file
 	f = open(base_path,"rb")
 	self.android_permission_chunk+=f.read()
-def android_module_attribute(self,file):
+def android_add_to_attributes(self,file):
 	base_path = self.Dir(".").abspath+"/modules/"+self.current_module+"/"+file
 	f = open(base_path,"rb")
 	self.android_appattributes_chunk+=f.read()

+ 1 - 1
platform/android/AndroidManifest.xml.template

@@ -189,7 +189,7 @@ $$ADD_PERMISSION_CHUNKS$$
 <uses-permission android:name="godot.custom.7"/>
 <uses-permission android:name="godot.custom.8"/>
 <uses-permission android:name="godot.custom.9"/>
-<uses-permission android:name="godot.custom.0"/>
+<uses-permission android:name="godot.custom.10"/>
 <uses-permission android:name="godot.custom.11"/>
 <uses-permission android:name="godot.custom.12"/>
 <uses-permission android:name="godot.custom.13"/>

+ 45 - 15
platform/android/SCsub

@@ -37,19 +37,56 @@ prog = None
 abspath=env.Dir(".").abspath
 
 
-pp_basein = open(abspath+"/project.properties.template","rb")
-pp_baseout = open(abspath+"/java/project.properties","wb")
-pp_baseout.write( pp_basein.read() )
+gradle_basein = open(abspath+"/build.gradle.template","rb")
+gradle_baseout = open(abspath+"/java/build.gradle","wb")
 
-refcount=1
+gradle_text = gradle_basein.read()
 
-for x in env.android_source_modules:
-	pp_baseout.write("android.library.reference."+str(refcount)+"="+x+"\n")
-	refcount+=1
 
+gradle_maven_repos_text=""
 
+for x in env.android_maven_repos:
+	gradle_maven_repos_text+=x+"\n"
 
-pp_baseout.close()
+gradle_maven_dependencies_text=""
+
+for x in env.android_dependencies:
+	gradle_maven_dependencies_text+=x+"\n"
+
+gradle_java_dirs_text=""
+
+for x in env.android_java_dirs:
+	gradle_java_dirs_text+=",'"+x+"'"
+
+
+gradle_res_dirs_text=""
+
+for x in env.android_res_dirs:
+	gradle_res_dirs_text+=",'"+x+"'"
+
+gradle_aidl_dirs_text=""
+
+for x in env.android_aidl_dirs:
+	gradle_aidl_dirs_text+=",'"+x+"'"
+
+gradle_jni_dirs_text=""
+
+for x in env.android_jni_dirs:
+	gradle_jni_dirs_text+=",'"+x+"'"
+
+gradle_asset_dirs_text=""
+
+gradle_text = gradle_text.replace("$$GRADLE_REPOSITORY_URLS$$",gradle_maven_repos_text)
+gradle_text = gradle_text.replace("$$GRADLE_DEPENDENCIES$$",gradle_maven_dependencies_text)
+gradle_text = gradle_text.replace("$$GRADLE_JAVA_DIRS$$",gradle_java_dirs_text)
+gradle_text = gradle_text.replace("$$GRADLE_RES_DIRS$$",gradle_res_dirs_text)
+gradle_text = gradle_text.replace("$$GRADLE_ASSET_DIRS$$",gradle_asset_dirs_text)
+gradle_text = gradle_text.replace("$$GRADLE_AIDL_DIRS$$",gradle_aidl_dirs_text)
+gradle_text = gradle_text.replace("$$GRADLE_JNI_DIRS$$",gradle_jni_dirs_text)
+
+
+gradle_baseout.write( gradle_text )
+gradle_baseout.close()
 
 
 pp_basein = open(abspath+"/AndroidManifest.xml.template","rb")
@@ -61,13 +98,6 @@ manifest = manifest.replace("$$ADD_APPATTRIBUTE_CHUNKS$$",env.android_appattribu
 pp_baseout.write( manifest )
 
 
-for x in env.android_source_files:
-	shutil.copy(x,abspath+"/java/src/com/android/godot")
-
-for x in env.android_module_libraries:
-	shutil.copy(x,abspath+"/java/libs")
-
-
 env_android.SharedLibrary("#bin/libgodot",[android_objects],SHLIBSUFFIX=env["SHLIBSUFFIX"])
 
 #env.Command('#bin/libgodot_android.so', '#platform/android/libgodot_android.so', Copy('bin/libgodot_android.so', 'platform/android/libgodot_android.so'))

+ 72 - 0
platform/android/build.gradle.template

@@ -0,0 +1,72 @@
+buildscript {
+	repositories {
+		jcenter()
+	}
+	dependencies {
+		classpath 'com.android.tools.build:gradle:1.2.0'
+	}
+}
+
+apply plugin: 'com.android.application'
+
+allprojects {
+    repositories {
+	mavenCentral()
+	maven {
+		$$GRADLE_REPOSITORY_URLS$$
+	}
+    }
+}
+
+dependencies {
+
+	$$GRADLE_DEPENDENCIES$$    
+}
+
+android {
+
+	lintOptions {
+		abortOnError false
+	}
+
+	compileSdkVersion 19
+	buildToolsVersion "19.1"
+
+	packagingOptions {
+		exclude 'META-INF/LICENSE'
+		exclude 'META-INF/NOTICE'
+	}
+	defaultConfig {
+		minSdkVersion 14
+		targetSdkVersion 19
+	}
+	sourceSets {
+		main {
+			manifest.srcFile 'AndroidManifest.xml'
+			java.srcDirs = ['src',
+				$$GRADLE_JAVA_DIRS$$    
+			]
+			resources.srcDirs = [
+				'res'
+				$$GRADLE_RES_DIRS$$    
+			]
+			res.srcDirs = ['res']
+		//            libs.srcDirs = ['libs']
+			aidl.srcDirs = [
+				'aidl'
+				$$GRADLE_AIDL_DIRS$$    
+			]
+			assets.srcDirs = [
+				'assets'
+				$$GRADLE_ASSET_DIRS$$    				
+			]
+			jniLibs.srcDirs = [
+				'libs'
+				$$GRADLE_JNI_DIRS$$    								
+			] 
+		}
+
+	}
+
+
+}

+ 0 - 4
platform/android/detect.py

@@ -106,10 +106,6 @@ def configure(env):
 		#env['SPAWN'] = methods.win32_spawn
 		env['SHLIBSUFFIX'] = '.so'
 
-	#env.android_source_modules.append("../libs/apk_expansion")	
-	env.android_source_modules.append("../libs/google_play_services")	
-	env.android_source_modules.append("../libs/downloader_library")	
-	env.android_source_modules.append("../libs/play_licensing")	
 
 	neon_text=""
 	if env["android_arch"]=="armv7" and env['android_neon']=='yes':

+ 144 - 0
platform/android/java/aidl/com/android/vending/billing/IInAppBillingService.aidl

@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * 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.android.vending.billing;
+
+import android.os.Bundle;
+
+/**
+ * InAppBillingService is the service that provides in-app billing version 3 and beyond.
+ * This service provides the following features:
+ * 1. Provides a new API to get details of in-app items published for the app including
+ *    price, type, title and description.
+ * 2. The purchase flow is synchronous and purchase information is available immediately
+ *    after it completes.
+ * 3. Purchase information of in-app purchases is maintained within the Google Play system
+ *    till the purchase is consumed.
+ * 4. An API to consume a purchase of an inapp item. All purchases of one-time
+ *    in-app items are consumable and thereafter can be purchased again.
+ * 5. An API to get current purchases of the user immediately. This will not contain any
+ *    consumed purchases.
+ *
+ * All calls will give a response code with the following possible values
+ * RESULT_OK = 0 - success
+ * RESULT_USER_CANCELED = 1 - user pressed back or canceled a dialog
+ * RESULT_BILLING_UNAVAILABLE = 3 - this billing API version is not supported for the type requested
+ * RESULT_ITEM_UNAVAILABLE = 4 - requested SKU is not available for purchase
+ * RESULT_DEVELOPER_ERROR = 5 - invalid arguments provided to the API
+ * RESULT_ERROR = 6 - Fatal error during the API action
+ * RESULT_ITEM_ALREADY_OWNED = 7 - Failure to purchase since item is already owned
+ * RESULT_ITEM_NOT_OWNED = 8 - Failure to consume since item is not owned
+ */
+interface IInAppBillingService {
+    /**
+     * Checks support for the requested billing API version, package and in-app type.
+     * Minimum API version supported by this interface is 3.
+     * @param apiVersion the billing version which the app is using
+     * @param packageName the package name of the calling app
+     * @param type type of the in-app item being purchased "inapp" for one-time purchases
+     *        and "subs" for subscription.
+     * @return RESULT_OK(0) on success, corresponding result code on failures
+     */
+    int isBillingSupported(int apiVersion, String packageName, String type);
+
+    /**
+     * Provides details of a list of SKUs
+     * Given a list of SKUs of a valid type in the skusBundle, this returns a bundle
+     * with a list JSON strings containing the productId, price, title and description.
+     * This API can be called with a maximum of 20 SKUs.
+     * @param apiVersion billing API version that the Third-party is using
+     * @param packageName the package name of the calling app
+     * @param skusBundle bundle containing a StringArrayList of SKUs with key "ITEM_ID_LIST"
+     * @return Bundle containing the following key-value pairs
+     *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
+     *              failure as listed above.
+     *         "DETAILS_LIST" with a StringArrayList containing purchase information
+     *              in JSON format similar to:
+     *              '{ "productId" : "exampleSku", "type" : "inapp", "price" : "$5.00",
+     *                 "title : "Example Title", "description" : "This is an example description" }'
+     */
+    Bundle getSkuDetails(int apiVersion, String packageName, String type, in Bundle skusBundle);
+
+    /**
+     * Returns a pending intent to launch the purchase flow for an in-app item by providing a SKU,
+     * the type, a unique purchase token and an optional developer payload.
+     * @param apiVersion billing API version that the app is using
+     * @param packageName package name of the calling app
+     * @param sku the SKU of the in-app item as published in the developer console
+     * @param type the type of the in-app item ("inapp" for one-time purchases
+     *        and "subs" for subscription).
+     * @param developerPayload optional argument to be sent back with the purchase information
+     * @return Bundle containing the following key-value pairs
+     *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
+     *              failure as listed above.
+     *         "BUY_INTENT" - PendingIntent to start the purchase flow
+     *
+     * The Pending intent should be launched with startIntentSenderForResult. When purchase flow
+     * has completed, the onActivityResult() will give a resultCode of OK or CANCELED.
+     * If the purchase is successful, the result data will contain the following key-value pairs
+     *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
+     *              failure as listed above.
+     *         "INAPP_PURCHASE_DATA" - String in JSON format similar to
+     *              '{"orderId":"12999763169054705758.1371079406387615",
+     *                "packageName":"com.example.app",
+     *                "productId":"exampleSku",
+     *                "purchaseTime":1345678900000,
+     *                "purchaseToken" : "122333444455555",
+     *                "developerPayload":"example developer payload" }'
+     *         "INAPP_DATA_SIGNATURE" - String containing the signature of the purchase data that
+     *                                  was signed with the private key of the developer
+     *                                  TODO: change this to app-specific keys.
+     */
+    Bundle getBuyIntent(int apiVersion, String packageName, String sku, String type,
+        String developerPayload);
+
+    /**
+     * Returns the current SKUs owned by the user of the type and package name specified along with
+     * purchase information and a signature of the data to be validated.
+     * This will return all SKUs that have been purchased in V3 and managed items purchased using
+     * V1 and V2 that have not been consumed.
+     * @param apiVersion billing API version that the app is using
+     * @param packageName package name of the calling app
+     * @param type the type of the in-app items being requested
+     *        ("inapp" for one-time purchases and "subs" for subscription).
+     * @param continuationToken to be set as null for the first call, if the number of owned
+     *        skus are too many, a continuationToken is returned in the response bundle.
+     *        This method can be called again with the continuation token to get the next set of
+     *        owned skus.
+     * @return Bundle containing the following key-value pairs
+     *         "RESPONSE_CODE" with int value, RESULT_OK(0) if success, other response codes on
+     *              failure as listed above.
+     *         "INAPP_PURCHASE_ITEM_LIST" - StringArrayList containing the list of SKUs
+     *         "INAPP_PURCHASE_DATA_LIST" - StringArrayList containing the purchase information
+     *         "INAPP_DATA_SIGNATURE_LIST"- StringArrayList containing the signatures
+     *                                      of the purchase information
+     *         "INAPP_CONTINUATION_TOKEN" - String containing a continuation token for the
+     *                                      next set of in-app purchases. Only set if the
+     *                                      user has more owned skus than the current list.
+     */
+    Bundle getPurchases(int apiVersion, String packageName, String type, String continuationToken);
+
+    /**
+     * Consume the last purchase of the given SKU. This will result in this item being removed
+     * from all subsequent responses to getPurchases() and allow re-purchase of this item.
+     * @param apiVersion billing API version that the app is using
+     * @param packageName package name of the calling app
+     * @param purchaseToken token in the purchase information JSON that identifies the purchase
+     *        to be consumed
+     * @return 0 if consumption succeeded. Appropriate error values for failures.
+     */
+    int consumePurchase(int apiVersion, String packageName, String purchaseToken);
+}

+ 0 - 17
platform/android/java/ant.properties

@@ -1,17 +0,0 @@
-# This file is used to override default values used by the Ant build system.
-#
-# This file must be checked into Version Control Systems, as it is
-# integral to the build system of your project.
-
-# This file is only used by the Ant script.
-
-# You can use this to override default values such as
-#  'source.dir' for the location of your java source folder and
-#  'out.dir' for the location of your output folder.
-
-# You can also use it define how the release builds are signed by declaring
-# the following properties:
-#  'key.store' for the location of your keystore and
-#  'key.alias' for the name of the key to use.
-# The password will be asked during the build when you use the 'release' target.
-

+ 0 - 17
platform/android/java/build.properties

@@ -1,17 +0,0 @@
-# This file is used to override default values used by the Ant build system.
-#
-# This file must be checked in Version Control Systems, as it is
-# integral to the build system of your project.
-
-# This file is only used by the Ant script.
-
-# You can use this to override default values such as
-#  'source.dir' for the location of your java source folder and
-#  'out.dir' for the location of your output folder.
-
-# You can also use it define how the release builds are signed by declaring
-# the following properties:
-#  'key.store' for the location of your keystore and
-#  'key.alias' for the name of the key to use.
-# The password will be asked during the build when you use the 'release' target.
-

+ 0 - 92
platform/android/java/build.xml

@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="Godot" default="help">
-
-    <!-- The local.properties file is created and updated by the 'android' tool.
-         It contains the path to the SDK. It should *NOT* be checked into
-         Version Control Systems. -->
-    <property file="local.properties" />
-
-    <!-- The ant.properties file can be created by you. It is only edited by the
-         'android' tool to add properties to it.
-         This is the place to change some Ant specific build properties.
-         Here are some properties you may want to change/update:
-
-         source.dir
-             The name of the source directory. Default is 'src'.
-         out.dir
-             The name of the output directory. Default is 'bin'.
-
-         For other overridable properties, look at the beginning of the rules
-         files in the SDK, at tools/ant/build.xml
-
-         Properties related to the SDK location or the project target should
-         be updated using the 'android' tool with the 'update' action.
-
-         This file is an integral part of the build system for your
-         application and should be checked into Version Control Systems.
-
-         -->
-    <property file="ant.properties" />
-
-    <!-- if sdk.dir was not set from one of the property file, then
-         get it from the ANDROID_HOME env var.
-         This must be done before we load project.properties since
-         the proguard config can use sdk.dir -->
-    <property environment="env" />
-    <condition property="sdk.dir" value="${env.ANDROID_HOME}">
-        <isset property="env.ANDROID_HOME" />
-    </condition>
-
-    <!-- The project.properties file is created and updated by the 'android'
-         tool, as well as ADT.
-
-         This contains project specific properties such as project target, and library
-         dependencies. Lower level build properties are stored in ant.properties
-         (or in .classpath for Eclipse projects).
-
-         This file is an integral part of the build system for your
-         application and should be checked into Version Control Systems. -->
-    <loadproperties srcFile="project.properties" />
-
-    <!-- quick check on sdk.dir -->
-    <fail
-            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
-            unless="sdk.dir"
-    />
-
-    <!--
-        Import per project custom build rules if present at the root of the project.
-        This is the place to put custom intermediary targets such as:
-            -pre-build
-            -pre-compile
-            -post-compile (This is typically used for code obfuscation.
-                           Compiled code location: ${out.classes.absolute.dir}
-                           If this is not done in place, override ${out.dex.input.absolute.dir})
-            -post-package
-            -post-build
-            -pre-clean
-    -->
-    <import file="custom_rules.xml" optional="true" />
-
-    <!-- Import the actual build file.
-
-         To customize existing targets, there are two options:
-         - Customize only one target:
-             - copy/paste the target into this file, *before* the
-               <import> task.
-             - customize it to your needs.
-         - Customize the whole content of build.xml
-             - copy/paste the content of the rules files (minus the top node)
-               into this file, replacing the <import> task.
-             - customize to your needs.
-
-         ***********************
-         ****** IMPORTANT ******
-         ***********************
-         In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
-         in order to avoid having your file be overridden by tools such as "android update project"
-    -->
-    <!-- version-tag: 1 -->
-    <import file="${sdk.dir}/tools/ant/build.xml" />
-
-</project>

+ 0 - 11
platform/android/java/default.properties

@@ -1,11 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system use,
-# "build.properties", and override values to adapt the script to your
-# project structure.
-
-# Project target.
-target=android-8

BIN
platform/android/java/gradle/wrapper/gradle-wrapper.jar


+ 6 - 0
platform/android/java/gradle/wrapper/gradle-wrapper.properties

@@ -0,0 +1,6 @@
+#Wed Apr 10 15:27:10 PDT 2013
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip

+ 164 - 0
platform/android/java/gradlew

@@ -0,0 +1,164 @@
+#!/usr/bin/env bash
+
+##############################################################################
+##
+##  Gradle start up script for UN*X
+##
+##############################################################################
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn ( ) {
+    echo "$*"
+}
+
+die ( ) {
+    echo
+    echo "$*"
+    echo
+    exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+case "`uname`" in
+  CYGWIN* )
+    cygwin=true
+    ;;
+  Darwin* )
+    darwin=true
+    ;;
+  MINGW* )
+    msys=true
+    ;;
+esac
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched.
+if $cygwin ; then
+    [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+fi
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+        PRG="$link"
+    else
+        PRG=`dirname "$PRG"`"/$link"
+    fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >&-
+APP_HOME="`pwd -P`"
+cd "$SAVED" >&-
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+        # IBM's JDK on AIX uses strange locations for the executables
+        JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+        JAVACMD="$JAVA_HOME/bin/java"
+    fi
+    if [ ! -x "$JAVACMD" ] ; then
+        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+    fi
+else
+    JAVACMD="java"
+    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+    MAX_FD_LIMIT=`ulimit -H -n`
+    if [ $? -eq 0 ] ; then
+        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+            MAX_FD="$MAX_FD_LIMIT"
+        fi
+        ulimit -n $MAX_FD
+        if [ $? -ne 0 ] ; then
+            warn "Could not set maximum file descriptor limit: $MAX_FD"
+        fi
+    else
+        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+    fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
+    # We build the pattern for arguments to be converted via cygpath
+    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+    SEP=""
+    for dir in $ROOTDIRSRAW ; do
+        ROOTDIRS="$ROOTDIRS$SEP$dir"
+        SEP="|"
+    done
+    OURCYGPATTERN="(^($ROOTDIRS))"
+    # Add a user-defined pattern to the cygpath arguments
+    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+    fi
+    # Now convert the arguments - kludge to limit ourselves to /bin/sh
+    i=0
+    for arg in "$@" ; do
+        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
+
+        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
+            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+        else
+            eval `echo args$i`="\"$arg\""
+        fi
+        i=$((i+1))
+    done
+    case $i in
+        (0) set -- ;;
+        (1) set -- "$args0" ;;
+        (2) set -- "$args0" "$args1" ;;
+        (3) set -- "$args0" "$args1" "$args2" ;;
+        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+    esac
+fi
+
+# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
+function splitJvmOpts() {
+    JVM_OPTS=("$@")
+}
+eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
+JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+
+exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

+ 90 - 0
platform/android/java/gradlew.bat

@@ -0,0 +1,90 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem  Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windowz variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+if "%@eval[2+2]" == "4" goto 4NT_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+goto execute
+
+:4NT_args
+@rem Get arguments from the 4NT Shell from JP Software
+set CMD_LINE_ARGS=%$
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega

BIN
platform/android/java/my-release-key.keystore


+ 0 - 20
platform/android/java/proguard-project.txt

@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}

+ 0 - 36
platform/android/java/proguard.cfg

@@ -1,36 +0,0 @@
--optimizationpasses 5
--dontusemixedcaseclassnames
--dontskipnonpubliclibraryclasses
--dontpreverify
--verbose
--optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-
--keep public class * extends android.app.Activity
--keep public class * extends android.app.Application
--keep public class * extends android.app.Service
--keep public class * extends android.content.BroadcastReceiver
--keep public class * extends android.content.ContentProvider
--keep public class * extends android.app.backup.BackupAgentHelper
--keep public class * extends android.preference.Preference
--keep public class com.android.vending.licensing.ILicensingService
-
--keepclasseswithmembernames class * {
-    native <methods>;
-}
-
--keepclasseswithmembernames class * {
-    public <init>(android.content.Context, android.util.AttributeSet);
-}
-
--keepclasseswithmembernames class * {
-    public <init>(android.content.Context, android.util.AttributeSet, int);
-}
-
--keepclassmembers enum * {
-    public static **[] values();
-    public static ** valueOf(java.lang.String);
-}
-
--keep class * implements android.os.Parcelable {
-  public static final android.os.Parcelable$Creator *;
-}

+ 0 - 0
platform/android/libs/apk_expansion/res/drawable-hdpi/notify_panel_notification_icon_bg.png → platform/android/java/res/drawable-hdpi/notify_panel_notification_icon_bg.png


+ 0 - 0
platform/android/libs/apk_expansion/res/drawable-mdpi/notify_panel_notification_icon_bg.png → platform/android/java/res/drawable-mdpi/notify_panel_notification_icon_bg.png


+ 0 - 0
platform/android/libs/apk_expansion/res/layout/status_bar_ongoing_event_progress_bar.xml → platform/android/java/res/layout/status_bar_ongoing_event_progress_bar.xml


+ 0 - 0
platform/android/libs/apk_expansion/res/values-v11/styles.xml → platform/android/java/res/values-v11/styles.xml


+ 0 - 0
platform/android/libs/apk_expansion/res/values-v9/styles.xml → platform/android/java/res/values-v9/styles.xml


+ 41 - 1
platform/android/java/res/values/strings.xml

@@ -14,4 +14,44 @@
     <string name="text_button_resume">Resume Download</string>
     <string name="text_button_cancel">Cancel</string>
     <string name="text_button_cancel_verify">Cancel Verification</string>
-</resources>
+
+    <!-- APK Expansion Strings -->
+
+    <!-- When a download completes, a notification is displayed, and this
+        string is used to indicate that the download successfully completed.
+        Note that such a download could have been initiated by a variety of
+        applications, including (but not limited to) the browser, an email
+        application, a content marketplace. -->
+    <string name="notification_download_complete">Download complete</string>
+
+    <!-- When a download completes, a notification is displayed, and this
+        string is used to indicate that the download failed.
+        Note that such a download could have been initiated by a variety of
+        applications, including (but not limited to) the browser, an email
+        application, a content marketplace. -->
+    <string name="notification_download_failed">Download unsuccessful</string>
+
+
+    <string name="state_unknown">Starting..."</string>
+    <string name="state_idle">Waiting for download to start</string>
+    <string name="state_fetching_url">Looking for resources to download</string>
+    <string name="state_connecting">Connecting to the download server</string>
+    <string name="state_downloading">Downloading resources</string>
+    <string name="state_completed">Download finished</string>
+    <string name="state_paused_network_unavailable">Download paused because no network is available</string>
+    <string name="state_paused_network_setup_failure">Download paused. Test a website in browser</string>
+    <string name="state_paused_by_request">Download paused</string>
+    <string name="state_paused_wifi_unavailable">Download paused because wifi is unavailable</string>
+    <string name="state_paused_wifi_disabled">Download paused because wifi is disabled</string>
+    <string name="state_paused_roaming">Download paused because you are roaming</string>
+    <string name="state_paused_sdcard_unavailable">Download paused because the external storage is unavailable</string>
+    <string name="state_failed_unlicensed">Download failed because you may not have purchased this app</string>
+    <string name="state_failed_fetching_url">Download failed because the resources could not be found</string>
+    <string name="state_failed_sdcard_full">Download failed because the external storage is full</string>
+    <string name="state_failed_cancelled">Download cancelled</string>
+    <string name="state_failed">Download failed</string>
+
+    <string name="kilobytes_per_second">%1$s KB/s</string>
+    <string name="time_remaining">Time remaining: %1$s</string>
+    <string name="time_remaining_notification">%1$s left</string>
+</resources>

+ 0 - 0
platform/android/libs/apk_expansion/res/values/styles.xml → platform/android/java/res/values/styles.xml


+ 1 - 1
platform/android/java/src/com/android/godot/Dictionary.java

@@ -5,7 +5,7 @@
 /*                           GODOT ENGINE                                */
 /*                    http://www.godotengine.org                         */
 /*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur.                 */
+/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur.                 */
 /*                                                                       */
 /* Permission is hereby granted, free of charge, to any person obtaining */
 /* a copy of this software and associated documentation files (the       */

+ 1 - 1
platform/android/java/src/com/android/godot/Godot.java

@@ -5,7 +5,7 @@
 /*                           GODOT ENGINE                                */
 /*                    http://www.godotengine.org                         */
 /*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur.                 */
+/* Copyright (c) 2007-2015 Juan Linietsky, Ariel Manzur.                 */
 /*                                                                       */
 /* Permission is hereby granted, free of charge, to any person obtaining */
 /* a copy of this software and associated documentation files (the       */

+ 1 - 1
platform/android/java/src/com/android/godot/GodotIO.java

@@ -5,7 +5,7 @@
 /*                           GODOT ENGINE                                */
 /*                    http://www.godotengine.org                         */
 /*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur.                 */
+/* Copyright (c) 2007-2015 Juan Linietsky, Ariel Manzur.                 */
 /*                                                                       */
 /* Permission is hereby granted, free of charge, to any person obtaining */
 /* a copy of this software and associated documentation files (the       */

+ 1 - 1
platform/android/java/src/com/android/godot/GodotLib.java

@@ -5,7 +5,7 @@
 /*                           GODOT ENGINE                                */
 /*                    http://www.godotengine.org                         */
 /*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur.                 */
+/* Copyright (c) 2007-2015 Juan Linietsky, Ariel Manzur.                 */
 /*                                                                       */
 /* Permission is hereby granted, free of charge, to any person obtaining */
 /* a copy of this software and associated documentation files (the       */

+ 1 - 1
platform/android/java/src/com/android/godot/GodotView.java

@@ -5,7 +5,7 @@
 /*                           GODOT ENGINE                                */
 /*                    http://www.godotengine.org                         */
 /*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur.                 */
+/* Copyright (c) 2007-2015 Juan Linietsky, Ariel Manzur.                 */
 /*                                                                       */
 /* Permission is hereby granted, free of charge, to any person obtaining */
 /* a copy of this software and associated documentation files (the       */

+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/AESObfuscator.java → platform/android/java/src/com/android/vending/licensing/AESObfuscator.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/APKExpansionPolicy.java → platform/android/java/src/com/android/vending/licensing/APKExpansionPolicy.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/DeviceLimiter.java → platform/android/java/src/com/android/vending/licensing/DeviceLimiter.java


+ 0 - 0
platform/android/libs/play_licensing/aidl/ILicenseResultListener.aidl → platform/android/java/src/com/android/vending/licensing/ILicenseResultListener.aidl


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/ILicenseResultListener.java → platform/android/java/src/com/android/vending/licensing/ILicenseResultListener.java


+ 0 - 0
platform/android/libs/play_licensing/aidl/ILicensingService.aidl → platform/android/java/src/com/android/vending/licensing/ILicensingService.aidl


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/ILicensingService.java → platform/android/java/src/com/android/vending/licensing/ILicensingService.java


+ 1 - 1
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/LicenseChecker.java → platform/android/java/src/com/android/vending/licensing/LicenseChecker.java

@@ -63,7 +63,7 @@ public class LicenseChecker implements ServiceConnection {
     private static final int TIMEOUT_MS = 10 * 1000;
 
     private static final SecureRandom RANDOM = new SecureRandom();
-    private static final boolean DEBUG_LICENSE_ERROR = true;
+    private static final boolean DEBUG_LICENSE_ERROR = false;
 
     private ILicensingService mService;
 

+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/LicenseCheckerCallback.java → platform/android/java/src/com/android/vending/licensing/LicenseCheckerCallback.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/LicenseValidator.java → platform/android/java/src/com/android/vending/licensing/LicenseValidator.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/NullDeviceLimiter.java → platform/android/java/src/com/android/vending/licensing/NullDeviceLimiter.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/Obfuscator.java → platform/android/java/src/com/android/vending/licensing/Obfuscator.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/Policy.java → platform/android/java/src/com/android/vending/licensing/Policy.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/PreferenceObfuscator.java → platform/android/java/src/com/android/vending/licensing/PreferenceObfuscator.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/ResponseData.java → platform/android/java/src/com/android/vending/licensing/ResponseData.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/ServerManagedPolicy.java → platform/android/java/src/com/android/vending/licensing/ServerManagedPolicy.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/StrictPolicy.java → platform/android/java/src/com/android/vending/licensing/StrictPolicy.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/ValidationException.java → platform/android/java/src/com/android/vending/licensing/ValidationException.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/util/Base64.java → platform/android/java/src/com/android/vending/licensing/util/Base64.java


+ 0 - 0
platform/android/libs/play_licensing/src/com/google/android/vending/licensing/util/Base64DecoderException.java → platform/android/java/src/com/android/vending/licensing/util/Base64DecoderException.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/Constants.java → platform/android/java/src/com/google/android/vending/expansion/downloader/Constants.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java → platform/android/java/src/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java → platform/android/java/src/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java → platform/android/java/src/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java


+ 1 - 1
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/Helpers.java → platform/android/java/src/com/google/android/vending/expansion/downloader/Helpers.java

@@ -16,7 +16,7 @@
 
 package com.google.android.vending.expansion.downloader;
 
-import com.android.vending.expansion.downloader.R;
+import com.godot.game.R;
 
 import android.content.Context;
 import android.os.Environment;

+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/IDownloaderClient.java → platform/android/java/src/com/google/android/vending/expansion/downloader/IDownloaderClient.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/IDownloaderService.java → platform/android/java/src/com/google/android/vending/expansion/downloader/IDownloaderService.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/IStub.java → platform/android/java/src/com/google/android/vending/expansion/downloader/IStub.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/SystemFacade.java → platform/android/java/src/com/google/android/vending/expansion/downloader/SystemFacade.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/AndroidHttpClient.java → platform/android/java/src/com/google/android/vending/expansion/downloader/impl/AndroidHttpClient.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/CustomIntentService.java → platform/android/java/src/com/google/android/vending/expansion/downloader/impl/CustomIntentService.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/CustomNotificationFactory.java → platform/android/java/src/com/google/android/vending/expansion/downloader/impl/CustomNotificationFactory.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/DownloadInfo.java → platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadInfo.java


+ 1 - 1
platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java → platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java

@@ -16,7 +16,7 @@
 
 package com.google.android.vending.expansion.downloader.impl;
 
-import com.android.vending.expansion.downloader.R;
+import com.godot.game.R;
 import com.google.android.vending.expansion.downloader.DownloadProgressInfo;
 import com.google.android.vending.expansion.downloader.DownloaderClientMarshaller;
 import com.google.android.vending.expansion.downloader.Helpers;

+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/DownloadThread.java → platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadThread.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java → platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloaderService.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/DownloadsDB.java → platform/android/java/src/com/google/android/vending/expansion/downloader/impl/DownloadsDB.java


+ 0 - 0
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/HttpDateTime.java → platform/android/java/src/com/google/android/vending/expansion/downloader/impl/HttpDateTime.java


+ 1 - 1
platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/impl/V14CustomNotification.java → platform/android/java/src/com/google/android/vending/expansion/downloader/impl/V14CustomNotification.java

@@ -16,7 +16,7 @@
 
 package com.google.android.vending.expansion.downloader.impl;
 
-import com.android.vending.expansion.downloader.R;
+import com.godot.game.R;
 import com.google.android.vending.expansion.downloader.Helpers;
 
 import android.app.Notification;

+ 1 - 1
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/V3CustomNotification.java → platform/android/java/src/com/google/android/vending/expansion/downloader/impl/V3CustomNotification.java

@@ -16,7 +16,7 @@
 
 package com.google.android.vending.expansion.downloader.impl;
 
-import com.android.vending.expansion.downloader.R;
+import com.godot.game.R;
 import com.google.android.vending.expansion.downloader.Helpers;
 
 import android.app.Notification;

+ 0 - 9
platform/android/libs/apk_expansion/AndroidManifest.xml

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.vending.expansion.downloader"
-    android:versionCode="2"
-    android:versionName="1.1" >
-
-    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15"/>
-    
-</manifest>

+ 0 - 92
platform/android/libs/apk_expansion/build.xml

@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="apk_expansion" default="help">
-
-    <!-- The local.properties file is created and updated by the 'android' tool.
-         It contains the path to the SDK. It should *NOT* be checked into
-         Version Control Systems. -->
-    <property file="local.properties" />
-
-    <!-- The ant.properties file can be created by you. It is only edited by the
-         'android' tool to add properties to it.
-         This is the place to change some Ant specific build properties.
-         Here are some properties you may want to change/update:
-
-         source.dir
-             The name of the source directory. Default is 'src'.
-         out.dir
-             The name of the output directory. Default is 'bin'.
-
-         For other overridable properties, look at the beginning of the rules
-         files in the SDK, at tools/ant/build.xml
-
-         Properties related to the SDK location or the project target should
-         be updated using the 'android' tool with the 'update' action.
-
-         This file is an integral part of the build system for your
-         application and should be checked into Version Control Systems.
-
-         -->
-    <property file="ant.properties" />
-
-    <!-- if sdk.dir was not set from one of the property file, then
-         get it from the ANDROID_HOME env var.
-         This must be done before we load project.properties since
-         the proguard config can use sdk.dir -->
-    <property environment="env" />
-    <condition property="sdk.dir" value="${env.ANDROID_HOME}">
-        <isset property="env.ANDROID_HOME" />
-    </condition>
-
-    <!-- The project.properties file is created and updated by the 'android'
-         tool, as well as ADT.
-
-         This contains project specific properties such as project target, and library
-         dependencies. Lower level build properties are stored in ant.properties
-         (or in .classpath for Eclipse projects).
-
-         This file is an integral part of the build system for your
-         application and should be checked into Version Control Systems. -->
-    <loadproperties srcFile="project.properties" />
-
-    <!-- quick check on sdk.dir -->
-    <fail
-            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
-            unless="sdk.dir"
-    />
-
-    <!--
-        Import per project custom build rules if present at the root of the project.
-        This is the place to put custom intermediary targets such as:
-            -pre-build
-            -pre-compile
-            -post-compile (This is typically used for code obfuscation.
-                           Compiled code location: ${out.classes.absolute.dir}
-                           If this is not done in place, override ${out.dex.input.absolute.dir})
-            -post-package
-            -post-build
-            -pre-clean
-    -->
-    <import file="custom_rules.xml" optional="true" />
-
-    <!-- Import the actual build file.
-
-         To customize existing targets, there are two options:
-         - Customize only one target:
-             - copy/paste the target into this file, *before* the
-               <import> task.
-             - customize it to your needs.
-         - Customize the whole content of build.xml
-             - copy/paste the content of the rules files (minus the top node)
-               into this file, replacing the <import> task.
-             - customize to your needs.
-
-         ***********************
-         ****** IMPORTANT ******
-         ***********************
-         In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
-         in order to avoid having your file be overridden by tools such as "android update project"
-    -->
-    <!-- version-tag: 1 -->
-    <import file="${sdk.dir}/tools/ant/build.xml" />
-
-</project>

+ 0 - 20
platform/android/libs/apk_expansion/proguard-project.txt

@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}

+ 0 - 13
platform/android/libs/apk_expansion/project.properties

@@ -1,13 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system use,
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-
-# Project target.
-target=android-15
-android.library=true
-android.library.reference.1=../play_licensing

+ 0 - 41
platform/android/libs/apk_expansion/res/values/strings.xml

@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
-    <!-- When a download completes, a notification is displayed, and this
-        string is used to indicate that the download successfully completed.
-        Note that such a download could have been initiated by a variety of
-        applications, including (but not limited to) the browser, an email
-        application, a content marketplace. -->
-    <string name="notification_download_complete">Download complete</string>
-
-    <!-- When a download completes, a notification is displayed, and this
-        string is used to indicate that the download failed.
-        Note that such a download could have been initiated by a variety of
-        applications, including (but not limited to) the browser, an email
-        application, a content marketplace. -->
-    <string name="notification_download_failed">Download unsuccessful</string>
-
-
-    <string name="state_unknown">Starting..."</string>
-    <string name="state_idle">Waiting for download to start</string>
-    <string name="state_fetching_url">Looking for resources to download</string>
-    <string name="state_connecting">Connecting to the download server</string>
-    <string name="state_downloading">Downloading resources</string>
-    <string name="state_completed">Download finished</string>
-    <string name="state_paused_network_unavailable">Download paused because no network is available</string>
-    <string name="state_paused_network_setup_failure">Download paused. Test a website in browser</string>
-    <string name="state_paused_by_request">Download paused</string>
-    <string name="state_paused_wifi_unavailable">Download paused because wifi is unavailable</string>
-    <string name="state_paused_wifi_disabled">Download paused because wifi is disabled</string>
-    <string name="state_paused_roaming">Download paused because you are roaming</string>
-    <string name="state_paused_sdcard_unavailable">Download paused because the external storage is unavailable</string>
-    <string name="state_failed_unlicensed">Download failed because you may not have purchased this app</string>
-    <string name="state_failed_fetching_url">Download failed because the resources could not be found</string>
-    <string name="state_failed_sdcard_full">Download failed because the external storage is full</string>
-    <string name="state_failed_cancelled">Download cancelled</string>
-    <string name="state_failed">Download failed</string>
-
-    <string name="kilobytes_per_second">%1$s KB/s</string>
-    <string name="time_remaining">Time remaining: %1$s</string>
-    <string name="time_remaining_notification">%1$s left</string>
-</resources>

+ 0 - 231
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java

@@ -1,231 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.google.android.vending.expansion.downloader.impl;
-
-import com.android.vending.expansion.downloader.R;
-import com.google.android.vending.expansion.downloader.DownloadProgressInfo;
-import com.google.android.vending.expansion.downloader.DownloaderClientMarshaller;
-import com.google.android.vending.expansion.downloader.Helpers;
-import com.google.android.vending.expansion.downloader.IDownloaderClient;
-
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.os.Messenger;
-
-/**
- * This class handles displaying the notification associated with the download
- * queue going on in the download manager. It handles multiple status types;
- * Some require user interaction and some do not. Some of the user interactions
- * may be transient. (for example: the user is queried to continue the download
- * on 3G when it started on WiFi, but then the phone locks onto WiFi again so
- * the prompt automatically goes away)
- * <p/>
- * The application interface for the downloader also needs to understand and
- * handle these transient states.
- */
-public class DownloadNotification implements IDownloaderClient {
-
-    private int mState;
-    private final Context mContext;
-    private final NotificationManager mNotificationManager;
-    private String mCurrentTitle;
-
-    private IDownloaderClient mClientProxy;
-    final ICustomNotification mCustomNotification;
-    private Notification mNotification;
-    private Notification mCurrentNotification;
-    private CharSequence mLabel;
-    private String mCurrentText;
-    private PendingIntent mContentIntent;
-    private DownloadProgressInfo mProgressInfo;
-
-    static final String LOGTAG = "DownloadNotification";
-    static final int NOTIFICATION_ID = LOGTAG.hashCode();
-
-    public PendingIntent getClientIntent() {
-        return mContentIntent;
-    }
-
-    public void setClientIntent(PendingIntent mClientIntent) {
-        this.mContentIntent = mClientIntent;
-    }
-
-    public void resendState() {
-        if (null != mClientProxy) {
-            mClientProxy.onDownloadStateChanged(mState);
-        }
-    }
-
-    @Override
-    public void onDownloadStateChanged(int newState) {
-        if (null != mClientProxy) {
-            mClientProxy.onDownloadStateChanged(newState);
-        }
-        if (newState != mState) {
-            mState = newState;
-            if (newState == IDownloaderClient.STATE_IDLE || null == mContentIntent) {
-                return;
-            }
-            int stringDownloadID;
-            int iconResource;
-            boolean ongoingEvent;
-
-            // get the new title string and paused text
-            switch (newState) {
-                case 0:
-                    iconResource = android.R.drawable.stat_sys_warning;
-                    stringDownloadID = R.string.state_unknown;
-                    ongoingEvent = false;
-                    break;
-
-                case IDownloaderClient.STATE_DOWNLOADING:
-                    iconResource = android.R.drawable.stat_sys_download;
-                    stringDownloadID = Helpers.getDownloaderStringResourceIDFromState(newState);
-                    ongoingEvent = true;
-                    break;
-
-                case IDownloaderClient.STATE_FETCHING_URL:
-                case IDownloaderClient.STATE_CONNECTING:
-                    iconResource = android.R.drawable.stat_sys_download_done;
-                    stringDownloadID = Helpers.getDownloaderStringResourceIDFromState(newState);
-                    ongoingEvent = true;
-                    break;
-
-                case IDownloaderClient.STATE_COMPLETED:
-                case IDownloaderClient.STATE_PAUSED_BY_REQUEST:
-                    iconResource = android.R.drawable.stat_sys_download_done;
-                    stringDownloadID = Helpers.getDownloaderStringResourceIDFromState(newState);
-                    ongoingEvent = false;
-                    break;
-
-                case IDownloaderClient.STATE_FAILED:
-                case IDownloaderClient.STATE_FAILED_CANCELED:
-                case IDownloaderClient.STATE_FAILED_FETCHING_URL:
-                case IDownloaderClient.STATE_FAILED_SDCARD_FULL:
-                case IDownloaderClient.STATE_FAILED_UNLICENSED:
-                    iconResource = android.R.drawable.stat_sys_warning;
-                    stringDownloadID = Helpers.getDownloaderStringResourceIDFromState(newState);
-                    ongoingEvent = false;
-                    break;
-
-                default:
-                    iconResource = android.R.drawable.stat_sys_warning;
-                    stringDownloadID = Helpers.getDownloaderStringResourceIDFromState(newState);
-                    ongoingEvent = true;
-                    break;
-            }
-            mCurrentText = mContext.getString(stringDownloadID);
-            mCurrentTitle = mLabel.toString();
-            mCurrentNotification.tickerText = mLabel + ": " + mCurrentText;
-            mCurrentNotification.icon = iconResource;
-            mCurrentNotification.setLatestEventInfo(mContext, mCurrentTitle, mCurrentText,
-                    mContentIntent);
-            if (ongoingEvent) {
-                mCurrentNotification.flags |= Notification.FLAG_ONGOING_EVENT;
-            } else {
-                mCurrentNotification.flags &= ~Notification.FLAG_ONGOING_EVENT;
-                mCurrentNotification.flags |= Notification.FLAG_AUTO_CANCEL;
-            }
-            mNotificationManager.notify(NOTIFICATION_ID, mCurrentNotification);
-        }
-    }
-
-    @Override
-    public void onDownloadProgress(DownloadProgressInfo progress) {
-        mProgressInfo = progress;
-        if (null != mClientProxy) {
-            mClientProxy.onDownloadProgress(progress);
-        }
-        if (progress.mOverallTotal <= 0) {
-            // we just show the text
-            mNotification.tickerText = mCurrentTitle;
-            mNotification.icon = android.R.drawable.stat_sys_download;
-            mNotification.setLatestEventInfo(mContext, mLabel, mCurrentText, mContentIntent);
-            mCurrentNotification = mNotification;
-        } else {
-            mCustomNotification.setCurrentBytes(progress.mOverallProgress);
-            mCustomNotification.setTotalBytes(progress.mOverallTotal);
-            mCustomNotification.setIcon(android.R.drawable.stat_sys_download);
-            mCustomNotification.setPendingIntent(mContentIntent);
-            mCustomNotification.setTicker(mLabel + ": " + mCurrentText);
-            mCustomNotification.setTitle(mLabel);
-            mCustomNotification.setTimeRemaining(progress.mTimeRemaining);
-            mCurrentNotification = mCustomNotification.updateNotification(mContext);
-        }
-        mNotificationManager.notify(NOTIFICATION_ID, mCurrentNotification);
-    }
-
-    public interface ICustomNotification {
-        void setTitle(CharSequence title);
-
-        void setTicker(CharSequence ticker);
-
-        void setPendingIntent(PendingIntent mContentIntent);
-
-        void setTotalBytes(long totalBytes);
-
-        void setCurrentBytes(long currentBytes);
-
-        void setIcon(int iconResource);
-
-        void setTimeRemaining(long timeRemaining);
-
-        Notification updateNotification(Context c);
-    }
-
-    /**
-     * Called in response to onClientUpdated. Creates a new proxy and notifies
-     * it of the current state.
-     * 
-     * @param msg the client Messenger to notify
-     */
-    public void setMessenger(Messenger msg) {
-        mClientProxy = DownloaderClientMarshaller.CreateProxy(msg);
-        if (null != mProgressInfo) {
-            mClientProxy.onDownloadProgress(mProgressInfo);
-        }
-        if (mState != -1) {
-            mClientProxy.onDownloadStateChanged(mState);
-        }
-    }
-
-    /**
-     * Constructor
-     * 
-     * @param ctx The context to use to obtain access to the Notification
-     *            Service
-     */
-    DownloadNotification(Context ctx, CharSequence applicationLabel) {
-        mState = -1;
-        mContext = ctx;
-        mLabel = applicationLabel;
-        mNotificationManager = (NotificationManager)
-                mContext.getSystemService(Context.NOTIFICATION_SERVICE);
-        mCustomNotification = CustomNotificationFactory
-                .createCustomNotification();
-        mNotification = new Notification();
-        mCurrentNotification = mNotification;
-
-    }
-
-    @Override
-    public void onServiceConnected(Messenger m) {
-    }
-
-}

+ 0 - 101
platform/android/libs/apk_expansion/src/com/google/android/vending/expansion/downloader/impl/V14CustomNotification.java

@@ -1,101 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.google.android.vending.expansion.downloader.impl;
-
-import com.android.vending.expansion.downloader.R;
-import com.google.android.vending.expansion.downloader.Helpers;
-
-import android.app.Notification;
-import android.app.PendingIntent;
-import android.content.Context;
-
-public class V14CustomNotification implements DownloadNotification.ICustomNotification {
-
-    CharSequence mTitle;
-    CharSequence mTicker;
-    int mIcon;
-    long mTotalKB = -1;
-    long mCurrentKB = -1;
-    long mTimeRemaining;
-    PendingIntent mPendingIntent;
-
-    @Override
-    public void setIcon(int icon) {
-        mIcon = icon;
-    }
-
-    @Override
-    public void setTitle(CharSequence title) {
-        mTitle = title;
-    }
-
-    @Override
-    public void setTotalBytes(long totalBytes) {
-        mTotalKB = totalBytes;
-    }
-
-    @Override
-    public void setCurrentBytes(long currentBytes) {
-        mCurrentKB = currentBytes;
-    }
-
-    void setProgress(Notification.Builder builder) {
-
-    }
-
-    @Override
-    public Notification updateNotification(Context c) {
-        Notification.Builder builder = new Notification.Builder(c);
-        builder.setContentTitle(mTitle);
-        if (mTotalKB > 0 && -1 != mCurrentKB) {
-            builder.setProgress((int) (mTotalKB >> 8), (int) (mCurrentKB >> 8), false);
-        } else {
-            builder.setProgress(0, 0, true);
-        }
-        builder.setContentText(Helpers.getDownloadProgressString(mCurrentKB, mTotalKB));
-        builder.setContentInfo(c.getString(R.string.time_remaining_notification,
-                Helpers.getTimeRemaining(mTimeRemaining)));
-        if (mIcon != 0) {
-            builder.setSmallIcon(mIcon);
-        } else {
-            int iconResource = android.R.drawable.stat_sys_download;
-            builder.setSmallIcon(iconResource);
-        }
-        builder.setOngoing(true);
-        builder.setTicker(mTicker);
-        builder.setContentIntent(mPendingIntent);
-        builder.setOnlyAlertOnce(true);
-
-        return builder.getNotification();
-    }
-
-    @Override
-    public void setPendingIntent(PendingIntent contentIntent) {
-        mPendingIntent = contentIntent;
-    }
-
-    @Override
-    public void setTicker(CharSequence ticker) {
-        mTicker = ticker;
-    }
-
-    @Override
-    public void setTimeRemaining(long timeRemaining) {
-        mTimeRemaining = timeRemaining;
-    }
-
-}

+ 0 - 9
platform/android/libs/downloader_library/.classpath

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="gen"/>
-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
-	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
-	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
-	<classpathentry kind="output" path="bin/classes"/>
-</classpath>

+ 0 - 4
platform/android/libs/downloader_library/.settings/org.eclipse.jdt.core.prefs

@@ -1,4 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.source=1.6

+ 0 - 9
platform/android/libs/downloader_library/AndroidManifest.xml

@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.vending.expansion.downloader"
-    android:versionCode="2"
-    android:versionName="1.1" >
-
-    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15"/>
-    
-</manifest>

+ 0 - 92
platform/android/libs/downloader_library/build.xml

@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project name="downloader_library" default="help">
-
-    <!-- The local.properties file is created and updated by the 'android' tool.
-         It contains the path to the SDK. It should *NOT* be checked into
-         Version Control Systems. -->
-    <property file="local.properties" />
-
-    <!-- The ant.properties file can be created by you. It is only edited by the
-         'android' tool to add properties to it.
-         This is the place to change some Ant specific build properties.
-         Here are some properties you may want to change/update:
-
-         source.dir
-             The name of the source directory. Default is 'src'.
-         out.dir
-             The name of the output directory. Default is 'bin'.
-
-         For other overridable properties, look at the beginning of the rules
-         files in the SDK, at tools/ant/build.xml
-
-         Properties related to the SDK location or the project target should
-         be updated using the 'android' tool with the 'update' action.
-
-         This file is an integral part of the build system for your
-         application and should be checked into Version Control Systems.
-
-         -->
-    <property file="ant.properties" />
-
-    <!-- if sdk.dir was not set from one of the property file, then
-         get it from the ANDROID_HOME env var.
-         This must be done before we load project.properties since
-         the proguard config can use sdk.dir -->
-    <property environment="env" />
-    <condition property="sdk.dir" value="${env.ANDROID_HOME}">
-        <isset property="env.ANDROID_HOME" />
-    </condition>
-
-    <!-- The project.properties file is created and updated by the 'android'
-         tool, as well as ADT.
-
-         This contains project specific properties such as project target, and library
-         dependencies. Lower level build properties are stored in ant.properties
-         (or in .classpath for Eclipse projects).
-
-         This file is an integral part of the build system for your
-         application and should be checked into Version Control Systems. -->
-    <loadproperties srcFile="project.properties" />
-
-    <!-- quick check on sdk.dir -->
-    <fail
-            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
-            unless="sdk.dir"
-    />
-
-    <!--
-        Import per project custom build rules if present at the root of the project.
-        This is the place to put custom intermediary targets such as:
-            -pre-build
-            -pre-compile
-            -post-compile (This is typically used for code obfuscation.
-                           Compiled code location: ${out.classes.absolute.dir}
-                           If this is not done in place, override ${out.dex.input.absolute.dir})
-            -post-package
-            -post-build
-            -pre-clean
-    -->
-    <import file="custom_rules.xml" optional="true" />
-
-    <!-- Import the actual build file.
-
-         To customize existing targets, there are two options:
-         - Customize only one target:
-             - copy/paste the target into this file, *before* the
-               <import> task.
-             - customize it to your needs.
-         - Customize the whole content of build.xml
-             - copy/paste the content of the rules files (minus the top node)
-               into this file, replacing the <import> task.
-             - customize to your needs.
-
-         ***********************
-         ****** IMPORTANT ******
-         ***********************
-         In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
-         in order to avoid having your file be overridden by tools such as "android update project"
-    -->
-    <!-- version-tag: 1 -->
-    <import file="${sdk.dir}/tools/ant/build.xml" />
-
-</project>

+ 0 - 20
platform/android/libs/downloader_library/proguard-project.txt

@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}

+ 0 - 13
platform/android/libs/downloader_library/project.properties

@@ -1,13 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system use,
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-
-# Project target.
-target=android-15
-android.library=true
-android.library.reference.1=../play_licensing

BIN
platform/android/libs/downloader_library/res/drawable-hdpi/notify_panel_notification_icon_bg.png


BIN
platform/android/libs/downloader_library/res/drawable-mdpi/notify_panel_notification_icon_bg.png


+ 0 - 104
platform/android/libs/downloader_library/res/layout/status_bar_ongoing_event_progress_bar.xml

@@ -1,104 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2008, The Android Open Source Project
-**
-** 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.
-*/
--->
-
-<LinearLayout android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:baselineAligned="false"
-    android:orientation="horizontal" android:id="@+id/notificationLayout" xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <RelativeLayout
-        android:layout_width="35dp"
-        android:layout_height="fill_parent"
-        android:paddingTop="10dp"
-        android:paddingBottom="8dp" >
-
-        <ImageView
-            android:id="@+id/appIcon"
-            android:layout_width="fill_parent"
-            android:layout_height="25dp"
-            android:scaleType="centerInside"            
-            android:layout_alignParentLeft="true"
-            android:layout_alignParentTop="true"            
-            android:src="@android:drawable/stat_sys_download" />
-
-        <TextView
-            android:id="@+id/progress_text"
-            style="@style/NotificationText"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            android:layout_alignParentLeft="true"
-            android:layout_alignParentBottom="true"
-            android:layout_gravity="center_horizontal"
-            android:singleLine="true"
-            android:gravity="center" />
-    </RelativeLayout>
-
-    <RelativeLayout
-        android:layout_width="0dip"
-        android:layout_height="match_parent"
-        android:layout_weight="1.0"
-        android:clickable="true"
-        android:focusable="true"
-        android:paddingTop="10dp"
-        android:paddingRight="8dp"
-        android:paddingBottom="8dp" >
-
-        <TextView
-            android:id="@+id/title"
-            style="@style/NotificationTitle"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentLeft="true"
-            android:singleLine="true"/>
-
-        <TextView
-            android:id="@+id/time_remaining"
-            style="@style/NotificationText"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_alignParentRight="true"
-            android:singleLine="true"/>
-        <!-- Only one of progress_bar and paused_text will be visible. -->
-
-        <FrameLayout
-            android:id="@+id/progress_bar_frame"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            android:layout_alignParentBottom="true" >
-
-            <ProgressBar
-                android:id="@+id/progress_bar"
-                style="?android:attr/progressBarStyleHorizontal"
-                android:layout_width="fill_parent"
-                android:layout_height="wrap_content"
-                android:paddingRight="25dp" />
-
-            <TextView
-                android:id="@+id/description"
-                style="@style/NotificationTextShadow"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center"
-                android:paddingRight="25dp"
-                android:singleLine="true" />
-        </FrameLayout>
-
-    </RelativeLayout>
-
-</LinearLayout>

+ 0 - 6
platform/android/libs/downloader_library/res/values-v11/styles.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <style name="NotificationTextSecondary" parent="NotificationText">
-        <item name="android:textSize">12sp</item>
-    </style>
-</resources>

+ 0 - 5
platform/android/libs/downloader_library/res/values-v9/styles.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <style name="NotificationText" parent="android:TextAppearance.StatusBar.EventContent" />
-    <style name="NotificationTitle" parent="android:TextAppearance.StatusBar.EventContent.Title" />
-</resources>

+ 0 - 41
platform/android/libs/downloader_library/res/values/strings.xml

@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
-    <!-- When a download completes, a notification is displayed, and this
-        string is used to indicate that the download successfully completed.
-        Note that such a download could have been initiated by a variety of
-        applications, including (but not limited to) the browser, an email
-        application, a content marketplace. -->
-    <string name="notification_download_complete">Download complete</string>
-
-    <!-- When a download completes, a notification is displayed, and this
-        string is used to indicate that the download failed.
-        Note that such a download could have been initiated by a variety of
-        applications, including (but not limited to) the browser, an email
-        application, a content marketplace. -->
-    <string name="notification_download_failed">Download unsuccessful</string>
-
-
-    <string name="state_unknown">Starting..."</string>
-    <string name="state_idle">Waiting for download to start</string>
-    <string name="state_fetching_url">Looking for resources to download</string>
-    <string name="state_connecting">Connecting to the download server</string>
-    <string name="state_downloading">Downloading resources</string>
-    <string name="state_completed">Download finished</string>
-    <string name="state_paused_network_unavailable">Download paused because no network is available</string>
-    <string name="state_paused_network_setup_failure">Download paused. Test a website in browser</string>
-    <string name="state_paused_by_request">Download paused</string>
-    <string name="state_paused_wifi_unavailable">Download paused because wifi is unavailable</string>
-    <string name="state_paused_wifi_disabled">Download paused because wifi is disabled</string>
-    <string name="state_paused_roaming">Download paused because you are roaming</string>
-    <string name="state_paused_sdcard_unavailable">Download paused because the external storage is unavailable</string>
-    <string name="state_failed_unlicensed">Download failed because you may not have purchased this app</string>
-    <string name="state_failed_fetching_url">Download failed because the resources could not be found</string>
-    <string name="state_failed_sdcard_full">Download failed because the external storage is full</string>
-    <string name="state_failed_cancelled">Download cancelled</string>
-    <string name="state_failed">Download failed</string>
-
-    <string name="kilobytes_per_second">%1$s KB/s</string>
-    <string name="time_remaining">Time remaining: %1$s</string>
-    <string name="time_remaining_notification">%1$s left</string>
-</resources>

+ 0 - 25
platform/android/libs/downloader_library/res/values/styles.xml

@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
-    <style name="NotificationText">
-        <item name="android:textColor">?android:attr/textColorPrimary</item>
-    </style>
-
-    <style name="NotificationTextShadow" parent="NotificationText">
-        <item name="android:textColor">?android:attr/textColorPrimary</item>
-        <item name="android:shadowColor">@android:color/background_dark</item>
-        <item name="android:shadowDx">1.0</item>
-        <item name="android:shadowDy">1.0</item>
-        <item name="android:shadowRadius">1</item>
-    </style>
-
-    <style name="NotificationTitle">
-        <item name="android:textColor">?android:attr/textColorPrimary</item>
-        <item name="android:textStyle">bold</item>
-    </style>
-
-    <style name="ButtonBackground">
-        <item name="android:background">@android:color/background_dark</item>
-    </style>
-
-</resources>

+ 0 - 236
platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/Constants.java

@@ -1,236 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.google.android.vending.expansion.downloader;
-
-import java.io.File;
-
-
-/**
- * Contains the internal constants that are used in the download manager.
- * As a general rule, modifying these constants should be done with care.
- */
-public class Constants {    
-    /** Tag used for debugging/logging */
-    public static final String TAG = "LVLDL";
-
-    /**
-     * Expansion path where we store obb files
-     */
-    public static final String EXP_PATH = File.separator + "Android"
-            + File.separator + "obb" + File.separator;
-    
-    /** The intent that gets sent when the service must wake up for a retry */
-    public static final String ACTION_RETRY = "android.intent.action.DOWNLOAD_WAKEUP";
-
-    /** the intent that gets sent when clicking a successful download */
-    public static final String ACTION_OPEN = "android.intent.action.DOWNLOAD_OPEN";
-
-    /** the intent that gets sent when clicking an incomplete/failed download  */
-    public static final String ACTION_LIST = "android.intent.action.DOWNLOAD_LIST";
-
-    /** the intent that gets sent when deleting the notification of a completed download */
-    public static final String ACTION_HIDE = "android.intent.action.DOWNLOAD_HIDE";
-
-    /**
-     * When a number has to be appended to the filename, this string is used to separate the
-     * base filename from the sequence number
-     */
-    public static final String FILENAME_SEQUENCE_SEPARATOR = "-";
-
-    /** The default user agent used for downloads */
-    public static final String DEFAULT_USER_AGENT = "Android.LVLDM";
-
-    /** The buffer size used to stream the data */
-    public static final int BUFFER_SIZE = 4096;
-
-    /** The minimum amount of progress that has to be done before the progress bar gets updated */
-    public static final int MIN_PROGRESS_STEP = 4096;
-
-    /** The minimum amount of time that has to elapse before the progress bar gets updated, in ms */
-    public static final long MIN_PROGRESS_TIME = 1000;
-
-    /** The maximum number of rows in the database (FIFO) */
-    public static final int MAX_DOWNLOADS = 1000;
-
-    /**
-     * The number of times that the download manager will retry its network
-     * operations when no progress is happening before it gives up.
-     */
-    public static final int MAX_RETRIES = 5;
-
-    /**
-     * The minimum amount of time that the download manager accepts for
-     * a Retry-After response header with a parameter in delta-seconds.
-     */
-    public static final int MIN_RETRY_AFTER = 30; // 30s
-
-    /**
-     * The maximum amount of time that the download manager accepts for
-     * a Retry-After response header with a parameter in delta-seconds.
-     */
-    public static final int MAX_RETRY_AFTER = 24 * 60 * 60; // 24h
-
-    /**
-     * The maximum number of redirects.
-     */
-    public static final int MAX_REDIRECTS = 5; // can't be more than 7.
-
-    /**
-     * The time between a failure and the first retry after an IOException.
-     * Each subsequent retry grows exponentially, doubling each time.
-     * The time is in seconds.
-     */
-    public static final int RETRY_FIRST_DELAY = 30;
-
-    /** Enable separate connectivity logging */
-    public static final boolean LOGX = true;
-
-    /** Enable verbose logging */
-    public static final boolean LOGV = false;
-    
-    /** Enable super-verbose logging */
-    private static final boolean LOCAL_LOGVV = false;
-    public static final boolean LOGVV = LOCAL_LOGVV && LOGV;
-    
-    /**
-     * This download has successfully completed.
-     * Warning: there might be other status values that indicate success
-     * in the future.
-     * Use isSucccess() to capture the entire category.
-     */
-    public static final int STATUS_SUCCESS = 200;
-
-    /**
-     * This request couldn't be parsed. This is also used when processing
-     * requests with unknown/unsupported URI schemes.
-     */
-    public static final int STATUS_BAD_REQUEST = 400;
-
-    /**
-     * This download can't be performed because the content type cannot be
-     * handled.
-     */
-    public static final int STATUS_NOT_ACCEPTABLE = 406;
-
-    /**
-     * This download cannot be performed because the length cannot be
-     * determined accurately. This is the code for the HTTP error "Length
-     * Required", which is typically used when making requests that require
-     * a content length but don't have one, and it is also used in the
-     * client when a response is received whose length cannot be determined
-     * accurately (therefore making it impossible to know when a download
-     * completes).
-     */
-    public static final int STATUS_LENGTH_REQUIRED = 411;
-
-    /**
-     * This download was interrupted and cannot be resumed.
-     * This is the code for the HTTP error "Precondition Failed", and it is
-     * also used in situations where the client doesn't have an ETag at all.
-     */
-    public static final int STATUS_PRECONDITION_FAILED = 412;
-
-    /**
-     * The lowest-valued error status that is not an actual HTTP status code.
-     */
-    public static final int MIN_ARTIFICIAL_ERROR_STATUS = 488;
-
-    /**
-     * The requested destination file already exists.
-     */
-    public static final int STATUS_FILE_ALREADY_EXISTS_ERROR = 488;
-
-    /**
-     * Some possibly transient error occurred, but we can't resume the download.
-     */
-    public static final int STATUS_CANNOT_RESUME = 489;
-
-    /**
-     * This download was canceled
-     */
-    public static final int STATUS_CANCELED = 490;
-
-    /**
-     * This download has completed with an error.
-     * Warning: there will be other status values that indicate errors in
-     * the future. Use isStatusError() to capture the entire category.
-     */
-    public static final int STATUS_UNKNOWN_ERROR = 491;
-
-    /**
-     * This download couldn't be completed because of a storage issue.
-     * Typically, that's because the filesystem is missing or full.
-     * Use the more specific {@link #STATUS_INSUFFICIENT_SPACE_ERROR}
-     * and {@link #STATUS_DEVICE_NOT_FOUND_ERROR} when appropriate.
-     */
-    public static final int STATUS_FILE_ERROR = 492;
-
-    /**
-     * This download couldn't be completed because of an HTTP
-     * redirect response that the download manager couldn't
-     * handle.
-     */
-    public static final int STATUS_UNHANDLED_REDIRECT = 493;
-
-    /**
-     * This download couldn't be completed because of an
-     * unspecified unhandled HTTP code.
-     */
-    public static final int STATUS_UNHANDLED_HTTP_CODE = 494;
-
-    /**
-     * This download couldn't be completed because of an
-     * error receiving or processing data at the HTTP level.
-     */
-    public static final int STATUS_HTTP_DATA_ERROR = 495;
-
-    /**
-     * This download couldn't be completed because of an
-     * HttpException while setting up the request.
-     */
-    public static final int STATUS_HTTP_EXCEPTION = 496;
-
-    /**
-     * This download couldn't be completed because there were
-     * too many redirects.
-     */
-    public static final int STATUS_TOO_MANY_REDIRECTS = 497;
-
-    /**
-     * This download couldn't be completed due to insufficient storage
-     * space.  Typically, this is because the SD card is full.
-     */
-    public static final int STATUS_INSUFFICIENT_SPACE_ERROR = 498;
-
-    /**
-     * This download couldn't be completed because no external storage
-     * device was found.  Typically, this is because the SD card is not
-     * mounted.
-     */
-    public static final int STATUS_DEVICE_NOT_FOUND_ERROR = 499;
-
-    /**
-     * The wake duration to check to see if a download is possible.
-     */
-    public static final long WATCHDOG_WAKE_TIMER = 60*1000;    
-
-    /**
-     * The wake duration to check to see if the process was killed.
-     */
-    public static final long ACTIVE_THREAD_WATCHDOG = 5*1000;    
-
-}

+ 0 - 80
platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/DownloadProgressInfo.java

@@ -1,80 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.google.android.vending.expansion.downloader;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-
-/**
- * This class contains progress information about the active download(s).
- *
- * When you build the Activity that initiates a download and tracks the
- * progress by implementing the {@link IDownloaderClient} interface, you'll
- * receive a DownloadProgressInfo object in each call to the {@link
- * IDownloaderClient#onDownloadProgress} method. This allows you to update
- * your activity's UI with information about the download progress, such
- * as the progress so far, time remaining and current speed.
- */
-public class DownloadProgressInfo implements Parcelable {
-    public long mOverallTotal;
-    public long mOverallProgress;
-    public long mTimeRemaining; // time remaining
-    public float mCurrentSpeed; // speed in KB/S
-
-    @Override
-    public int describeContents() {
-        return 0;
-    }
-
-    @Override
-    public void writeToParcel(Parcel p, int i) {
-        p.writeLong(mOverallTotal);
-        p.writeLong(mOverallProgress);
-        p.writeLong(mTimeRemaining);
-        p.writeFloat(mCurrentSpeed);
-    }
-
-    public DownloadProgressInfo(Parcel p) {
-        mOverallTotal = p.readLong();
-        mOverallProgress = p.readLong();
-        mTimeRemaining = p.readLong();
-        mCurrentSpeed = p.readFloat();
-    }
-
-    public DownloadProgressInfo(long overallTotal, long overallProgress,
-            long timeRemaining,
-            float currentSpeed) {
-        this.mOverallTotal = overallTotal;
-        this.mOverallProgress = overallProgress;
-        this.mTimeRemaining = timeRemaining;
-        this.mCurrentSpeed = currentSpeed;
-    }
-
-    public static final Creator<DownloadProgressInfo> CREATOR = new Creator<DownloadProgressInfo>() {
-        @Override
-        public DownloadProgressInfo createFromParcel(Parcel parcel) {
-            return new DownloadProgressInfo(parcel);
-        }
-
-        @Override
-        public DownloadProgressInfo[] newArray(int i) {
-            return new DownloadProgressInfo[i];
-        }
-    };
-
-}

+ 0 - 277
platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/DownloaderClientMarshaller.java

@@ -1,277 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.google.android.vending.expansion.downloader;
-
-import com.google.android.vending.expansion.downloader.impl.DownloaderService;
-
-import android.app.PendingIntent;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Message;
-import android.os.Messenger;
-import android.os.RemoteException;
-import android.util.Log;
-
-
-
-/**
- * This class binds the service API to your application client.  It contains the IDownloaderClient proxy,
- * which is used to call functions in your client as well as the Stub, which is used to call functions
- * in the client implementation of IDownloaderClient.
- * 
- * <p>The IPC is implemented using an Android Messenger and a service Binder.  The connect method
- * should be called whenever the client wants to bind to the service.  It opens up a service connection
- * that ends up calling the onServiceConnected client API that passes the service messenger
- * in.  If the client wants to be notified by the service, it is responsible for then passing its
- * messenger to the service in a separate call.
- *
- * <p>Critical methods are {@link #startDownloadServiceIfRequired} and {@link #CreateStub}.
- *
- * <p>When your application first starts, you should first check whether your app's expansion files are
- * already on the device. If not, you should then call {@link #startDownloadServiceIfRequired}, which
- * starts your {@link impl.DownloaderService} to download the expansion files if necessary. The method
- * returns a value indicating whether download is required or not.
- *
- * <p>If a download is required, {@link #startDownloadServiceIfRequired} begins the download through
- * the specified service and you should then call {@link #CreateStub} to instantiate a member {@link
- * IStub} object that you need in order to receive calls through your {@link IDownloaderClient}
- * interface.
- */
-public class DownloaderClientMarshaller {
-    public static final int MSG_ONDOWNLOADSTATE_CHANGED = 10;
-    public static final int MSG_ONDOWNLOADPROGRESS = 11;
-    public static final int MSG_ONSERVICECONNECTED = 12;
-
-    public static final String PARAM_NEW_STATE = "newState";
-    public static final String PARAM_PROGRESS = "progress";
-    public static final String PARAM_MESSENGER = DownloaderService.EXTRA_MESSAGE_HANDLER;
-
-    public static final int NO_DOWNLOAD_REQUIRED = DownloaderService.NO_DOWNLOAD_REQUIRED;
-    public static final int LVL_CHECK_REQUIRED = DownloaderService.LVL_CHECK_REQUIRED;
-    public static final int DOWNLOAD_REQUIRED = DownloaderService.DOWNLOAD_REQUIRED;
-
-    private static class Proxy implements IDownloaderClient {
-        private Messenger mServiceMessenger;
-
-        @Override
-        public void onDownloadStateChanged(int newState) {
-            Bundle params = new Bundle(1);
-            params.putInt(PARAM_NEW_STATE, newState);
-            send(MSG_ONDOWNLOADSTATE_CHANGED, params);
-        }
-
-        @Override
-        public void onDownloadProgress(DownloadProgressInfo progress) {
-            Bundle params = new Bundle(1);
-            params.putParcelable(PARAM_PROGRESS, progress);
-            send(MSG_ONDOWNLOADPROGRESS, params);
-        }
-
-        private void send(int method, Bundle params) {
-            Message m = Message.obtain(null, method);
-            m.setData(params);
-            try {
-                mServiceMessenger.send(m);
-            } catch (RemoteException e) {
-                e.printStackTrace();
-            }
-        }
-        
-        public Proxy(Messenger msg) {
-            mServiceMessenger = msg;
-        }
-
-        @Override
-        public void onServiceConnected(Messenger m) {
-            /**
-             * This is never called through the proxy.
-             */
-        }
-    }
-
-    private static class Stub implements IStub {
-        private IDownloaderClient mItf = null;
-        private Class<?> mDownloaderServiceClass;
-        private boolean mBound;
-        private Messenger mServiceMessenger;
-        private Context mContext;
-        /**
-         * Target we publish for clients to send messages to IncomingHandler.
-         */
-        final Messenger mMessenger = new Messenger(new Handler() {
-            @Override
-            public void handleMessage(Message msg) {
-                switch (msg.what) {
-                    case MSG_ONDOWNLOADPROGRESS:                        
-                        Bundle bun = msg.getData();
-                        if ( null != mContext ) {
-                            bun.setClassLoader(mContext.getClassLoader());
-                            DownloadProgressInfo dpi = (DownloadProgressInfo) msg.getData()
-                                    .getParcelable(PARAM_PROGRESS);
-                            mItf.onDownloadProgress(dpi);
-                        }
-                        break;
-                    case MSG_ONDOWNLOADSTATE_CHANGED:
-                        mItf.onDownloadStateChanged(msg.getData().getInt(PARAM_NEW_STATE));
-                        break;
-                    case MSG_ONSERVICECONNECTED:
-                        mItf.onServiceConnected(
-                                (Messenger) msg.getData().getParcelable(PARAM_MESSENGER));
-                        break;
-                }
-            }
-        });
-
-        public Stub(IDownloaderClient itf, Class<?> downloaderService) {
-            mItf = itf;
-            mDownloaderServiceClass = downloaderService;
-        }
-
-        /**
-         * Class for interacting with the main interface of the service.
-         */
-        private ServiceConnection mConnection = new ServiceConnection() {
-            public void onServiceConnected(ComponentName className, IBinder service) {
-                // This is called when the connection with the service has been
-                // established, giving us the object we can use to
-                // interact with the service. We are communicating with the
-                // service using a Messenger, so here we get a client-side
-                // representation of that from the raw IBinder object.
-                mServiceMessenger = new Messenger(service);
-                mItf.onServiceConnected(
-                        mServiceMessenger);
-            }
-
-            public void onServiceDisconnected(ComponentName className) {
-                // This is called when the connection with the service has been
-                // unexpectedly disconnected -- that is, its process crashed.
-                mServiceMessenger = null;
-            }
-        };
-
-        @Override
-        public void connect(Context c) {
-            mContext = c;
-            Intent bindIntent = new Intent(c, mDownloaderServiceClass);
-            bindIntent.putExtra(PARAM_MESSENGER, mMessenger);
-            if ( !c.bindService(bindIntent, mConnection, Context.BIND_DEBUG_UNBIND) ) {
-                if ( Constants.LOGVV ) {
-                    Log.d(Constants.TAG, "Service Unbound");
-                }
-            } else {
-                mBound = true;
-            }
-                
-        }
-
-        @Override
-        public void disconnect(Context c) {
-            if (mBound) {
-                c.unbindService(mConnection);
-                mBound = false;
-            }
-            mContext = null;
-        }
-
-        @Override
-        public Messenger getMessenger() {
-            return mMessenger;
-        }
-    }
-
-    /**
-     * Returns a proxy that will marshal calls to IDownloaderClient methods
-     * 
-     * @param msg
-     * @return
-     */
-    public static IDownloaderClient CreateProxy(Messenger msg) {
-        return new Proxy(msg);
-    }
-
-    /**
-     * Returns a stub object that, when connected, will listen for marshaled
-     * {@link IDownloaderClient} methods and translate them into calls to the supplied
-     * interface.
-     * 
-     * @param itf An implementation of IDownloaderClient that will be called
-     *            when remote method calls are unmarshaled.
-     * @param downloaderService The class for your implementation of {@link
-     * impl.DownloaderService}.
-     * @return The {@link IStub} that allows you to connect to the service such that
-     * your {@link IDownloaderClient} receives status updates.
-     */
-    public static IStub CreateStub(IDownloaderClient itf, Class<?> downloaderService) {
-        return new Stub(itf, downloaderService);
-    }
-    
-    /**
-     * Starts the download if necessary. This function starts a flow that does `
-     * many things. 1) Checks to see if the APK version has been checked and
-     * the metadata database updated 2) If the APK version does not match,
-     * checks the new LVL status to see if a new download is required 3) If the
-     * APK version does match, then checks to see if the download(s) have been
-     * completed 4) If the downloads have been completed, returns
-     * NO_DOWNLOAD_REQUIRED The idea is that this can be called during the
-     * startup of an application to quickly ascertain if the application needs
-     * to wait to hear about any updated APK expansion files. Note that this does
-     * mean that the application MUST be run for the first time with a network
-     * connection, even if Market delivers all of the files.
-     * 
-     * @param context Your application Context.
-     * @param notificationClient A PendingIntent to start the Activity in your application
-     * that shows the download progress and which will also start the application when download
-     * completes.
-     * @param serviceClass the class of your {@link imp.DownloaderService} implementation
-     * @return whether the service was started and the reason for starting the service.
-     * Either {@link #NO_DOWNLOAD_REQUIRED}, {@link #LVL_CHECK_REQUIRED}, or {@link
-     * #DOWNLOAD_REQUIRED}.
-     * @throws NameNotFoundException
-     */
-    public static int startDownloadServiceIfRequired(Context context, PendingIntent notificationClient, 
-            Class<?> serviceClass)
-            throws NameNotFoundException {
-        return DownloaderService.startDownloadServiceIfRequired(context, notificationClient,
-                serviceClass);
-    }
-    
-    /**
-     * This version assumes that the intent contains the pending intent as a parameter. This
-     * is used for responding to alarms.
-     * <p>The pending intent must be in an extra with the key {@link 
-     * impl.DownloaderService#EXTRA_PENDING_INTENT}.
-     * 
-     * @param context
-     * @param notificationClient
-     * @param serviceClass the class of the service to start
-     * @return
-     * @throws NameNotFoundException
-     */
-    public static int startDownloadServiceIfRequired(Context context, Intent notificationClient, 
-            Class<?> serviceClass)
-            throws NameNotFoundException {
-        return DownloaderService.startDownloadServiceIfRequired(context, notificationClient,
-                serviceClass);
-    }    
-
-}

+ 0 - 181
platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/DownloaderServiceMarshaller.java

@@ -1,181 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.google.android.vending.expansion.downloader;
-
-import com.google.android.vending.expansion.downloader.impl.DownloaderService;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Message;
-import android.os.Messenger;
-import android.os.RemoteException;
-
-
-
-/**
- * This class is used by the client activity to proxy requests to the Downloader
- * Service.
- *
- * Most importantly, you must call {@link #CreateProxy} during the {@link
- * IDownloaderClient#onServiceConnected} callback in your activity in order to instantiate
- * an {@link IDownloaderService} object that you can then use to issue commands to the {@link
- * DownloaderService} (such as to pause and resume downloads).
- */
-public class DownloaderServiceMarshaller {
-
-    public static final int MSG_REQUEST_ABORT_DOWNLOAD =
-            1;
-    public static final int MSG_REQUEST_PAUSE_DOWNLOAD =
-            2;
-    public static final int MSG_SET_DOWNLOAD_FLAGS =
-            3;
-    public static final int MSG_REQUEST_CONTINUE_DOWNLOAD =
-            4;
-    public static final int MSG_REQUEST_DOWNLOAD_STATE =
-            5;
-    public static final int MSG_REQUEST_CLIENT_UPDATE =
-            6;
-
-    public static final String PARAMS_FLAGS = "flags";
-    public static final String PARAM_MESSENGER = DownloaderService.EXTRA_MESSAGE_HANDLER;
-
-    private static class Proxy implements IDownloaderService {
-        private Messenger mMsg;
-
-        private void send(int method, Bundle params) {
-            Message m = Message.obtain(null, method);
-            m.setData(params);
-            try {
-                mMsg.send(m);
-            } catch (RemoteException e) {
-                e.printStackTrace();
-            }
-        }
-
-        public Proxy(Messenger msg) {
-            mMsg = msg;
-        }
-
-        @Override
-        public void requestAbortDownload() {
-            send(MSG_REQUEST_ABORT_DOWNLOAD, new Bundle());
-        }
-
-        @Override
-        public void requestPauseDownload() {
-            send(MSG_REQUEST_PAUSE_DOWNLOAD, new Bundle());
-        }
-
-        @Override
-        public void setDownloadFlags(int flags) {
-            Bundle params = new Bundle();
-            params.putInt(PARAMS_FLAGS, flags);
-            send(MSG_SET_DOWNLOAD_FLAGS, params);
-        }
-
-        @Override
-        public void requestContinueDownload() {
-            send(MSG_REQUEST_CONTINUE_DOWNLOAD, new Bundle());
-        }
-
-        @Override
-        public void requestDownloadStatus() {
-            send(MSG_REQUEST_DOWNLOAD_STATE, new Bundle());
-        }
-
-        @Override
-        public void onClientUpdated(Messenger clientMessenger) {
-            Bundle bundle = new Bundle(1);
-            bundle.putParcelable(PARAM_MESSENGER, clientMessenger);
-            send(MSG_REQUEST_CLIENT_UPDATE, bundle);
-        }
-    }
-
-    private static class Stub implements IStub {
-        private IDownloaderService mItf = null;
-        final Messenger mMessenger = new Messenger(new Handler() {
-            @Override
-            public void handleMessage(Message msg) {
-                switch (msg.what) {
-                    case MSG_REQUEST_ABORT_DOWNLOAD:
-                        mItf.requestAbortDownload();
-                        break;
-                    case MSG_REQUEST_CONTINUE_DOWNLOAD:
-                        mItf.requestContinueDownload();
-                        break;
-                    case MSG_REQUEST_PAUSE_DOWNLOAD:
-                        mItf.requestPauseDownload();
-                        break;
-                    case MSG_SET_DOWNLOAD_FLAGS:
-                        mItf.setDownloadFlags(msg.getData().getInt(PARAMS_FLAGS));
-                        break;
-                    case MSG_REQUEST_DOWNLOAD_STATE:
-                        mItf.requestDownloadStatus();
-                        break;
-                    case MSG_REQUEST_CLIENT_UPDATE:
-                        mItf.onClientUpdated((Messenger) msg.getData().getParcelable(
-                                PARAM_MESSENGER));
-                        break;
-                }
-            }
-        });
-
-        public Stub(IDownloaderService itf) {
-            mItf = itf;
-        }
-
-        @Override
-        public Messenger getMessenger() {
-            return mMessenger;
-        }
-
-        @Override
-        public void connect(Context c) {
-
-        }
-
-        @Override
-        public void disconnect(Context c) {
-
-        }
-    }
-
-    /**
-     * Returns a proxy that will marshall calls to IDownloaderService methods
-     * 
-     * @param ctx
-     * @return
-     */
-    public static IDownloaderService CreateProxy(Messenger msg) {
-        return new Proxy(msg);
-    }
-
-    /**
-     * Returns a stub object that, when connected, will listen for marshalled
-     * IDownloaderService methods and translate them into calls to the supplied
-     * interface.
-     * 
-     * @param itf An implementation of IDownloaderService that will be called
-     *            when remote method calls are unmarshalled.
-     * @return
-     */
-    public static IStub CreateStub(IDownloaderService itf) {
-        return new Stub(itf);
-    }
-
-}

+ 0 - 306
platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/Helpers.java

@@ -1,306 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.google.android.vending.expansion.downloader;
-
-import com.android.vending.expansion.downloader.R;
-
-import android.content.Context;
-import android.os.Environment;
-import android.os.StatFs;
-import android.os.SystemClock;
-import android.util.Log;
-
-import java.io.File;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-import java.util.Random;
-import java.util.TimeZone;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Some helper functions for the download manager
- */
-public class Helpers {
-
-    public static Random sRandom = new Random(SystemClock.uptimeMillis());
-
-    /** Regex used to parse content-disposition headers */
-    private static final Pattern CONTENT_DISPOSITION_PATTERN = Pattern
-            .compile("attachment;\\s*filename\\s*=\\s*\"([^\"]*)\"");
-
-    private Helpers() {
-    }
-
-    /*
-     * Parse the Content-Disposition HTTP Header. The format of the header is
-     * defined here: http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html This
-     * header provides a filename for content that is going to be downloaded to
-     * the file system. We only support the attachment type.
-     */
-    static String parseContentDisposition(String contentDisposition) {
-        try {
-            Matcher m = CONTENT_DISPOSITION_PATTERN.matcher(contentDisposition);
-            if (m.find()) {
-                return m.group(1);
-            }
-        } catch (IllegalStateException ex) {
-            // This function is defined as returning null when it can't parse
-            // the header
-        }
-        return null;
-    }
-
-    /**
-     * @return the root of the filesystem containing the given path
-     */
-    public static File getFilesystemRoot(String path) {
-        File cache = Environment.getDownloadCacheDirectory();
-        if (path.startsWith(cache.getPath())) {
-            return cache;
-        }
-        File external = Environment.getExternalStorageDirectory();
-        if (path.startsWith(external.getPath())) {
-            return external;
-        }
-        throw new IllegalArgumentException(
-                "Cannot determine filesystem root for " + path);
-    }
-
-    public static boolean isExternalMediaMounted() {
-        if (!Environment.getExternalStorageState().equals(
-                Environment.MEDIA_MOUNTED)) {
-            // No SD card found.
-            if ( Constants.LOGVV ) {
-                Log.d(Constants.TAG, "no external storage");
-            }
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * @return the number of bytes available on the filesystem rooted at the
-     *         given File
-     */
-    public static long getAvailableBytes(File root) {
-        StatFs stat = new StatFs(root.getPath());
-        // put a bit of margin (in case creating the file grows the system by a
-        // few blocks)
-        long availableBlocks = (long) stat.getAvailableBlocks() - 4;
-        return stat.getBlockSize() * availableBlocks;
-    }
-
-    /**
-     * Checks whether the filename looks legitimate
-     */
-    public static boolean isFilenameValid(String filename) {
-        filename = filename.replaceFirst("/+", "/"); // normalize leading
-                                                     // slashes
-        return filename.startsWith(Environment.getDownloadCacheDirectory().toString())
-                || filename.startsWith(Environment.getExternalStorageDirectory().toString());
-    }
-
-    /*
-     * Delete the given file from device
-     */
-    /* package */static void deleteFile(String path) {
-        try {
-            File file = new File(path);
-            file.delete();
-        } catch (Exception e) {
-            Log.w(Constants.TAG, "file: '" + path + "' couldn't be deleted", e);
-        }
-    }
-
-    /**
-     * Showing progress in MB here. It would be nice to choose the unit (KB, MB,
-     * GB) based on total file size, but given what we know about the expected
-     * ranges of file sizes for APK expansion files, it's probably not necessary.
-     * 
-     * @param overallProgress
-     * @param overallTotal
-     * @return
-     */
-
-    static public String getDownloadProgressString(long overallProgress, long overallTotal) {
-        if (overallTotal == 0) {
-            if ( Constants.LOGVV ) {
-                Log.e(Constants.TAG, "Notification called when total is zero");
-            }
-            return "";
-        }
-        return String.format("%.2f",
-                (float) overallProgress / (1024.0f * 1024.0f))
-                + "MB /" +
-                String.format("%.2f", (float) overallTotal /
-                        (1024.0f * 1024.0f)) + "MB";
-    }
-
-    /**
-     * Adds a percentile to getDownloadProgressString.
-     * 
-     * @param overallProgress
-     * @param overallTotal
-     * @return
-     */
-    static public String getDownloadProgressStringNotification(long overallProgress,
-            long overallTotal) {
-        if (overallTotal == 0) {
-            if ( Constants.LOGVV ) {
-                Log.e(Constants.TAG, "Notification called when total is zero");
-            }
-            return "";
-        }
-        return getDownloadProgressString(overallProgress, overallTotal) + " (" +
-                getDownloadProgressPercent(overallProgress, overallTotal) + ")";
-    }
-
-    public static String getDownloadProgressPercent(long overallProgress, long overallTotal) {
-        if (overallTotal == 0) {
-            if ( Constants.LOGVV ) {
-                Log.e(Constants.TAG, "Notification called when total is zero");
-            }
-            return "";
-        }
-        return Long.toString(overallProgress * 100 / overallTotal) + "%";
-    }
-
-    public static String getSpeedString(float bytesPerMillisecond) {
-        return String.format("%.2f", bytesPerMillisecond * 1000 / 1024);
-    }
-
-    public static String getTimeRemaining(long durationInMilliseconds) {
-        SimpleDateFormat sdf;
-        if (durationInMilliseconds > 1000 * 60 * 60) {
-            sdf = new SimpleDateFormat("HH:mm", Locale.getDefault());
-        } else {
-            sdf = new SimpleDateFormat("mm:ss", Locale.getDefault());
-        }
-        return sdf.format(new Date(durationInMilliseconds - TimeZone.getDefault().getRawOffset()));
-    }
-
-    /**
-     * Returns the file name (without full path) for an Expansion APK file from
-     * the given context.
-     * 
-     * @param c the context
-     * @param mainFile true for main file, false for patch file
-     * @param versionCode the version of the file
-     * @return String the file name of the expansion file
-     */
-    public static String getExpansionAPKFileName(Context c, boolean mainFile, int versionCode) {
-        return (mainFile ? "main." : "patch.") + versionCode + "." + c.getPackageName() + ".obb";
-    }
-
-    /**
-     * Returns the filename (where the file should be saved) from info about a
-     * download
-     */
-    static public String generateSaveFileName(Context c, String fileName) {
-        String path = getSaveFilePath(c)
-                + File.separator + fileName;
-        return path;
-    }
-
-    static public String getSaveFilePath(Context c) {
-        File root = Environment.getExternalStorageDirectory();
-        String path = root.toString() + Constants.EXP_PATH + c.getPackageName();
-        return path;
-    }
-
-    /**
-     * Helper function to ascertain the existence of a file and return
-     * true/false appropriately
-     * 
-     * @param c the app/activity/service context
-     * @param fileName the name (sans path) of the file to query
-     * @param fileSize the size that the file must match
-     * @param deleteFileOnMismatch if the file sizes do not match, delete the
-     *            file
-     * @return true if it does exist, false otherwise
-     */
-    static public boolean doesFileExist(Context c, String fileName, long fileSize,
-            boolean deleteFileOnMismatch) {
-        // the file may have been delivered by Market --- let's make sure
-        // it's the size we expect
-        File fileForNewFile = new File(Helpers.generateSaveFileName(c, fileName));
-        if (fileForNewFile.exists()) {
-            if (fileForNewFile.length() == fileSize) {
-                return true;
-            }
-            if (deleteFileOnMismatch) {
-                // delete the file --- we won't be able to resume
-                // because we cannot confirm the integrity of the file
-                fileForNewFile.delete();
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Converts download states that are returned by the {@link 
-     * IDownloaderClient#onDownloadStateChanged} callback into usable strings.
-     * This is useful if using the state strings built into the library to display user messages.
-     * @param state One of the STATE_* constants from {@link IDownloaderClient}.
-     * @return string resource ID for the corresponding string.
-     */
-    static public int getDownloaderStringResourceIDFromState(int state) {
-        switch (state) {
-            case IDownloaderClient.STATE_IDLE:
-                return R.string.state_idle;
-            case IDownloaderClient.STATE_FETCHING_URL:
-                return R.string.state_fetching_url;
-            case IDownloaderClient.STATE_CONNECTING:
-                return R.string.state_connecting;
-            case IDownloaderClient.STATE_DOWNLOADING:
-                return R.string.state_downloading;
-            case IDownloaderClient.STATE_COMPLETED:
-                return R.string.state_completed;
-            case IDownloaderClient.STATE_PAUSED_NETWORK_UNAVAILABLE:
-                return R.string.state_paused_network_unavailable;
-            case IDownloaderClient.STATE_PAUSED_BY_REQUEST:
-                return R.string.state_paused_by_request;
-            case IDownloaderClient.STATE_PAUSED_WIFI_DISABLED_NEED_CELLULAR_PERMISSION:
-                return R.string.state_paused_wifi_disabled;
-            case IDownloaderClient.STATE_PAUSED_NEED_CELLULAR_PERMISSION:
-                return R.string.state_paused_wifi_unavailable;
-            case IDownloaderClient.STATE_PAUSED_WIFI_DISABLED:
-                return R.string.state_paused_wifi_disabled;
-            case IDownloaderClient.STATE_PAUSED_NEED_WIFI:
-                return R.string.state_paused_wifi_unavailable;
-            case IDownloaderClient.STATE_PAUSED_ROAMING:
-                return R.string.state_paused_roaming;
-            case IDownloaderClient.STATE_PAUSED_NETWORK_SETUP_FAILURE:
-                return R.string.state_paused_network_setup_failure;
-            case IDownloaderClient.STATE_PAUSED_SDCARD_UNAVAILABLE:
-                return R.string.state_paused_sdcard_unavailable;
-            case IDownloaderClient.STATE_FAILED_UNLICENSED:
-                return R.string.state_failed_unlicensed;
-            case IDownloaderClient.STATE_FAILED_FETCHING_URL:
-                return R.string.state_failed_fetching_url;
-            case IDownloaderClient.STATE_FAILED_SDCARD_FULL:
-                return R.string.state_failed_sdcard_full;
-            case IDownloaderClient.STATE_FAILED_CANCELED:
-                return R.string.state_failed_cancelled;
-            default:
-                return R.string.state_unknown;
-        }
-    }
-
-}

+ 0 - 126
platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/IDownloaderClient.java

@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.google.android.vending.expansion.downloader;
-
-import android.os.Messenger;
-
-/**
- * This interface should be implemented by the client activity for the
- * downloader. It is used to pass status from the service to the client.
- */
-public interface IDownloaderClient {
-    static final int STATE_IDLE = 1;
-    static final int STATE_FETCHING_URL = 2;
-    static final int STATE_CONNECTING = 3;
-    static final int STATE_DOWNLOADING = 4;
-    static final int STATE_COMPLETED = 5;
-
-    static final int STATE_PAUSED_NETWORK_UNAVAILABLE = 6;
-    static final int STATE_PAUSED_BY_REQUEST = 7;
-
-    /**
-     * Both STATE_PAUSED_WIFI_DISABLED_NEED_CELLULAR_PERMISSION and
-     * STATE_PAUSED_NEED_CELLULAR_PERMISSION imply that Wi-Fi is unavailable and
-     * cellular permission will restart the service. Wi-Fi disabled means that
-     * the Wi-Fi manager is returning that Wi-Fi is not enabled, while in the
-     * other case Wi-Fi is enabled but not available.
-     */
-    static final int STATE_PAUSED_WIFI_DISABLED_NEED_CELLULAR_PERMISSION = 8;
-    static final int STATE_PAUSED_NEED_CELLULAR_PERMISSION = 9;
-
-    /**
-     * Both STATE_PAUSED_WIFI_DISABLED and STATE_PAUSED_NEED_WIFI imply that
-     * Wi-Fi is unavailable and cellular permission will NOT restart the
-     * service. Wi-Fi disabled means that the Wi-Fi manager is returning that
-     * Wi-Fi is not enabled, while in the other case Wi-Fi is enabled but not
-     * available.
-     * <p>
-     * The service does not return these values. We recommend that app
-     * developers with very large payloads do not allow these payloads to be
-     * downloaded over cellular connections.
-     */
-    static final int STATE_PAUSED_WIFI_DISABLED = 10;
-    static final int STATE_PAUSED_NEED_WIFI = 11;
-
-    static final int STATE_PAUSED_ROAMING = 12;
-
-    /**
-     * Scary case. We were on a network that redirected us to another website
-     * that delivered us the wrong file.
-     */
-    static final int STATE_PAUSED_NETWORK_SETUP_FAILURE = 13;
-
-    static final int STATE_PAUSED_SDCARD_UNAVAILABLE = 14;
-
-    static final int STATE_FAILED_UNLICENSED = 15;
-    static final int STATE_FAILED_FETCHING_URL = 16;
-    static final int STATE_FAILED_SDCARD_FULL = 17;
-    static final int STATE_FAILED_CANCELED = 18;
-
-    static final int STATE_FAILED = 19;
-
-    /**
-     * Called internally by the stub when the service is bound to the client.
-     * <p>
-     * Critical implementation detail. In onServiceConnected we create the
-     * remote service and marshaler. This is how we pass the client information
-     * back to the service so the client can be properly notified of changes. We
-     * must do this every time we reconnect to the service.
-     * <p>
-     * That is, when you receive this callback, you should call
-     * {@link DownloaderServiceMarshaller#CreateProxy} to instantiate a member
-     * instance of {@link IDownloaderService}, then call
-     * {@link IDownloaderService#onClientUpdated} with the Messenger retrieved
-     * from your {@link IStub} proxy object.
-     * 
-     * @param m the service Messenger. This Messenger is used to call the
-     *            service API from the client.
-     */
-    void onServiceConnected(Messenger m);
-
-    /**
-     * Called when the download state changes. Depending on the state, there may
-     * be user requests. The service is free to change the download state in the
-     * middle of a user request, so the client should be able to handle this.
-     * <p>
-     * The Downloader Library includes a collection of string resources that
-     * correspond to each of the states, which you can use to provide users a
-     * useful message based on the state provided in this callback. To fetch the
-     * appropriate string for a state, call
-     * {@link Helpers#getDownloaderStringResourceIDFromState}.
-     * <p>
-     * What this means to the developer: The application has gotten a message
-     * that the download has paused due to lack of WiFi. The developer should
-     * then show UI asking the user if they want to enable downloading over
-     * cellular connections with appropriate warnings. If the application
-     * suddenly starts downloading, the application should revert to showing the
-     * progress again, rather than leaving up the download over cellular UI up.
-     * 
-     * @param newState one of the STATE_* values defined in IDownloaderClient
-     */
-    void onDownloadStateChanged(int newState);
-
-    /**
-     * Shows the download progress. This is intended to be used to fill out a
-     * client UI. This progress should only be shown in a few states such as
-     * STATE_DOWNLOADING.
-     * 
-     * @param progress the DownloadProgressInfo object containing the current
-     *            progress of all downloads.
-     */
-    void onDownloadProgress(DownloadProgressInfo progress);
-}

+ 0 - 83
platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/IDownloaderService.java

@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.google.android.vending.expansion.downloader;
-
-import com.google.android.vending.expansion.downloader.impl.DownloaderService;
-import android.os.Messenger;
-
-/**
- * This interface is implemented by the DownloaderService and by the
- * DownloaderServiceMarshaller. It contains functions to control the service.
- * When a client binds to the service, it must call the onClientUpdated
- * function.
- * <p>
- * You can acquire a proxy that implements this interface for your service by
- * calling {@link DownloaderServiceMarshaller#CreateProxy} during the
- * {@link IDownloaderClient#onServiceConnected} callback. At which point, you
- * should immediately call {@link #onClientUpdated}.
- */
-public interface IDownloaderService {
-    /**
-     * Set this flag in response to the
-     * IDownloaderClient.STATE_PAUSED_NEED_CELLULAR_PERMISSION state and then
-     * call RequestContinueDownload to resume a download
-     */
-    public static final int FLAGS_DOWNLOAD_OVER_CELLULAR = 1;
-
-    /**
-     * Request that the service abort the current download. The service should
-     * respond by changing the state to {@link IDownloaderClient.STATE_ABORTED}.
-     */
-    void requestAbortDownload();
-
-    /**
-     * Request that the service pause the current download. The service should
-     * respond by changing the state to
-     * {@link IDownloaderClient.STATE_PAUSED_BY_REQUEST}.
-     */
-    void requestPauseDownload();
-
-    /**
-     * Request that the service continue a paused download, when in any paused
-     * or failed state, including
-     * {@link IDownloaderClient.STATE_PAUSED_BY_REQUEST}.
-     */
-    void requestContinueDownload();
-
-    /**
-     * Set the flags for this download (e.g.
-     * {@link DownloaderService.FLAGS_DOWNLOAD_OVER_CELLULAR}).
-     * 
-     * @param flags
-     */
-    void setDownloadFlags(int flags);
-
-    /**
-     * Requests that the download status be sent to the client.
-     */
-    void requestDownloadStatus();
-
-    /**
-     * Call this when you get {@link
-     * IDownloaderClient.onServiceConnected(Messenger m)} from the
-     * DownloaderClient to register the client with the service. It will
-     * automatically send the current status to the client.
-     * 
-     * @param clientMessenger
-     */
-    void onClientUpdated(Messenger clientMessenger);
-}

+ 0 - 41
platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/IStub.java

@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.google.android.vending.expansion.downloader;
-
-import android.content.Context;
-import android.os.Messenger;
-
-/**
- * This is the interface that is used to connect/disconnect from the downloader
- * service.
- * <p>
- * You should get a proxy object that implements this interface by calling
- * {@link DownloaderClientMarshaller#CreateStub} in your activity when the
- * downloader service starts. Then, call {@link #connect} during your activity's
- * onResume() and call {@link #disconnect} during onStop().
- * <p>
- * Then during the {@link IDownloaderClient#onServiceConnected} callback, you
- * should call {@link #getMessenger} to pass the stub's Messenger object to
- * {@link IDownloaderService#onClientUpdated}.
- */
-public interface IStub {
-    Messenger getMessenger();
-
-    void connect(Context c);
-
-    void disconnect(Context c);
-}

+ 0 - 123
platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/SystemFacade.java

@@ -1,123 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.google.android.vending.expansion.downloader;
-
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.telephony.TelephonyManager;
-import android.util.Log;
-
-/**
- * Contains useful helper functions, typically tied to the application context.
- */
-class SystemFacade {
-    private Context mContext;
-    private NotificationManager mNotificationManager;
-
-    public SystemFacade(Context context) {
-        mContext = context;
-        mNotificationManager = (NotificationManager)
-                mContext.getSystemService(Context.NOTIFICATION_SERVICE);
-    }
-
-    public long currentTimeMillis() {
-        return System.currentTimeMillis();
-    }
-
-    public Integer getActiveNetworkType() {
-        ConnectivityManager connectivity =
-                (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
-        if (connectivity == null) {
-            Log.w(Constants.TAG, "couldn't get connectivity manager");
-            return null;
-        }
-
-        NetworkInfo activeInfo = connectivity.getActiveNetworkInfo();
-        if (activeInfo == null) {
-            if (Constants.LOGVV) {
-                Log.v(Constants.TAG, "network is not available");
-            }
-            return null;
-        }
-        return activeInfo.getType();
-    }
-
-    public boolean isNetworkRoaming() {
-        ConnectivityManager connectivity =
-                (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
-        if (connectivity == null) {
-            Log.w(Constants.TAG, "couldn't get connectivity manager");
-            return false;
-        }
-
-        NetworkInfo info = connectivity.getActiveNetworkInfo();
-        boolean isMobile = (info != null && info.getType() == ConnectivityManager.TYPE_MOBILE);
-        TelephonyManager tm = (TelephonyManager) mContext
-                .getSystemService(Context.TELEPHONY_SERVICE);
-        if (null == tm) {
-            Log.w(Constants.TAG, "couldn't get telephony manager");
-            return false;
-        }
-        boolean isRoaming = isMobile && tm.isNetworkRoaming();
-        if (Constants.LOGVV && isRoaming) {
-            Log.v(Constants.TAG, "network is roaming");
-        }
-        return isRoaming;
-    }
-
-    public Long getMaxBytesOverMobile() {
-        return (long) Integer.MAX_VALUE;
-    }
-
-    public Long getRecommendedMaxBytesOverMobile() {
-        return 2097152L;
-    }
-
-    public void sendBroadcast(Intent intent) {
-        mContext.sendBroadcast(intent);
-    }
-
-    public boolean userOwnsPackage(int uid, String packageName) throws NameNotFoundException {
-        return mContext.getPackageManager().getApplicationInfo(packageName, 0).uid == uid;
-    }
-
-    public void postNotification(long id, Notification notification) {
-        /**
-         * TODO: The system notification manager takes ints, not longs, as IDs,
-         * but the download manager uses IDs take straight from the database,
-         * which are longs. This will have to be dealt with at some point.
-         */
-        mNotificationManager.notify((int) id, notification);
-    }
-
-    public void cancelNotification(long id) {
-        mNotificationManager.cancel((int) id);
-    }
-
-    public void cancelAllNotifications() {
-        mNotificationManager.cancelAll();
-    }
-
-    public void startThread(Thread thread) {
-        thread.start();
-    }
-}

+ 0 - 536
platform/android/libs/downloader_library/src/com/google/android/vending/expansion/downloader/impl/AndroidHttpClient.java

@@ -1,536 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * 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.
- */
-
-/*
- * This is a port of AndroidHttpClient to pre-Froyo devices, that takes advantage of
- * the SSLSessionCache added Froyo devices using reflection.
- */
-
-package com.google.android.vending.expansion.downloader.impl;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.net.URI;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-import org.apache.http.Header;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpEntityEnclosingRequest;
-import org.apache.http.HttpException;
-import org.apache.http.HttpHost;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpRequestInterceptor;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.ClientProtocolException;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.ResponseHandler;
-import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.params.HttpClientParams;
-import org.apache.http.client.protocol.ClientContext;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.scheme.PlainSocketFactory;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
-import org.apache.http.conn.scheme.SocketFactory;
-import org.apache.http.conn.ssl.SSLSocketFactory;
-import org.apache.http.entity.AbstractHttpEntity;
-import org.apache.http.entity.ByteArrayEntity;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.impl.client.RequestWrapper;
-import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
-import org.apache.http.params.BasicHttpParams;
-import org.apache.http.params.HttpConnectionParams;
-import org.apache.http.params.HttpParams;
-import org.apache.http.params.HttpProtocolParams;
-import org.apache.http.protocol.BasicHttpContext;
-import org.apache.http.protocol.BasicHttpProcessor;
-import org.apache.http.protocol.HttpContext;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.net.SSLCertificateSocketFactory;
-import android.os.Looper;
-import android.util.Log;
-
-/**
- * Subclass of the Apache {@link DefaultHttpClient} that is configured with
- * reasonable default settings and registered schemes for Android, and
- * also lets the user add {@link HttpRequestInterceptor} classes.
- * Don't create this directly, use the {@link #newInstance} factory method.
- *
- * <p>This client processes cookies but does not retain them by default.
- * To retain cookies, simply add a cookie store to the HttpContext:</p>
- *
- * <pre>context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);</pre>
- */
-public final class AndroidHttpClient implements HttpClient {
-
-	static Class<?> sSslSessionCacheClass;
-	static {
-		// if we are on Froyo+ devices, we can take advantage of the SSLSessionCache
-		try {
-			sSslSessionCacheClass = Class.forName("android.net.SSLSessionCache");
-		} catch (Exception e) {
-			
-		}
-	}
-	
-    // Gzip of data shorter than this probably won't be worthwhile
-    public static long DEFAULT_SYNC_MIN_GZIP_BYTES = 256;
-
-    // Default connection and socket timeout of 60 seconds.  Tweak to taste.
-    private static final int SOCKET_OPERATION_TIMEOUT = 60 * 1000;
-
-    private static final String TAG = "AndroidHttpClient";
-
-
-    /** Interceptor throws an exception if the executing thread is blocked */
-    private static final HttpRequestInterceptor sThreadCheckInterceptor =
-            new HttpRequestInterceptor() {
-        public void process(HttpRequest request, HttpContext context) {
-            // Prevent the HttpRequest from being sent on the main thread
-            if (Looper.myLooper() != null && Looper.myLooper() == Looper.getMainLooper() ) {
-                throw new RuntimeException("This thread forbids HTTP requests");
-            }
-        }
-    };
-
-    /**
-     * Create a new HttpClient with reasonable defaults (which you can update).
-     *
-     * @param userAgent to report in your HTTP requests
-     * @param context to use for caching SSL sessions (may be null for no caching)
-     * @return AndroidHttpClient for you to use for all your requests.
-     */
-    public static AndroidHttpClient newInstance(String userAgent, Context context) {
-        HttpParams params = new BasicHttpParams();
-
-        // Turn off stale checking.  Our connections break all the time anyway,
-        // and it's not worth it to pay the penalty of checking every time.
-        HttpConnectionParams.setStaleCheckingEnabled(params, false);
-
-        HttpConnectionParams.setConnectionTimeout(params, SOCKET_OPERATION_TIMEOUT);
-        HttpConnectionParams.setSoTimeout(params, SOCKET_OPERATION_TIMEOUT);
-        HttpConnectionParams.setSocketBufferSize(params, 8192);
-
-        // Don't handle redirects -- return them to the caller.  Our code
-        // often wants to re-POST after a redirect, which we must do ourselves.
-        HttpClientParams.setRedirecting(params, false);
-
-        Object sessionCache = null;
-        // Use a session cache for SSL sockets -- Froyo only
-        if ( null != context && null != sSslSessionCacheClass ) {
-             Constructor<?> ct;
-			try {
-				ct = sSslSessionCacheClass.getConstructor(Context.class);
-				sessionCache = ct.newInstance(context);             
-			} catch (SecurityException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			} catch (NoSuchMethodException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			} catch (IllegalArgumentException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			} catch (InstantiationException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			} catch (IllegalAccessException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			} catch (InvocationTargetException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-        }
-
-        // Set the specified user agent and register standard protocols.
-        HttpProtocolParams.setUserAgent(params, userAgent);
-        SchemeRegistry schemeRegistry = new SchemeRegistry();
-        schemeRegistry.register(new Scheme("http",
-                PlainSocketFactory.getSocketFactory(), 80));
-        SocketFactory sslCertificateSocketFactory = null;
-        if ( null != sessionCache ) {
-        	Method getHttpSocketFactoryMethod;
-			try {
-				getHttpSocketFactoryMethod = SSLCertificateSocketFactory.class.getDeclaredMethod("getHttpSocketFactory",Integer.TYPE, sSslSessionCacheClass);
-	        	sslCertificateSocketFactory = (SocketFactory)getHttpSocketFactoryMethod.invoke(null, SOCKET_OPERATION_TIMEOUT, sessionCache);
-			} catch (SecurityException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			} catch (NoSuchMethodException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			} catch (IllegalArgumentException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			} catch (IllegalAccessException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			} catch (InvocationTargetException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-        }
-        if ( null == sslCertificateSocketFactory ) {
-        	sslCertificateSocketFactory = SSLSocketFactory.getSocketFactory();
-        }
-        schemeRegistry.register(new Scheme("https",
-                sslCertificateSocketFactory, 443));
-
-        ClientConnectionManager manager =
-                new ThreadSafeClientConnManager(params, schemeRegistry);
-
-        // We use a factory method to modify superclass initialization
-        // parameters without the funny call-a-static-method dance.
-        return new AndroidHttpClient(manager, params);
-    }
-
-    /**
-     * Create a new HttpClient with reasonable defaults (which you can update).
-     * @param userAgent to report in your HTTP requests.
-     * @return AndroidHttpClient for you to use for all your requests.
-     */
-    public static AndroidHttpClient newInstance(String userAgent) {
-        return newInstance(userAgent, null /* session cache */);
-    }
-
-    private final HttpClient delegate;
-
-    private RuntimeException mLeakedException = new IllegalStateException(
-            "AndroidHttpClient created and never closed");
-
-    private AndroidHttpClient(ClientConnectionManager ccm, HttpParams params) {
-        this.delegate = new DefaultHttpClient(ccm, params) {
-            @Override
-            protected BasicHttpProcessor createHttpProcessor() {
-                // Add interceptor to prevent making requests from main thread.
-                BasicHttpProcessor processor = super.createHttpProcessor();
-                processor.addRequestInterceptor(sThreadCheckInterceptor);
-                processor.addRequestInterceptor(new CurlLogger());
-
-                return processor;
-            }
-
-            @Override
-            protected HttpContext createHttpContext() {
-                // Same as DefaultHttpClient.createHttpContext() minus the
-                // cookie store.
-                HttpContext context = new BasicHttpContext();
-                context.setAttribute(
-                        ClientContext.AUTHSCHEME_REGISTRY,
-                        getAuthSchemes());
-                context.setAttribute(
-                        ClientContext.COOKIESPEC_REGISTRY,
-                        getCookieSpecs());
-                context.setAttribute(
-                        ClientContext.CREDS_PROVIDER,
-                        getCredentialsProvider());
-                return context;
-            }
-        };
-    }
-
-    @Override
-    protected void finalize() throws Throwable {
-        super.finalize();
-        if (mLeakedException != null) {
-            Log.e(TAG, "Leak found", mLeakedException);
-            mLeakedException = null;
-        }
-    }
-
-    /**
-     * Modifies a request to indicate to the server that we would like a
-     * gzipped response.  (Uses the "Accept-Encoding" HTTP header.)
-     * @param request the request to modify
-     * @see #getUngzippedContent
-     */
-    public static void modifyRequestToAcceptGzipResponse(HttpRequest request) {
-        request.addHeader("Accept-Encoding", "gzip");
-    }
-
-    /**
-     * Gets the input stream from a response entity.  If the entity is gzipped
-     * then this will get a stream over the uncompressed data.
-     *
-     * @param entity the entity whose content should be read
-     * @return the input stream to read from
-     * @throws IOException
-     */
-    public static InputStream getUngzippedContent(HttpEntity entity)
-            throws IOException {
-        InputStream responseStream = entity.getContent();
-        if (responseStream == null) return responseStream;
-        Header header = entity.getContentEncoding();
-        if (header == null) return responseStream;
-        String contentEncoding = header.getValue();
-        if (contentEncoding == null) return responseStream;
-        if (contentEncoding.contains("gzip")) responseStream
-                = new GZIPInputStream(responseStream);
-        return responseStream;
-    }
-
-    /**
-     * Release resources associated with this client.  You must call this,
-     * or significant resources (sockets and memory) may be leaked.
-     */
-    public void close() {
-        if (mLeakedException != null) {
-            getConnectionManager().shutdown();
-            mLeakedException = null;
-        }
-    }
-
-    public HttpParams getParams() {
-        return delegate.getParams();
-    }
-
-    public ClientConnectionManager getConnectionManager() {
-        return delegate.getConnectionManager();
-    }
-
-    public HttpResponse execute(HttpUriRequest request) throws IOException {
-        return delegate.execute(request);
-    }
-
-    public HttpResponse execute(HttpUriRequest request, HttpContext context)
-            throws IOException {
-        return delegate.execute(request, context);
-    }
-
-    public HttpResponse execute(HttpHost target, HttpRequest request)
-            throws IOException {
-        return delegate.execute(target, request);
-    }
-
-    public HttpResponse execute(HttpHost target, HttpRequest request,
-            HttpContext context) throws IOException {
-        return delegate.execute(target, request, context);
-    }
-
-    public <T> T execute(HttpUriRequest request,
-            ResponseHandler<? extends T> responseHandler)
-            throws IOException, ClientProtocolException {
-        return delegate.execute(request, responseHandler);
-    }
-
-    public <T> T execute(HttpUriRequest request,
-            ResponseHandler<? extends T> responseHandler, HttpContext context)
-            throws IOException, ClientProtocolException {
-        return delegate.execute(request, responseHandler, context);
-    }
-
-    public <T> T execute(HttpHost target, HttpRequest request,
-            ResponseHandler<? extends T> responseHandler) throws IOException,
-            ClientProtocolException {
-        return delegate.execute(target, request, responseHandler);
-    }
-
-    public <T> T execute(HttpHost target, HttpRequest request,
-            ResponseHandler<? extends T> responseHandler, HttpContext context)
-            throws IOException, ClientProtocolException {
-        return delegate.execute(target, request, responseHandler, context);
-    }
-
-    /**
-     * Compress data to send to server.
-     * Creates a Http Entity holding the gzipped data.
-     * The data will not be compressed if it is too short.
-     * @param data The bytes to compress
-     * @return Entity holding the data
-     */
-    public static AbstractHttpEntity getCompressedEntity(byte data[], ContentResolver resolver)
-            throws IOException {
-        AbstractHttpEntity entity;
-        if (data.length < getMinGzipSize(resolver)) {
-            entity = new ByteArrayEntity(data);
-        } else {
-            ByteArrayOutputStream arr = new ByteArrayOutputStream();
-            OutputStream zipper = new GZIPOutputStream(arr);
-            zipper.write(data);
-            zipper.close();
-            entity = new ByteArrayEntity(arr.toByteArray());
-            entity.setContentEncoding("gzip");
-        }
-        return entity;
-    }
-
-    /**
-     * Retrieves the minimum size for compressing data.
-     * Shorter data will not be compressed.
-     */
-    public static long getMinGzipSize(ContentResolver resolver) {
-        return DEFAULT_SYNC_MIN_GZIP_BYTES;  // For now, this is just a constant.
-    }
-
-    /* cURL logging support. */
-
-    /**
-     * Logging tag and level.
-     */
-    private static class LoggingConfiguration {
-
-        private final String tag;
-        private final int level;
-
-        private LoggingConfiguration(String tag, int level) {
-            this.tag = tag;
-            this.level = level;
-        }
-
-        /**
-         * Returns true if logging is turned on for this configuration.
-         */
-        private boolean isLoggable() {
-            return Log.isLoggable(tag, level);
-        }
-
-        /**
-         * Prints a message using this configuration.
-         */
-        private void println(String message) {
-            Log.println(level, tag, message);
-        }
-    }
-
-    /** cURL logging configuration. */
-    private volatile LoggingConfiguration curlConfiguration;
-
-    /**
-     * Enables cURL request logging for this client.
-     *
-     * @param name to log messages with
-     * @param level at which to log messages (see {@link android.util.Log})
-     */
-    public void enableCurlLogging(String name, int level) {
-        if (name == null) {
-            throw new NullPointerException("name");
-        }
-        if (level < Log.VERBOSE || level > Log.ASSERT) {
-            throw new IllegalArgumentException("Level is out of range ["
-                + Log.VERBOSE + ".." + Log.ASSERT + "]");
-        }
-
-        curlConfiguration = new LoggingConfiguration(name, level);
-    }
-
-    /**
-     * Disables cURL logging for this client.
-     */
-    public void disableCurlLogging() {
-        curlConfiguration = null;
-    }
-
-    /**
-     * Logs cURL commands equivalent to requests.
-     */
-    private class CurlLogger implements HttpRequestInterceptor {
-        public void process(HttpRequest request, HttpContext context)
-                throws HttpException, IOException {
-            LoggingConfiguration configuration = curlConfiguration;
-            if (configuration != null
-                    && configuration.isLoggable()
-                    && request instanceof HttpUriRequest) {
-                // Never print auth token -- we used to check ro.secure=0 to
-                // enable that, but can't do that in unbundled code.
-                configuration.println(toCurl((HttpUriRequest) request, false));
-            }
-        }
-    }
-
-    /**
-     * Generates a cURL command equivalent to the given request.
-     */
-    private static String toCurl(HttpUriRequest request, boolean logAuthToken) throws IOException {
-        StringBuilder builder = new StringBuilder();
-
-        builder.append("curl ");
-
-        for (Header header: request.getAllHeaders()) {
-            if (!logAuthToken
-                    && (header.getName().equals("Authorization") ||
-                        header.getName().equals("Cookie"))) {
-                continue;
-            }
-            builder.append("--header \"");
-            builder.append(header.toString().trim());
-            builder.append("\" ");
-        }
-
-        URI uri = request.getURI();
-
-        // If this is a wrapped request, use the URI from the original
-        // request instead. getURI() on the wrapper seems to return a
-        // relative URI. We want an absolute URI.
-        if (request instanceof RequestWrapper) {
-            HttpRequest original = ((RequestWrapper) request).getOriginal();
-            if (original instanceof HttpUriRequest) {
-                uri = ((HttpUriRequest) original).getURI();
-            }
-        }
-
-        builder.append("\"");
-        builder.append(uri);
-        builder.append("\"");
-
-        if (request instanceof HttpEntityEnclosingRequest) {
-            HttpEntityEnclosingRequest entityRequest =
-                    (HttpEntityEnclosingRequest) request;
-            HttpEntity entity = entityRequest.getEntity();
-            if (entity != null && entity.isRepeatable()) {
-                if (entity.getContentLength() < 1024) {
-                    ByteArrayOutputStream stream = new ByteArrayOutputStream();
-                    entity.writeTo(stream);
-                    String entityString = stream.toString();
-
-                    // TODO: Check the content type, too.
-                    builder.append(" --data-ascii \"")
-                            .append(entityString)
-                            .append("\"");
-                } else {
-                    builder.append(" [TOO MUCH DATA TO INCLUDE]");
-                }
-            }
-        }
-
-        return builder.toString();
-    }
-
-    /**
-     * Returns the date of the given HTTP date string. This method can identify
-     * and parse the date formats emitted by common HTTP servers, such as
-     * <a href="http://www.ietf.org/rfc/rfc0822.txt">RFC 822</a>,
-     * <a href="http://www.ietf.org/rfc/rfc0850.txt">RFC 850</a>,
-     * <a href="http://www.ietf.org/rfc/rfc1036.txt">RFC 1036</a>,
-     * <a href="http://www.ietf.org/rfc/rfc1123.txt">RFC 1123</a> and
-     * <a href="http://www.opengroup.org/onlinepubs/007908799/xsh/asctime.html">ANSI
-     * C's asctime()</a>.
-     *
-     * @return the number of milliseconds since Jan. 1, 1970, midnight GMT.
-     * @throws IllegalArgumentException if {@code dateString} is not a date or
-     *     of an unsupported format.
-     */
-    public static long parseDate(String dateString) {
-        return HttpDateTime.parse(dateString);
-    }
-}

Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott