diff options
Diffstat (limited to 'platform/android/java')
25 files changed, 1419 insertions, 1510 deletions
| diff --git a/platform/android/java/src/org/godotengine/godot/Dictionary.java b/platform/android/java/src/org/godotengine/godot/Dictionary.java index ed91fedd85..2bc9c083aa 100644 --- a/platform/android/java/src/org/godotengine/godot/Dictionary.java +++ b/platform/android/java/src/org/godotengine/godot/Dictionary.java @@ -32,7 +32,6 @@ package org.godotengine.godot;  import java.util.HashMap;  import java.util.Set; -  public class Dictionary extends HashMap<String, Object> {  	protected String[] keys_cache; @@ -40,7 +39,7 @@ public class Dictionary extends HashMap<String, Object> {  	public String[] get_keys() {  		String[] ret = new String[size()]; -		int i=0; +		int i = 0;  		Set<String> keys = keySet();  		for (String key : keys) { @@ -54,7 +53,7 @@ public class Dictionary extends HashMap<String, Object> {  	public Object[] get_values() {  		Object[] ret = new Object[size()]; -		int i=0; +		int i = 0;  		Set<String> keys = keySet();  		for (String key : keys) { @@ -71,7 +70,7 @@ public class Dictionary extends HashMap<String, Object> {  	public void set_values(Object[] vals) { -		int i=0; +		int i = 0;  		for (String key : keys_cache) {  			put(key, vals[i]);  			i++; diff --git a/platform/android/java/src/org/godotengine/godot/Godot.java b/platform/android/java/src/org/godotengine/godot/Godot.java index 4daf06142d..3939ceb2e7 100644 --- a/platform/android/java/src/org/godotengine/godot/Godot.java +++ b/platform/android/java/src/org/godotengine/godot/Godot.java @@ -90,35 +90,34 @@ import android.os.Bundle;  import android.os.Messenger;  import android.os.SystemClock; - -public class Godot extends Activity implements SensorEventListener, IDownloaderClient -{ +public class Godot extends Activity implements SensorEventListener, IDownloaderClient {  	static final int MAX_SINGLETONS = 64;  	private IStub mDownloaderClientStub; -    private IDownloaderService mRemoteService; -    private TextView mStatusText; -    private TextView mProgressFraction; -    private TextView mProgressPercent; -    private TextView mAverageSpeed; -    private TextView mTimeRemaining; -    private ProgressBar mPB; - -    private View mDashboard; -    private View mCellMessage; - -    private Button mPauseButton; -    private Button mWiFiSettingsButton; - -    private boolean use_32_bits=false; -    private boolean use_immersive=false; -    private boolean mStatePaused; -    private int mState; -	private boolean keep_screen_on=true; +	private IDownloaderService mRemoteService; +	private TextView mStatusText; +	private TextView mProgressFraction; +	private TextView mProgressPercent; +	private TextView mAverageSpeed; +	private TextView mTimeRemaining; +	private ProgressBar mPB; + +	private View mDashboard; +	private View mCellMessage; + +	private Button mPauseButton; +	private Button mWiFiSettingsButton; + +	private boolean use_32_bits = false; +	private boolean use_immersive = false; +	private boolean mStatePaused; +	private int mState; +	private boolean keep_screen_on = true;  	static private Intent mCurrentIntent; -	@Override public void onNewIntent(Intent intent) { +	@Override +	public void onNewIntent(Intent intent) {  		mCurrentIntent = intent;  	} @@ -127,43 +126,43 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  	}  	private void setState(int newState) { -        if (mState != newState) { -            mState = newState; -            mStatusText.setText(Helpers.getDownloaderStringResourceIDFromState(newState)); -        } -    } - -    private void setButtonPausedState(boolean paused) { -        mStatePaused = paused; -        int stringResourceID = paused ? com.godot.game.R.string.text_button_resume : -        	com.godot.game.R.string.text_button_pause; -        mPauseButton.setText(stringResourceID); -    } +		if (mState != newState) { +			mState = newState; +			mStatusText.setText(Helpers.getDownloaderStringResourceIDFromState(newState)); +		} +	} + +	private void setButtonPausedState(boolean paused) { +		mStatePaused = paused; +		int stringResourceID = paused ? com.godot.game.R.string.text_button_resume : +										com.godot.game.R.string.text_button_pause; +		mPauseButton.setText(stringResourceID); +	}  	static public class SingletonBase {  		protected void registerClass(String p_name, String[] p_methods) { -			GodotLib.singleton(p_name,this); +			GodotLib.singleton(p_name, this);  			Class clazz = getClass();  			Method[] methods = clazz.getDeclaredMethods();  			for (Method method : methods) { -				boolean found=false; -				Log.d("XXX","METHOD: %s\n" + method.getName()); +				boolean found = false; +				Log.d("XXX", "METHOD: %s\n" + method.getName());  				for (String s : p_methods) { -				Log.d("XXX", "METHOD CMP WITH: %s\n" + s); +					Log.d("XXX", "METHOD CMP WITH: %s\n" + s);  					if (s.equals(method.getName())) { -						found=true; -						Log.d("XXX","METHOD CMP VALID"); +						found = true; +						Log.d("XXX", "METHOD CMP VALID");  						break;  					}  				}  				if (!found)  					continue; -				Log.d("XXX","METHOD FOUND: %s\n" + method.getName()); +				Log.d("XXX", "METHOD FOUND: %s\n" + method.getName());  				List<String> ptr = new ArrayList<String>(); @@ -175,17 +174,13 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  				String[] pt = new String[ptr.size()];  				ptr.toArray(pt); -				GodotLib.method(p_name,method.getName(),method.getReturnType().getName(),pt); - - +				GodotLib.method(p_name, method.getName(), method.getReturnType().getName(), pt);  			} -			Godot.singletons[Godot.singleton_count++]=this; +			Godot.singletons[Godot.singleton_count++] = this;  		}  		protected void onMainActivityResult(int requestCode, int resultCode, Intent data) { - -  		}  		protected void onMainPause() {} @@ -200,22 +195,20 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  		public void registerMethods() {}  	} -/* +	/*  	protected List<SingletonBase> singletons = new ArrayList<SingletonBase>();  	protected void instanceSingleton(SingletonBase s) {  		s.registerMethods();  		singletons.add(s);  	} - -*/ +	*/  	private String[] command_line;  	private boolean use_apk_expansion;  	public GodotView mView; -	private boolean godot_initialized=false; - +	private boolean godot_initialized = false;  	private SensorManager mSensorManager;  	private Sensor mAccelerometer; @@ -226,36 +219,34 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  	public FrameLayout layout;  	public RelativeLayout adLayout; -  	static public GodotIO io;  	public static void setWindowTitle(String title) {  		//setTitle(title);  	} -  	static SingletonBase singletons[] = new SingletonBase[MAX_SINGLETONS]; -	static int singleton_count=0; - +	static int singleton_count = 0;  	public interface ResultCallback {  		public void callback(int requestCode, int resultCode, Intent data); -	}; +	}  	public ResultCallback result_callback;  	private PaymentsManager mPaymentsManager = null; -	@Override protected void onActivityResult (int requestCode, int resultCode, Intent data) { -		if(requestCode == PaymentsManager.REQUEST_CODE_FOR_PURCHASE){ +	@Override +	protected void onActivityResult(int requestCode, int resultCode, Intent data) { +		if (requestCode == PaymentsManager.REQUEST_CODE_FOR_PURCHASE) {  			mPaymentsManager.processPurchaseResponse(resultCode, data); -		}else if (result_callback != null) { +		} else if (result_callback != null) {  			result_callback.callback(requestCode, resultCode, data);  			result_callback = null;  		}; -		for(int i=0;i<singleton_count;i++) { +		for (int i = 0; i < singleton_count; i++) { -			singletons[i].onMainActivityResult(requestCode,resultCode,data); +			singletons[i].onMainActivityResult(requestCode, resultCode, data);  		}  	}; @@ -265,38 +256,38 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  		//setContentView(mView);  		layout = new FrameLayout(this); -		layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); +		layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  		setContentView(layout);  		// GodotEditText layout  		GodotEditText edittext = new GodotEditText(this); -		   edittext.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT)); -        // ...add to FrameLayout -		   layout.addView(edittext); +		edittext.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); +		// ...add to FrameLayout +		layout.addView(edittext); -		mView = new GodotView(getApplication(),io,use_gl2,use_32_bits, this); -		layout.addView(mView,new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); +		mView = new GodotView(getApplication(), io, use_gl2, use_32_bits, this); +		layout.addView(mView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  		edittext.setView(mView);  		io.setEdit(edittext);  		final Godot godot = this;  		mView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { -				@Override -				public void onGlobalLayout() { -					Point fullSize = new Point(); -					godot.getWindowManager().getDefaultDisplay().getSize(fullSize); -					Rect gameSize = new Rect(); -					godot.mView.getWindowVisibleDisplayFrame(gameSize); - -					final int keyboardHeight = fullSize.y - gameSize.bottom; -					Log.d("GODOT", "setVirtualKeyboardHeight: " + keyboardHeight); -					GodotLib.setVirtualKeyboardHeight(keyboardHeight); -				} +			@Override +			public void onGlobalLayout() { +				Point fullSize = new Point(); +				godot.getWindowManager().getDefaultDisplay().getSize(fullSize); +				Rect gameSize = new Rect(); +				godot.mView.getWindowVisibleDisplayFrame(gameSize); + +				final int keyboardHeight = fullSize.y - gameSize.bottom; +				Log.d("GODOT", "setVirtualKeyboardHeight: " + keyboardHeight); +				GodotLib.setVirtualKeyboardHeight(keyboardHeight); +			}  		});  		// Ad layout  		adLayout = new RelativeLayout(this); -		adLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); +		adLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  		layout.addView(adLayout);  		final String[] current_command_line = command_line; @@ -313,12 +304,11 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  				});  			}  		}); -  	}  	public void setKeepScreenOn(final boolean p_enabled) {  		keep_screen_on = p_enabled; -		if (mView != null){ +		if (mView != null) {  			runOnUiThread(new Runnable() {  				@Override  				public void run() { @@ -335,12 +325,12 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  				AlertDialog.Builder builder = new AlertDialog.Builder(getInstance());  				builder.setMessage(message).setTitle(title);  				builder.setPositiveButton( -					"OK", -					new DialogInterface.OnClickListener() { -						public void onClick(DialogInterface dialog, int id) { -							dialog.cancel(); -						} -					}); +						"OK", +						new DialogInterface.OnClickListener() { +							public void onClick(DialogInterface dialog, int id) { +								dialog.cancel(); +							} +						});  				AlertDialog dialog = builder.create();  				dialog.show();  			} @@ -349,91 +339,86 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  	private static Godot _self; -	public static Godot getInstance(){ +	public static Godot getInstance() {  		return Godot._self;  	} -  	private String[] getCommandLine() { -            InputStream is; -            try { -		is = getAssets().open("_cl_"); -                byte[] len = new byte[4]; -                int r = is.read(len); -		if (r<4) { -                    Log.d("XXX","**ERROR** Wrong cmdline length.\n"); -		    Log.d("GODOT", "**ERROR** Wrong cmdline length.\n"); -                    return new String[0]; -                } -		int argc=((int)(len[3]&0xFF)<<24) | ((int)(len[2]&0xFF)<<16) | ((int)(len[1]&0xFF)<<8) | ((int)(len[0]&0xFF)); -                String[] cmdline = new String[argc]; - -                for(int i=0;i<argc;i++) { -                    r = is.read(len); -                    if (r<4) { - -			Log.d("GODOT", "**ERROR** Wrong cmdline param length.\n"); -                        return new String[0]; -                    } -		    int strlen=((int)(len[3]&0xFF)<<24) | ((int)(len[2]&0xFF)<<16) | ((int)(len[1]&0xFF)<<8) | ((int)(len[0]&0xFF)); -                    if (strlen>65535) { -			Log.d("GODOT", "**ERROR** Wrong command len\n"); -                        return new String[0]; -                    } -		    byte[] arg = new byte[strlen]; -                    r = is.read(arg); -		    if (r==strlen) { -                        cmdline[i]=new String(arg,"UTF-8"); -		    } +		InputStream is; +		try { +			is = getAssets().open("_cl_"); +			byte[] len = new byte[4]; +			int r = is.read(len); +			if (r < 4) { +				Log.d("XXX", "**ERROR** Wrong cmdline length.\n"); +				Log.d("GODOT", "**ERROR** Wrong cmdline length.\n"); +				return new String[0]; +			} +			int argc = ((int)(len[3] & 0xFF) << 24) | ((int)(len[2] & 0xFF) << 16) | ((int)(len[1] & 0xFF) << 8) | ((int)(len[0] & 0xFF)); +			String[] cmdline = new String[argc]; + +			for (int i = 0; i < argc; i++) { +				r = is.read(len); +				if (r < 4) { + +					Log.d("GODOT", "**ERROR** Wrong cmdline param length.\n"); +					return new String[0]; +				} +				int strlen = ((int)(len[3] & 0xFF) << 24) | ((int)(len[2] & 0xFF) << 16) | ((int)(len[1] & 0xFF) << 8) | ((int)(len[0] & 0xFF)); +				if (strlen > 65535) { +					Log.d("GODOT", "**ERROR** Wrong command len\n"); +					return new String[0]; +				} +				byte[] arg = new byte[strlen]; +				r = is.read(arg); +				if (r == strlen) { +					cmdline[i] = new String(arg, "UTF-8"); +				}  			}  			return cmdline;  		} catch (Exception e) { -		e.printStackTrace(); -		Log.d("GODOT", "**ERROR** Exception " + e.getClass().getName() + ":" + e.getMessage()); +			e.printStackTrace(); +			Log.d("GODOT", "**ERROR** Exception " + e.getClass().getName() + ":" + e.getMessage());  			return new String[0];  		} - -  	} -  	String expansion_pack_path; -  	private void initializeGodot() { -		if (expansion_pack_path!=null) { +		if (expansion_pack_path != null) {  			String[] new_cmdline; -			int cll=0; -			if (command_line!=null) { -			        Log.d("GODOT", "initializeGodot: command_line: is not null" ); -				new_cmdline = new String[ command_line.length + 2 ]; -				cll=command_line.length; -				for(int i=0;i<command_line.length;i++) { -					new_cmdline[i]=command_line[i]; +			int cll = 0; +			if (command_line != null) { +				Log.d("GODOT", "initializeGodot: command_line: is not null"); +				new_cmdline = new String[command_line.length + 2]; +				cll = command_line.length; +				for (int i = 0; i < command_line.length; i++) { +					new_cmdline[i] = command_line[i];  				}  			} else { -			        Log.d("GODOT", "initializeGodot: command_line: is null" ); -				new_cmdline = new String[ 2 ]; +				Log.d("GODOT", "initializeGodot: command_line: is null"); +				new_cmdline = new String[2];  			} -			new_cmdline[cll]="--main_pack"; -			new_cmdline[cll+1]=expansion_pack_path; -			command_line=new_cmdline; +			new_cmdline[cll] = "--main_pack"; +			new_cmdline[cll + 1] = expansion_pack_path; +			command_line = new_cmdline;  		}  		io = new GodotIO(this);  		io.unique_id = Secure.getString(getContentResolver(), Secure.ANDROID_ID); -		GodotLib.io=io; -		Log.d("GODOT", "command_line is null? " + ((command_line == null)?"yes":"no")); +		GodotLib.io = io; +		Log.d("GODOT", "command_line is null? " + ((command_line == null) ? "yes" : "no"));  		/*if(command_line != null){  		    Log.d("GODOT", "Command Line:");  		    for(int w=0;w <command_line.length;w++){  		        Log.d("GODOT","   " + command_line[w]);  		    }  		}*/ -		mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); +		mSensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE);  		mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);  		mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME);  		mGravity = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY); @@ -449,18 +434,15 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  		mPaymentsManager = PaymentsManager.createManager(this).initService(); -		godot_initialized=true; - +		godot_initialized = true;  	}  	@Override  	public void onServiceConnected(Messenger m) { -	    mRemoteService = DownloaderServiceMarshaller.CreateProxy(m); -	    mRemoteService.onClientUpdated(mDownloaderClientStub.getMessenger()); +		mRemoteService = DownloaderServiceMarshaller.CreateProxy(m); +		mRemoteService.onClientUpdated(mDownloaderClientStub.getMessenger());  	} - -  	@Override  	protected void onCreate(Bundle icicle) { @@ -474,59 +456,58 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  		//check for apk expansion API  		if (true) { -		        boolean md5mismatch = false; +			boolean md5mismatch = false;  			command_line = getCommandLine(); -			String main_pack_md5=null; -			String main_pack_key=null; +			String main_pack_md5 = null; +			String main_pack_key = null;  			List<String> new_args = new LinkedList<String>(); +			for (int i = 0; i < command_line.length; i++) { -			for(int i=0;i<command_line.length;i++) { - -				boolean has_extra = i< command_line.length -1; +				boolean has_extra = i < command_line.length - 1;  				if (command_line[i].equals("--use_depth_32")) { -					use_32_bits=true; +					use_32_bits = true;  				} else if (command_line[i].equals("--use_immersive")) { -					use_immersive=true; -					if(Build.VERSION.SDK_INT >= 19.0){ // check if the application runs on an android 4.4+ +					use_immersive = true; +					if (Build.VERSION.SDK_INT >= 19.0) { // check if the application runs on an android 4.4+  						window.getDecorView().setSystemUiVisibility( -								    View.SYSTEM_UI_FLAG_LAYOUT_STABLE -									    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION -									    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN -									    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar -									    | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar -									    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); +								View.SYSTEM_UI_FLAG_LAYOUT_STABLE | +								View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | +								View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | +								View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | // hide nav bar +								View.SYSTEM_UI_FLAG_FULLSCREEN | // hide status bar +								View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);  						UiChangeListener();  					}  				} else if (command_line[i].equals("--use_apk_expansion")) { -					use_apk_expansion=true; +					use_apk_expansion = true;  				} else if (has_extra && command_line[i].equals("--apk_expansion_md5")) { -					main_pack_md5=command_line[i+1]; +					main_pack_md5 = command_line[i + 1];  					i++;  				} else if (has_extra && command_line[i].equals("--apk_expansion_key")) { -					main_pack_key=command_line[i+1]; +					main_pack_key = command_line[i + 1];  					SharedPreferences prefs = getSharedPreferences("app_data_keys", MODE_PRIVATE);  					Editor editor = prefs.edit();  					editor.putString("store_public_key", main_pack_key);  					editor.commit();  					i++; -				} else if (command_line[i].trim().length()!=0){ +				} else if (command_line[i].trim().length() != 0) {  					new_args.add(command_line[i]);  				}  			} -			if (new_args.isEmpty()){ -				command_line=null; -			}else{ +			if (new_args.isEmpty()) { +				command_line = null; +			} else {  				command_line = new_args.toArray(new String[new_args.size()]); -                        } -			if (use_apk_expansion && main_pack_md5!=null && main_pack_key!=null) { +			} +			if (use_apk_expansion && main_pack_md5 != null && main_pack_key != null) {  				//check that environment is ok! -				if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED )) { +				if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {  					Log.d("GODOT", "**ERROR! No media mounted!");  					//show popup and die  				} @@ -534,7 +515,7 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  				// Build the full path to the app's expansion files  				try {  					expansion_pack_path = Helpers.getSaveFilePath(getApplicationContext()); -					expansion_pack_path+="/"+"main."+getPackageManager().getPackageInfo(getPackageName(), 0).versionCode+"."+this.getPackageName()+".obb"; +					expansion_pack_path += "/main." + getPackageManager().getPackageInfo(getPackageName(), 0).versionCode + "." + this.getPackageName() + ".obb";  				} catch (Exception e) {  					e.printStackTrace();  				} @@ -542,20 +523,20 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  				File f = new File(expansion_pack_path);  				boolean pack_valid = true; -				Log.d("GODOT","**PACK** - Path "+expansion_pack_path); +				Log.d("GODOT", "**PACK** - Path " + expansion_pack_path);  				if (!f.exists()) { -					pack_valid=false; -					Log.d("GODOT","**PACK** - File does not exist"); +					pack_valid = false; +					Log.d("GODOT", "**PACK** - File does not exist"); -				} else if(  obbIsCorrupted(expansion_pack_path, main_pack_md5)){ +				} else if (obbIsCorrupted(expansion_pack_path, main_pack_md5)) {  					Log.d("GODOT", "**PACK** - Expansion pack (obb) is corrupted");  					pack_valid = false; -					try{ -					    f.delete(); -					}catch(Exception e){ -					    Log.d("GODOT", "**PACK** - Error deleting corrupted expansion pack (obb)"); +					try { +						f.delete(); +					} catch (Exception e) { +						Log.d("GODOT", "**PACK** - Error deleting corrupted expansion pack (obb)");  					}  				} @@ -564,12 +545,12 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  					Intent notifierIntent = new Intent(this, this.getClass());  					notifierIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | -			                                Intent.FLAG_ACTIVITY_CLEAR_TOP); +											Intent.FLAG_ACTIVITY_CLEAR_TOP); -                                                PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, -			                notifierIntent, PendingIntent.FLAG_UPDATE_CURRENT); +					PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, +							notifierIntent, PendingIntent.FLAG_UPDATE_CURRENT); -			        int startResult; +					int startResult;  					try {  						Log.d("GODOT", "INITIALIZING DOWNLOAD");  						startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired( @@ -578,36 +559,34 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  								GodotDownloaderService.class);  						Log.d("GODOT", "DOWNLOAD SERVICE FINISHED:" + startResult); -			        if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) { -						Log.d("GODOT", "DOWNLOAD REQUIRED"); -			            // This is where you do set up to display the download -			            // progress (next step) -			        	mDownloaderClientStub = DownloaderClientMarshaller.CreateStub(this, -			        			GodotDownloaderService.class); - -			        	setContentView(com.godot.game.R.layout.downloading_expansion); -			        	mPB = (ProgressBar) findViewById(com.godot.game.R.id.progressBar); -			            mStatusText = (TextView) findViewById(com.godot.game.R.id.statusText); -			            mProgressFraction = (TextView) findViewById(com.godot.game.R.id.progressAsFraction); -			            mProgressPercent = (TextView) findViewById(com.godot.game.R.id.progressAsPercentage); -			            mAverageSpeed = (TextView) findViewById(com.godot.game.R.id.progressAverageSpeed); -			            mTimeRemaining = (TextView) findViewById(com.godot.game.R.id.progressTimeRemaining); -			            mDashboard = findViewById(com.godot.game.R.id.downloaderDashboard); -			            mCellMessage = findViewById(com.godot.game.R.id.approveCellular); -			            mPauseButton = (Button) findViewById(com.godot.game.R.id.pauseButton); -			            mWiFiSettingsButton = (Button) findViewById(com.godot.game.R.id.wifiSettingsButton); - -			            return; -			        } else{ -			        	Log.d("GODOT", "NO DOWNLOAD REQUIRED"); -			        } +						if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) { +							Log.d("GODOT", "DOWNLOAD REQUIRED"); +							// This is where you do set up to display the download +							// progress (next step) +							mDownloaderClientStub = DownloaderClientMarshaller.CreateStub(this, +									GodotDownloaderService.class); + +							setContentView(com.godot.game.R.layout.downloading_expansion); +							mPB = (ProgressBar)findViewById(com.godot.game.R.id.progressBar); +							mStatusText = (TextView)findViewById(com.godot.game.R.id.statusText); +							mProgressFraction = (TextView)findViewById(com.godot.game.R.id.progressAsFraction); +							mProgressPercent = (TextView)findViewById(com.godot.game.R.id.progressAsPercentage); +							mAverageSpeed = (TextView)findViewById(com.godot.game.R.id.progressAverageSpeed); +							mTimeRemaining = (TextView)findViewById(com.godot.game.R.id.progressTimeRemaining); +							mDashboard = findViewById(com.godot.game.R.id.downloaderDashboard); +							mCellMessage = findViewById(com.godot.game.R.id.approveCellular); +							mPauseButton = (Button)findViewById(com.godot.game.R.id.pauseButton); +							mWiFiSettingsButton = (Button)findViewById(com.godot.game.R.id.wifiSettingsButton); + +							return; +						} else { +							Log.d("GODOT", "NO DOWNLOAD REQUIRED"); +						}  					} catch (NameNotFoundException e) {  						// TODO Auto-generated catch block  						Log.d("GODOT", "Error downloading expansion package:" + e.getMessage());  					} -  				} -  			}  		} @@ -615,28 +594,26 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  		initializeGodot(); -  		//instanceSingleton( new GodotFacebook(this) ); - -  	} +	@Override +	protected void onDestroy() { -	@Override protected void onDestroy(){ - -		if(mPaymentsManager != null ) mPaymentsManager.destroy(); -		for(int i=0;i<singleton_count;i++) { +		if (mPaymentsManager != null) mPaymentsManager.destroy(); +		for (int i = 0; i < singleton_count; i++) {  			singletons[i].onMainDestroy();  		}  		super.onDestroy();  	} -	@Override protected void onPause() { +	@Override +	protected void onPause() {  		super.onPause(); -		if (!godot_initialized){ +		if (!godot_initialized) {  			if (null != mDownloaderClientStub) { -		        mDownloaderClientStub.disconnect(this); -		    } +				mDownloaderClientStub.disconnect(this); +			}  			return;  		}  		mView.onPause(); @@ -648,17 +625,18 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  		});  		mSensorManager.unregisterListener(this); -		for(int i=0;i<singleton_count;i++) { +		for (int i = 0; i < singleton_count; i++) {  			singletons[i].onMainPause();  		}  	} -	@Override protected void onResume() { +	@Override +	protected void onResume() {  		super.onResume(); -		if (!godot_initialized){ +		if (!godot_initialized) {  			if (null != mDownloaderClientStub) { -		        mDownloaderClientStub.connect(this); -		    } +				mDownloaderClientStub.connect(this); +			}  			return;  		} @@ -674,59 +652,58 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  		mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_GAME);  		mSensorManager.registerListener(this, mGyroscope, SensorManager.SENSOR_DELAY_GAME); -		if(use_immersive && Build.VERSION.SDK_INT >= 19.0){ // check if the application runs on an android 4.4+ +		if (use_immersive && Build.VERSION.SDK_INT >= 19.0) { // check if the application runs on an android 4.4+  			Window window = getWindow();  			window.getDecorView().setSystemUiVisibility( -					    View.SYSTEM_UI_FLAG_LAYOUT_STABLE -						    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION -						    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN -						    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar -						    | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar -						    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); +					View.SYSTEM_UI_FLAG_LAYOUT_STABLE | +					View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | +					View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | +					View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | // hide nav bar +					View.SYSTEM_UI_FLAG_FULLSCREEN | // hide status bar +					View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);  		} -		for(int i=0;i<singleton_count;i++) { +		for (int i = 0; i < singleton_count; i++) {  			singletons[i].onMainResume();  		} - - -  	}  	public void UiChangeListener() {  		final View decorView = getWindow().getDecorView(); -		decorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { +		decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() {  			@Override  			public void onSystemUiVisibilityChange(int visibility) {  				if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {  					decorView.setSystemUiVisibility( -					View.SYSTEM_UI_FLAG_LAYOUT_STABLE -					| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION -					| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN -					| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION -					| View.SYSTEM_UI_FLAG_FULLSCREEN -					| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); +							View.SYSTEM_UI_FLAG_LAYOUT_STABLE | +							View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | +							View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | +							View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | +							View.SYSTEM_UI_FLAG_FULLSCREEN | +							View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);  				}  			}  		});  	} -	@Override public void onSensorChanged(SensorEvent event) { -		Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); +	@Override +	public void onSensorChanged(SensorEvent event) { +		Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();  		int displayRotation = display.getRotation();  		float[] adjustedValues = new float[3];  		final int axisSwap[][] = { -		{  1,  -1,  0,  1  },     // ROTATION_0 -		{-1,  -1,  1,  0  },     // ROTATION_90 -		{-1,    1,  0,  1  },     // ROTATION_180 -		{  1,    1,  1,  0  }  }; // ROTATION_270 +			{ 1, -1, 0, 1 }, // ROTATION_0 +			{ -1, -1, 1, 0 }, // ROTATION_90 +			{ -1, 1, 0, 1 }, // ROTATION_180 +			{ 1, 1, 1, 0 } +		}; // ROTATION_270  		final int[] as = axisSwap[displayRotation]; -		adjustedValues[0]  =  (float)as[0] * event.values[ as[2] ]; -		adjustedValues[1]  =  (float)as[1] * event.values[ as[3] ]; -		adjustedValues[2]  =  event.values[2]; +		adjustedValues[0] = (float)as[0] * event.values[as[2]]; +		adjustedValues[1] = (float)as[1] * event.values[as[3]]; +		adjustedValues[2] = event.values[2];  		final float x = adjustedValues[0];  		final float y = adjustedValues[1]; @@ -738,27 +715,28 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  				@Override  				public void run() {  					if (typeOfSensor == Sensor.TYPE_ACCELEROMETER) { -						GodotLib.accelerometer(-x,y,-z); +						GodotLib.accelerometer(-x, y, -z);  					}  					if (typeOfSensor == Sensor.TYPE_GRAVITY) { -						GodotLib.gravity(-x,y,-z); +						GodotLib.gravity(-x, y, -z);  					}  					if (typeOfSensor == Sensor.TYPE_MAGNETIC_FIELD) { -						GodotLib.magnetometer(-x,y,-z); +						GodotLib.magnetometer(-x, y, -z);  					}  					if (typeOfSensor == Sensor.TYPE_GYROSCOPE) { -						GodotLib.gyroscope(x,-y,z); +						GodotLib.gyroscope(x, -y, z);  					}  				}  			});  		}  	} -	@Override public final void onAccuracyChanged(Sensor sensor, int accuracy) { +	@Override +	public final void onAccuracyChanged(Sensor sensor, int accuracy) {  		// Do something here if sensor accuracy changes.  	} -/* +	/*  	@Override public boolean dispatchKeyEvent(KeyEvent event) {  		if (event.getKeyCode()==KeyEvent.KEYCODE_BACK) { @@ -772,12 +750,13 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  		return false;  	} -*/ +	*/ -	@Override public void onBackPressed() { +	@Override +	public void onBackPressed() {  		boolean shouldQuit = true; -		for(int i=0;i<singleton_count;i++) { +		for (int i = 0; i < singleton_count; i++) {  			if (singletons[i].onMainBackPressed()) {  				shouldQuit = false;  			} @@ -799,71 +778,68 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  		System.exit(0);  	} +	private boolean obbIsCorrupted(String f, String main_pack_md5) { +		try { -	private boolean obbIsCorrupted(String f, String main_pack_md5){ - -		    try { - -			    InputStream fis =  new FileInputStream(f); +			InputStream fis = new FileInputStream(f); -			    // Create MD5 Hash -			    byte[] buffer = new byte[16384]; - -			    MessageDigest complete = MessageDigest.getInstance("MD5"); -			    int numRead; -			    do { -				    numRead = fis.read(buffer); -				    if (numRead > 0) { -					    complete.update(buffer, 0, numRead); -				    } -			    } while (numRead != -1); +			// Create MD5 Hash +			byte[] buffer = new byte[16384]; +			MessageDigest complete = MessageDigest.getInstance("MD5"); +			int numRead; +			do { +				numRead = fis.read(buffer); +				if (numRead > 0) { +					complete.update(buffer, 0, numRead); +				} +			} while (numRead != -1); -			    fis.close(); -			    byte[] messageDigest = complete.digest(); +			fis.close(); +			byte[] messageDigest = complete.digest(); -			    // Create Hex String -			    StringBuffer hexString = new StringBuffer(); -			    for (int i=0; i<messageDigest.length; i++) { -				    String s = Integer.toHexString(0xFF & messageDigest[i]); +			// Create Hex String +			StringBuffer hexString = new StringBuffer(); +			for (int i = 0; i < messageDigest.length; i++) { +				String s = Integer.toHexString(0xFF & messageDigest[i]); -				    if (s.length()==1) { -					s="0"+s; -				    } -				    hexString.append(s); -			    } -			    String md5str =  hexString.toString(); +				if (s.length() == 1) { +					s = "0" + s; +				} +				hexString.append(s); +			} +			String md5str = hexString.toString(); -			    //Log.d("GODOT","**PACK** - My MD5: "+hexString+" - APK md5: "+main_pack_md5); -			    if (!md5str.equals(main_pack_md5)) { -				    Log.d("GODOT","**PACK MD5 MISMATCH???** - MD5 Found: "+md5str+" "+Integer.toString(md5str.length())+" - MD5 Expected: "+main_pack_md5+" "+Integer.toString(main_pack_md5.length())); -				    return true; -			    } -			    return false; -		    } catch (Exception e) { -			    e.printStackTrace(); -			    Log.d("GODOT","**PACK FAIL**"); -			    return true; -		    } +			//Log.d("GODOT","**PACK** - My MD5: "+hexString+" - APK md5: "+main_pack_md5); +			if (!md5str.equals(main_pack_md5)) { +				Log.d("GODOT", "**PACK MD5 MISMATCH???** - MD5 Found: " + md5str + " " + Integer.toString(md5str.length()) + " - MD5 Expected: " + main_pack_md5 + " " + Integer.toString(main_pack_md5.length())); +				return true; +			} +			return false; +		} catch (Exception e) { +			e.printStackTrace(); +			Log.d("GODOT", "**PACK FAIL**"); +			return true; +		}  	}  	//@Override public boolean dispatchTouchEvent (MotionEvent event) {  	public boolean gotTouchEvent(final MotionEvent event) {  		super.onTouchEvent(event); -		final int evcount=event.getPointerCount(); -		if (evcount==0) +		final int evcount = event.getPointerCount(); +		if (evcount == 0)  			return true;  		if (mView != null) { -			final int[] arr = new int[event.getPointerCount()*3]; +			final int[] arr = new int[event.getPointerCount() * 3]; -			for(int i=0;i<event.getPointerCount();i++) { +			for (int i = 0; i < event.getPointerCount(); i++) { -				arr[i*3+0]=(int)event.getPointerId(i); -				arr[i*3+1]=(int)event.getX(i); -				arr[i*3+2]=(int)event.getY(i); +				arr[i * 3 + 0] = (int)event.getPointerId(i); +				arr[i * 3 + 1] = (int)event.getX(i); +				arr[i * 3 + 2] = (int)event.getY(i);  			}  			//System.out.printf("gaction: %d\n",event.getAction()); @@ -871,13 +847,13 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  			mView.queueEvent(new Runnable() {  				@Override  				public void run() { -					switch(action) { +					switch (action) {  						case MotionEvent.ACTION_DOWN: { -							GodotLib.touch(0,0,evcount,arr); +							GodotLib.touch(0, 0, evcount, arr);  							//System.out.printf("action down at: %f,%f\n", event.getX(),event.getY());  						} break;  						case MotionEvent.ACTION_MOVE: { -							GodotLib.touch(1,0,evcount,arr); +							GodotLib.touch(1, 0, evcount, arr);  							/*  							for(int i=0;i<event.getPointerCount();i++) {  								System.out.printf("%d - moved to: %f,%f\n",i, event.getX(i),event.getY(i)); @@ -887,17 +863,17 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  						case MotionEvent.ACTION_POINTER_UP: {  							final int indexPointUp = event.getActionIndex();  							final int pointer_idx = event.getPointerId(indexPointUp); -							GodotLib.touch(4,pointer_idx,evcount,arr); +							GodotLib.touch(4, pointer_idx, evcount, arr);  							//System.out.printf("%d - s.up at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx));  						} break;  						case MotionEvent.ACTION_POINTER_DOWN: {  							int pointer_idx = event.getActionIndex(); -							GodotLib.touch(3,pointer_idx,evcount,arr); +							GodotLib.touch(3, pointer_idx, evcount, arr);  							//System.out.printf("%d - s.down at: %f,%f\n",pointer_idx, event.getX(pointer_idx),event.getY(pointer_idx));  						} break;  						case MotionEvent.ACTION_CANCEL:  						case MotionEvent.ACTION_UP: { -							GodotLib.touch(2,0,evcount,arr); +							GodotLib.touch(2, 0, evcount, arr);  							/*  							for(int i=0;i<event.getPointerCount();i++) {  								System.out.printf("%d - up! %f,%f\n",i, event.getX(i),event.getY(i)); @@ -911,14 +887,16 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  		return true;  	} -	@Override public boolean onKeyMultiple(final int inKeyCode, int repeatCount, KeyEvent event) { +	@Override +	public boolean onKeyMultiple(final int inKeyCode, int repeatCount, KeyEvent event) {  		String s = event.getCharacters();  		if (s == null || s.length() == 0)  			return super.onKeyMultiple(inKeyCode, repeatCount, event);  		final char[] cc = s.toCharArray();  		int cnt = 0; -		for (int i = cc.length; --i >= 0; cnt += cc[i] != 0 ? 1 : 0); +		for (int i = cc.length; --i >= 0; cnt += cc[i] != 0 ? 1 : 0) +			;  		if (cnt == 0) return super.onKeyMultiple(inKeyCode, repeatCount, event);  		final Activity me = this;  		queueEvent(new Runnable() { @@ -939,7 +917,6 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  	private void queueEvent(Runnable runnable) {  		// TODO Auto-generated method stub -  	}  	public PaymentsManager getPaymentsManager() { @@ -952,7 +929,6 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC  	}  	*/ -  	// Audio  	/** @@ -960,110 +936,106 @@ public class Godot extends Activity implements SensorEventListener, IDownloaderC       * to show the state as being indeterminate at times. This sample can be       * considered a guideline.       */ -    @Override -    public void onDownloadStateChanged(int newState) { -    	Log.d("GODOT", "onDownloadStateChanged:" + newState); -        setState(newState); -        boolean showDashboard = true; -        boolean showCellMessage = false; -        boolean paused; -        boolean indeterminate; -        switch (newState) { -            case IDownloaderClient.STATE_IDLE: -            	Log.d("GODOT", "DOWNLOAD STATE IDLE"); -                // STATE_IDLE means the service is listening, so it's -                // safe to start making calls via mRemoteService. -                paused = false; -                indeterminate = true; -                break; -            case IDownloaderClient.STATE_CONNECTING: -            case IDownloaderClient.STATE_FETCHING_URL: -            	Log.d("GODOT", "DOWNLOAD STATE CONNECTION / FETCHING URL"); -                showDashboard = true; -                paused = false; -                indeterminate = true; -                break; -            case IDownloaderClient.STATE_DOWNLOADING: -            	Log.d("GODOT", "DOWNLOAD STATE DOWNLOADING"); -                paused = false; -                showDashboard = true; -                indeterminate = false; -                break; - -            case IDownloaderClient.STATE_FAILED_CANCELED: -            case IDownloaderClient.STATE_FAILED: -            case IDownloaderClient.STATE_FAILED_FETCHING_URL: -            case IDownloaderClient.STATE_FAILED_UNLICENSED: -            	Log.d("GODOT", "DOWNLOAD STATE: FAILED, CANCELLED, UNLICENSED OR FAILED TO FETCH URL"); -                paused = true; -                showDashboard = false; -                indeterminate = false; -                break; -            case IDownloaderClient.STATE_PAUSED_NEED_CELLULAR_PERMISSION: -            case IDownloaderClient.STATE_PAUSED_WIFI_DISABLED_NEED_CELLULAR_PERMISSION: -            	Log.d("GODOT", "DOWNLOAD STATE: PAUSED BY MISSING CELLULAR PERMISSION"); -                showDashboard = false; -                paused = true; -                indeterminate = false; -                showCellMessage = true; -                break; - -            case IDownloaderClient.STATE_PAUSED_BY_REQUEST: -            	Log.d("GODOT", "DOWNLOAD STATE: PAUSED BY USER"); -                paused = true; -                indeterminate = false; -                break; -            case IDownloaderClient.STATE_PAUSED_ROAMING: -            case IDownloaderClient.STATE_PAUSED_SDCARD_UNAVAILABLE: -            	Log.d("GODOT", "DOWNLOAD STATE: PAUSED BY ROAMING OR SDCARD UNAVAILABLE"); -                paused = true; -                indeterminate = false; -                break; -            case IDownloaderClient.STATE_COMPLETED: -            	Log.d("GODOT", "DOWNLOAD STATE: COMPLETED"); -                showDashboard = false; -                paused = false; -                indeterminate = false; -//                validateXAPKZipFiles(); -                initializeGodot(); -                return; -            default: -            	Log.d("GODOT", "DOWNLOAD STATE: DEFAULT"); -                paused = true; -                indeterminate = true; -                showDashboard = true; -        } -        int newDashboardVisibility = showDashboard ? View.VISIBLE : View.GONE; -        if (mDashboard.getVisibility() != newDashboardVisibility) { -            mDashboard.setVisibility(newDashboardVisibility); -        } -        int cellMessageVisibility = showCellMessage ? View.VISIBLE : View.GONE; -        if (mCellMessage.getVisibility() != cellMessageVisibility) { -            mCellMessage.setVisibility(cellMessageVisibility); -        } - -        mPB.setIndeterminate(indeterminate); -        setButtonPausedState(paused); -    } +	@Override +	public void onDownloadStateChanged(int newState) { +		Log.d("GODOT", "onDownloadStateChanged:" + newState); +		setState(newState); +		boolean showDashboard = true; +		boolean showCellMessage = false; +		boolean paused; +		boolean indeterminate; +		switch (newState) { +			case IDownloaderClient.STATE_IDLE: +				Log.d("GODOT", "DOWNLOAD STATE IDLE"); +				// STATE_IDLE means the service is listening, so it's +				// safe to start making calls via mRemoteService. +				paused = false; +				indeterminate = true; +				break; +			case IDownloaderClient.STATE_CONNECTING: +			case IDownloaderClient.STATE_FETCHING_URL: +				Log.d("GODOT", "DOWNLOAD STATE CONNECTION / FETCHING URL"); +				showDashboard = true; +				paused = false; +				indeterminate = true; +				break; +			case IDownloaderClient.STATE_DOWNLOADING: +				Log.d("GODOT", "DOWNLOAD STATE DOWNLOADING"); +				paused = false; +				showDashboard = true; +				indeterminate = false; +				break; + +			case IDownloaderClient.STATE_FAILED_CANCELED: +			case IDownloaderClient.STATE_FAILED: +			case IDownloaderClient.STATE_FAILED_FETCHING_URL: +			case IDownloaderClient.STATE_FAILED_UNLICENSED: +				Log.d("GODOT", "DOWNLOAD STATE: FAILED, CANCELLED, UNLICENSED OR FAILED TO FETCH URL"); +				paused = true; +				showDashboard = false; +				indeterminate = false; +				break; +			case IDownloaderClient.STATE_PAUSED_NEED_CELLULAR_PERMISSION: +			case IDownloaderClient.STATE_PAUSED_WIFI_DISABLED_NEED_CELLULAR_PERMISSION: +				Log.d("GODOT", "DOWNLOAD STATE: PAUSED BY MISSING CELLULAR PERMISSION"); +				showDashboard = false; +				paused = true; +				indeterminate = false; +				showCellMessage = true; +				break; + +			case IDownloaderClient.STATE_PAUSED_BY_REQUEST: +				Log.d("GODOT", "DOWNLOAD STATE: PAUSED BY USER"); +				paused = true; +				indeterminate = false; +				break; +			case IDownloaderClient.STATE_PAUSED_ROAMING: +			case IDownloaderClient.STATE_PAUSED_SDCARD_UNAVAILABLE: +				Log.d("GODOT", "DOWNLOAD STATE: PAUSED BY ROAMING OR SDCARD UNAVAILABLE"); +				paused = true; +				indeterminate = false; +				break; +			case IDownloaderClient.STATE_COMPLETED: +				Log.d("GODOT", "DOWNLOAD STATE: COMPLETED"); +				showDashboard = false; +				paused = false; +				indeterminate = false; +				//                validateXAPKZipFiles(); +				initializeGodot(); +				return; +			default: +				Log.d("GODOT", "DOWNLOAD STATE: DEFAULT"); +				paused = true; +				indeterminate = true; +				showDashboard = true; +		} +		int newDashboardVisibility = showDashboard ? View.VISIBLE : View.GONE; +		if (mDashboard.getVisibility() != newDashboardVisibility) { +			mDashboard.setVisibility(newDashboardVisibility); +		} +		int cellMessageVisibility = showCellMessage ? View.VISIBLE : View.GONE; +		if (mCellMessage.getVisibility() != cellMessageVisibility) { +			mCellMessage.setVisibility(cellMessageVisibility); +		} +		mPB.setIndeterminate(indeterminate); +		setButtonPausedState(paused); +	}  	@Override  	public void onDownloadProgress(DownloadProgressInfo progress) {  		mAverageSpeed.setText(getString(com.godot.game.R.string.kilobytes_per_second, -                Helpers.getSpeedString(progress.mCurrentSpeed))); -        mTimeRemaining.setText(getString(com.godot.game.R.string.time_remaining, -                Helpers.getTimeRemaining(progress.mTimeRemaining))); - -        progress.mOverallTotal = progress.mOverallTotal; -        mPB.setMax((int) (progress.mOverallTotal >> 8)); -        mPB.setProgress((int) (progress.mOverallProgress >> 8)); -        mProgressPercent.setText(Long.toString(progress.mOverallProgress -                * 100 / -                progress.mOverallTotal) + "%"); -        mProgressFraction.setText(Helpers.getDownloadProgressString -                (progress.mOverallProgress, -                        progress.mOverallTotal)); - +				Helpers.getSpeedString(progress.mCurrentSpeed))); +		mTimeRemaining.setText(getString(com.godot.game.R.string.time_remaining, +				Helpers.getTimeRemaining(progress.mTimeRemaining))); + +		progress.mOverallTotal = progress.mOverallTotal; +		mPB.setMax((int)(progress.mOverallTotal >> 8)); +		mPB.setProgress((int)(progress.mOverallProgress >> 8)); +		mProgressPercent.setText(Long.toString(progress.mOverallProgress * 100 / +											   progress.mOverallTotal) + +								 "%"); +		mProgressFraction.setText(Helpers.getDownloadProgressString(progress.mOverallProgress, +				progress.mOverallTotal));  	} -  } diff --git a/platform/android/java/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java b/platform/android/java/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java index 2c668dd586..568c7a4140 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java +++ b/platform/android/java/src/org/godotengine/godot/GodotDownloaderAlarmReceiver.java @@ -46,14 +46,14 @@ import android.util.Log;   */  public class GodotDownloaderAlarmReceiver extends BroadcastReceiver { -    @Override -    public void onReceive(Context context, Intent intent) { -    	Log.d("GODOT", "Alarma recivida"); -	try { -	    DownloaderClientMarshaller.startDownloadServiceIfRequired(context, intent, GodotDownloaderService.class); -	} catch (NameNotFoundException e) { -	    e.printStackTrace(); -	    Log.d("GODOT", "Exception: " + e.getClass().getName() + ":" + e.getMessage()); +	@Override +	public void onReceive(Context context, Intent intent) { +		Log.d("GODOT", "Alarma recivida"); +		try { +			DownloaderClientMarshaller.startDownloadServiceIfRequired(context, intent, GodotDownloaderService.class); +		} catch (NameNotFoundException e) { +			e.printStackTrace(); +			Log.d("GODOT", "Exception: " + e.getClass().getName() + ":" + e.getMessage()); +		}  	} -    }  } diff --git a/platform/android/java/src/org/godotengine/godot/GodotDownloaderService.java b/platform/android/java/src/org/godotengine/godot/GodotDownloaderService.java index 97ba7826fb..b8b3b925c5 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotDownloaderService.java +++ b/platform/android/java/src/org/godotengine/godot/GodotDownloaderService.java @@ -40,46 +40,45 @@ import com.google.android.vending.expansion.downloader.impl.DownloaderService;   * DownloaderService from the Downloader library.   */  public class GodotDownloaderService extends DownloaderService { -    // stuff for LVL -- MODIFY FOR YOUR APPLICATION! -    private static final String BASE64_PUBLIC_KEY = "REPLACE THIS WITH YOUR PUBLIC KEY"; -    // used by the preference obfuscater -    private static final byte[] SALT = new byte[] { -	    1, 43, -12, -1, 54, 98, -	    -100, -12, 43, 2, -8, -4, 9, 5, -106, -108, -33, 45, -1, 84 -    }; +	// stuff for LVL -- MODIFY FOR YOUR APPLICATION! +	private static final String BASE64_PUBLIC_KEY = "REPLACE THIS WITH YOUR PUBLIC KEY"; +	// used by the preference obfuscater +	private static final byte[] SALT = new byte[] { +		1, 43, -12, -1, 54, 98, +		-100, -12, 43, 2, -8, -4, 9, 5, -106, -108, -33, 45, -1, 84 +	}; -    /** +	/**       * This public key comes from your Android Market publisher account, and it       * used by the LVL to validate responses from Market on your behalf.       */ -    @Override -    public String getPublicKey() { -    	SharedPreferences prefs = getApplicationContext().getSharedPreferences("app_data_keys", Context.MODE_PRIVATE); -    	Log.d("GODOT", "getting public key:" + prefs.getString("store_public_key", null)); -    	return prefs.getString("store_public_key", null); -		 -	//return BASE64_PUBLIC_KEY; -    } +	@Override +	public String getPublicKey() { +		SharedPreferences prefs = getApplicationContext().getSharedPreferences("app_data_keys", Context.MODE_PRIVATE); +		Log.d("GODOT", "getting public key:" + prefs.getString("store_public_key", null)); +		return prefs.getString("store_public_key", null); -    /** +		//return BASE64_PUBLIC_KEY; +	} + +	/**       * This is used by the preference obfuscater to make sure that your       * obfuscated preferences are different than the ones used by other       * applications.       */ -    @Override -    public byte[] getSALT() { -	return SALT; -    } +	@Override +	public byte[] getSALT() { +		return SALT; +	} -    /** +	/**       * Fill this in with the class name for your alarm receiver. We do this       * because receivers must be unique across all of Android (it's a good idea       * to make sure that your receiver is in your unique package)       */ -    @Override -    public String getAlarmReceiverClassName() { -    	Log.d("GODOT", "getAlarmReceiverClassName()"); -    	return GodotDownloaderAlarmReceiver.class.getName(); -    } - +	@Override +	public String getAlarmReceiverClassName() { +		Log.d("GODOT", "getAlarmReceiverClassName()"); +		return GodotDownloaderAlarmReceiver.class.getName(); +	}  } diff --git a/platform/android/java/src/org/godotengine/godot/GodotIO.java b/platform/android/java/src/org/godotengine/godot/GodotIO.java index 989fd2b609..12a2467a29 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotIO.java +++ b/platform/android/java/src/org/godotengine/godot/GodotIO.java @@ -56,7 +56,6 @@ import org.godotengine.godot.input.*;  public class GodotIO { -  	AssetManager am;  	Godot activity;  	GodotEditText edit; @@ -64,35 +63,32 @@ public class GodotIO {  	Context applicationContext;  	MediaPlayer mediaPlayer; -	final int SCREEN_LANDSCAPE=0; -	final int SCREEN_PORTRAIT=1; -	final int SCREEN_REVERSE_LANDSCAPE=2; -	final int SCREEN_REVERSE_PORTRAIT=3; -	final int SCREEN_SENSOR_LANDSCAPE=4; -	final int SCREEN_SENSOR_PORTRAIT=5; -	final int SCREEN_SENSOR=6; +	final int SCREEN_LANDSCAPE = 0; +	final int SCREEN_PORTRAIT = 1; +	final int SCREEN_REVERSE_LANDSCAPE = 2; +	final int SCREEN_REVERSE_PORTRAIT = 3; +	final int SCREEN_SENSOR_LANDSCAPE = 4; +	final int SCREEN_SENSOR_PORTRAIT = 5; +	final int SCREEN_SENSOR = 6;  	/////////////////////////  	/// FILES  	///////////////////////// -	public int last_file_id=1; +	public int last_file_id = 1;  	class AssetData { - -		public boolean eof=false; +		public boolean eof = false;  		public String path;  		public InputStream is;  		public int len;  		public int pos;  	} +	HashMap<Integer, AssetData> streams; -	HashMap<Integer,AssetData> streams; - - -	public int file_open(String path,boolean write) { +	public int file_open(String path, boolean write) {  		//System.out.printf("file_open: Attempt to Open %s\n",path); @@ -100,7 +96,6 @@ public class GodotIO {  		if (write)  			return -1; -  		AssetData ad = new AssetData();  		try { @@ -113,76 +108,73 @@ public class GodotIO {  		}  		try { -			ad.len=ad.is.available(); +			ad.len = ad.is.available();  		} catch (Exception e) { -			System.out.printf("Exception availabling on file_open: %s\n",path); +			System.out.printf("Exception availabling on file_open: %s\n", path);  			return -1;  		} -		ad.path=path; -		ad.pos=0; +		ad.path = path; +		ad.pos = 0;  		++last_file_id; -		streams.put(last_file_id,ad); +		streams.put(last_file_id, ad);  		return last_file_id;  	}  	public int file_get_size(int id) {  		if (!streams.containsKey(id)) { -			System.out.printf("file_get_size: Invalid file id: %d\n",id); +			System.out.printf("file_get_size: Invalid file id: %d\n", id);  			return -1;  		}  		return streams.get(id).len; -  	} -	public void file_seek(int id,int bytes) { +	public void file_seek(int id, int bytes) {  		if (!streams.containsKey(id)) { -			System.out.printf("file_get_size: Invalid file id: %d\n",id); +			System.out.printf("file_get_size: Invalid file id: %d\n", id);  			return;  		}  		//seek sucks  		AssetData ad = streams.get(id); -		if (bytes>ad.len) -			bytes=ad.len; -		if (bytes<0) -			bytes=0; +		if (bytes > ad.len) +			bytes = ad.len; +		if (bytes < 0) +			bytes = 0;  		try { -		if (bytes > (int)ad.pos) { -			int todo=bytes-(int)ad.pos; -			while(todo>0) { -				todo-=ad.is.skip(todo); -			} -			ad.pos=bytes; -		} else if (bytes<(int)ad.pos) { +			if (bytes > (int)ad.pos) { +				int todo = bytes - (int)ad.pos; +				while (todo > 0) { +					todo -= ad.is.skip(todo); +				} +				ad.pos = bytes; +			} else if (bytes < (int)ad.pos) { -			ad.is=am.open(ad.path); +				ad.is = am.open(ad.path); -			ad.pos=bytes; -			int todo=bytes; -			while(todo>0) { -				todo-=ad.is.skip(todo); +				ad.pos = bytes; +				int todo = bytes; +				while (todo > 0) { +					todo -= ad.is.skip(todo); +				}  			} -		} -		ad.eof=false; +			ad.eof = false;  		} catch (IOException e) { -			System.out.printf("Exception on file_seek: %s\n",e); +			System.out.printf("Exception on file_seek: %s\n", e);  			return;  		} - -  	}  	public int file_tell(int id) {  		if (!streams.containsKey(id)) { -			System.out.printf("file_read: Can't tell eof for invalid file id: %d\n",id); +			System.out.printf("file_read: Can't tell eof for invalid file id: %d\n", id);  			return 0;  		} @@ -192,7 +184,7 @@ public class GodotIO {  	public boolean file_eof(int id) {  		if (!streams.containsKey(id)) { -			System.out.printf("file_read: Can't check eof for invalid file id: %d\n",id); +			System.out.printf("file_read: Can't check eof for invalid file id: %d\n", id);  			return false;  		} @@ -203,73 +195,65 @@ public class GodotIO {  	public byte[] file_read(int id, int bytes) {  		if (!streams.containsKey(id)) { -			System.out.printf("file_read: Can't read invalid file id: %d\n",id); +			System.out.printf("file_read: Can't read invalid file id: %d\n", id);  			return new byte[0];  		} -  		AssetData ad = streams.get(id);  		if (ad.pos + bytes > ad.len) { -			bytes=ad.len-ad.pos; -			ad.eof=true; +			bytes = ad.len - ad.pos; +			ad.eof = true;  		} - -		if (bytes==0) { +		if (bytes == 0) {  			return new byte[0];  		} - - -		byte[] buf1=new byte[bytes]; -		int r=0; +		byte[] buf1 = new byte[bytes]; +		int r = 0;  		try {  			r = ad.is.read(buf1);  		} catch (IOException e) { -			System.out.printf("Exception on file_read: %s\n",e); +			System.out.printf("Exception on file_read: %s\n", e);  			return new byte[bytes];  		} -		if (r==0) { +		if (r == 0) {  			return new byte[0];  		} -		ad.pos+=r; +		ad.pos += r; -		if (r<bytes) { +		if (r < bytes) { -			byte[] buf2=new byte[r]; -			for(int i=0;i<r;i++) -				buf2[i]=buf1[i]; +			byte[] buf2 = new byte[r]; +			for (int i = 0; i < r; i++) +				buf2[i] = buf1[i];  			return buf2;  		} else {  			return buf1;  		} -  	}  	public void file_close(int id) {  		if (!streams.containsKey(id)) { -			System.out.printf("file_close: Can't close invalid file id: %d\n",id); +			System.out.printf("file_close: Can't close invalid file id: %d\n", id);  			return;  		}  		streams.remove(id); -  	} -  	/////////////////////////  	/// DIRECTORIES  	///////////////////////// -  	class AssetDir {  		public String[] files; @@ -277,49 +261,48 @@ public class GodotIO {  		public String path;  	} -	public int last_dir_id=1; +	public int last_dir_id = 1; -	HashMap<Integer,AssetDir> dirs; +	HashMap<Integer, AssetDir> dirs;  	public int dir_open(String path) {  		AssetDir ad = new AssetDir(); -		ad.current=0; -		ad.path=path; +		ad.current = 0; +		ad.path = path;  		try {  			ad.files = am.list(path);  			// no way to find path is directory or file exactly.  			// but if ad.files.length==0, then it's an empty directory or file. -			if (ad.files.length==0) { +			if (ad.files.length == 0) {  				return -1;  			}  		} catch (IOException e) { -			System.out.printf("Exception on dir_open: %s\n",e); +			System.out.printf("Exception on dir_open: %s\n", e);  			return -1;  		}  		//System.out.printf("Opened dir: %s\n",path);  		++last_dir_id; -		dirs.put(last_dir_id,ad); +		dirs.put(last_dir_id, ad);  		return last_dir_id; -  	}  	public boolean dir_is_dir(int id) {  		if (!dirs.containsKey(id)) { -			System.out.printf("dir_next: invalid dir id: %d\n",id); +			System.out.printf("dir_next: invalid dir id: %d\n", id);  			return false;  		}  		AssetDir ad = dirs.get(id);  		//System.out.printf("go next: %d,%d\n",ad.current,ad.files.length);  		int idx = ad.current; -		if (idx>0) +		if (idx > 0)  			idx--; -		if (idx>=ad.files.length) +		if (idx >= ad.files.length)  			return false;  		String fname = ad.files[idx]; @@ -327,7 +310,7 @@ public class GodotIO {  			if (ad.path.equals(""))  				am.open(fname);  			else -				am.open(ad.path+"/"+fname); +				am.open(ad.path + "/" + fname);  			return false;  		} catch (Exception e) {  			return true; @@ -337,46 +320,41 @@ public class GodotIO {  	public String dir_next(int id) {  		if (!dirs.containsKey(id)) { -			System.out.printf("dir_next: invalid dir id: %d\n",id); +			System.out.printf("dir_next: invalid dir id: %d\n", id);  			return "";  		}  		AssetDir ad = dirs.get(id);  		//System.out.printf("go next: %d,%d\n",ad.current,ad.files.length); -		if (ad.current>=ad.files.length) { +		if (ad.current >= ad.files.length) {  			ad.current++;  			return "";  		}  		String r = ad.files[ad.current];  		ad.current++;  		return r; -  	}  	public void dir_close(int id) {  		if (!dirs.containsKey(id)) { -			System.out.printf("dir_close: invalid dir id: %d\n",id); +			System.out.printf("dir_close: invalid dir id: %d\n", id);  			return;  		}  		dirs.remove(id);  	} - -  	GodotIO(Godot p_activity) { -		am=p_activity.getAssets(); -		activity=p_activity; -		streams=new HashMap<Integer,AssetData>(); -		dirs=new HashMap<Integer,AssetDir>(); +		am = p_activity.getAssets(); +		activity = p_activity; +		streams = new HashMap<Integer, AssetData>(); +		dirs = new HashMap<Integer, AssetDir>();  		applicationContext = activity.getApplicationContext(); -  	} -  	/////////////////////////  	// AUDIO  	///////////////////////// @@ -400,7 +378,7 @@ public class GodotIO {  		desiredFrames = Math.max(desiredFrames, (AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat) + frameSize - 1) / frameSize);  		mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, -			channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM); +				channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM);  		audioStartThread(); @@ -412,10 +390,10 @@ public class GodotIO {  	public void audioStartThread() {  		mAudioThread = new Thread(new Runnable() { -		    public void run() { -			mAudioTrack.play(); -			GodotLib.audio(); -		} +			public void run() { +				mAudioTrack.play(); +				GodotLib.audio(); +			}  		});  		// I'd take REALTIME if I could get it! @@ -424,15 +402,15 @@ public class GodotIO {  	}  	public void audioWriteShortBuffer(short[] buffer) { -		for (int i = 0; i < buffer.length; ) { +		for (int i = 0; i < buffer.length;) {  			int result = mAudioTrack.write(buffer, i, buffer.length - i);  			if (result > 0) {  				i += result;  			} else if (result == 0) {  				try { -				    Thread.sleep(1); -				} catch(InterruptedException e) { -				    // Nom nom +					Thread.sleep(1); +				} catch (InterruptedException e) { +					// Nom nom  				}  			} else {  				Log.w("Godot", "Godot audio: error return from write(short)"); @@ -441,18 +419,16 @@ public class GodotIO {  		}  	} - -  	public void audioQuit() {  		if (mAudioThread != null) {  			try {  				mAudioThread.join(); -			} catch(Exception e) { +			} catch (Exception e) {  				Log.v("Godot", "Problem stopping audio thread: " + e);  			}  			mAudioThread = null; -		//Log.v("Godot", "Finished waiting for audio thread"); +			//Log.v("Godot", "Finished waiting for audio thread");  		}  		if (mAudioTrack != null) { @@ -473,20 +449,18 @@ public class GodotIO {  	// MISCELLANEOUS OS IO  	///////////////////////// - -  	public int openURI(String p_uri) {  		try {  			Log.v("MyApp", "TRYING TO OPEN URI: " + p_uri);  			String path = p_uri; -			String type=""; +			String type = "";  			if (path.startsWith("/")) {  				//absolute path to filesystem, prepend file:// -				path="file://"+path; +				path = "file://" + path;  				if (p_uri.endsWith(".png") || p_uri.endsWith(".jpg") || p_uri.endsWith(".gif") || p_uri.endsWith(".webp")) { -					type="image/*"; +					type = "image/*";  				}  			} @@ -531,7 +505,7 @@ public class GodotIO {  	}  	public void showKeyboard(String p_existing_text) { -		if(edit != null) +		if (edit != null)  			edit.showKeyboard(p_existing_text);  		//InputMethodManager inputMgr = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE); @@ -539,21 +513,21 @@ public class GodotIO {  	};  	public void hideKeyboard() { -		if(edit != null) +		if (edit != null)  			edit.hideKeyboard(); -        InputMethodManager inputMgr = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE); -        View v = activity.getCurrentFocus(); -        if (v != null) { -            inputMgr.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); -        } else { -            inputMgr.hideSoftInputFromWindow(new View(activity).getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); -        } +		InputMethodManager inputMgr = (InputMethodManager)activity.getSystemService(Context.INPUT_METHOD_SERVICE); +		View v = activity.getCurrentFocus(); +		if (v != null) { +			inputMgr.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); +		} else { +			inputMgr.hideSoftInputFromWindow(new View(activity).getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); +		}  	};  	public void setScreenOrientation(int p_orientation) { -		switch(p_orientation) { +		switch (p_orientation) {  			case SCREEN_LANDSCAPE: {  				activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); @@ -576,16 +550,14 @@ public class GodotIO {  			case SCREEN_SENSOR: {  				activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);  			} break; -  		}  	}; -	 +  	public void setEdit(GodotEditText _edit) {  		edit = _edit;  	} -	public void playVideo(String p_path) -	{ +	public void playVideo(String p_path) {  		Uri filePath = Uri.parse(p_path);  		mediaPlayer = new MediaPlayer(); @@ -594,11 +566,9 @@ public class GodotIO {  			mediaPlayer.setDataSource(applicationContext, filePath);  			mediaPlayer.prepare();  			mediaPlayer.start(); +		} catch (IOException e) { +			System.out.println("IOError while playing video");  		} -		catch(IOException e) -        { -            System.out.println("IOError while playing video"); -        }  	}  	public boolean isVideoPlaying() { @@ -621,49 +591,47 @@ public class GodotIO {  		}  	} - -	public static final int SYSTEM_DIR_DESKTOP=0; -	public static final int SYSTEM_DIR_DCIM=1; -	public static final int SYSTEM_DIR_DOCUMENTS=2; -	public static final int SYSTEM_DIR_DOWNLOADS=3; -	public static final int SYSTEM_DIR_MOVIES=4; -	public static final int SYSTEM_DIR_MUSIC=5; -	public static final int SYSTEM_DIR_PICTURES=6; -	public static final int SYSTEM_DIR_RINGTONES=7; - +	public static final int SYSTEM_DIR_DESKTOP = 0; +	public static final int SYSTEM_DIR_DCIM = 1; +	public static final int SYSTEM_DIR_DOCUMENTS = 2; +	public static final int SYSTEM_DIR_DOWNLOADS = 3; +	public static final int SYSTEM_DIR_MOVIES = 4; +	public static final int SYSTEM_DIR_MUSIC = 5; +	public static final int SYSTEM_DIR_PICTURES = 6; +	public static final int SYSTEM_DIR_RINGTONES = 7;  	public String getSystemDir(int idx) { -		String what=""; -		switch(idx) { +		String what = ""; +		switch (idx) {  			case SYSTEM_DIR_DESKTOP: {  				//what=Environment.DIRECTORY_DOCUMENTS; -				what=Environment.DIRECTORY_DOWNLOADS; +				what = Environment.DIRECTORY_DOWNLOADS;  			} break;  			case SYSTEM_DIR_DCIM: { -				what=Environment.DIRECTORY_DCIM; +				what = Environment.DIRECTORY_DCIM;  			} break;  			case SYSTEM_DIR_DOCUMENTS: { -				what=Environment.DIRECTORY_DOWNLOADS; +				what = Environment.DIRECTORY_DOWNLOADS;  				//what=Environment.DIRECTORY_DOCUMENTS;  			} break;  			case SYSTEM_DIR_DOWNLOADS: { -				what=Environment.DIRECTORY_DOWNLOADS; +				what = Environment.DIRECTORY_DOWNLOADS;  			} break;  			case SYSTEM_DIR_MOVIES: { -				what=Environment.DIRECTORY_MOVIES; +				what = Environment.DIRECTORY_MOVIES;  			} break;  			case SYSTEM_DIR_MUSIC: { -				what=Environment.DIRECTORY_MUSIC; +				what = Environment.DIRECTORY_MUSIC;  			} break;  			case SYSTEM_DIR_PICTURES: { -				what=Environment.DIRECTORY_PICTURES; +				what = Environment.DIRECTORY_PICTURES;  			} break;  			case SYSTEM_DIR_RINGTONES: { -				what=Environment.DIRECTORY_RINGTONES; +				what = Environment.DIRECTORY_RINGTONES;  			} break;  		} @@ -676,10 +644,9 @@ public class GodotIO {  	protected static final String PREFS_FILE = "device_id.xml";  	protected static final String PREFS_DEVICE_ID = "device_id"; -	public static String unique_id=""; +	public static String unique_id = "";  	public String getUniqueID() { -		return  unique_id; +		return unique_id;  	} -  } diff --git a/platform/android/java/src/org/godotengine/godot/GodotLib.java b/platform/android/java/src/org/godotengine/godot/GodotLib.java index 6b84ad6555..873d30eb34 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotLib.java +++ b/platform/android/java/src/org/godotengine/godot/GodotLib.java @@ -33,43 +33,41 @@ package org.godotengine.godot;  public class GodotLib { +	public static GodotIO io; -     public static GodotIO io; +	static { +		System.loadLibrary("godot_android"); +	} -     static { -       System.loadLibrary("godot_android"); -     } - -    /** +	/**       * @param width the current view width       * @param height the current view height       */ -     public static native void initialize(Godot p_instance,boolean need_reload_hook,Object p_asset_manager, boolean use_apk_expansion); -		 public static native void setup(String[] p_cmdline); -     public static native void resize(int width, int height,boolean reload); -     public static native void newcontext(boolean p_32_bits); -     public static native void back(); -     public static native void step(); -     public static native void touch(int what,int pointer,int howmany, int[] arr); -     public static native void accelerometer(float x, float y, float z); -     public static native void gravity(float x, float y, float z); -     public static native void magnetometer(float x, float y, float z); -     public static native void gyroscope(float x, float y, float z); -	 public static native void key(int p_scancode, int p_unicode_char, boolean p_pressed); -	 public static native void joybutton(int p_device, int p_but, boolean p_pressed); -	 public static native void joyaxis(int p_device, int p_axis, float p_value); -	 public static native void joyhat(int p_device, int p_hat_x, int p_hat_y); -	 public static native void joyconnectionchanged(int p_device, boolean p_connected, String p_name); -     public static native void focusin(); -     public static native void focusout(); -     public static native void audio(); -     public static native void singleton(String p_name,Object p_object); -     public static native void method(String p_sname,String p_name,String p_ret,String[] p_params); -     public static native String getGlobal(String p_key); +	public static native void initialize(Godot p_instance, boolean need_reload_hook, Object p_asset_manager, boolean use_apk_expansion); +	public static native void setup(String[] p_cmdline); +	public static native void resize(int width, int height, boolean reload); +	public static native void newcontext(boolean p_32_bits); +	public static native void back(); +	public static native void step(); +	public static native void touch(int what, int pointer, int howmany, int[] arr); +	public static native void accelerometer(float x, float y, float z); +	public static native void gravity(float x, float y, float z); +	public static native void magnetometer(float x, float y, float z); +	public static native void gyroscope(float x, float y, float z); +	public static native void key(int p_scancode, int p_unicode_char, boolean p_pressed); +	public static native void joybutton(int p_device, int p_but, boolean p_pressed); +	public static native void joyaxis(int p_device, int p_axis, float p_value); +	public static native void joyhat(int p_device, int p_hat_x, int p_hat_y); +	public static native void joyconnectionchanged(int p_device, boolean p_connected, String p_name); +	public static native void focusin(); +	public static native void focusout(); +	public static native void audio(); +	public static native void singleton(String p_name, Object p_object); +	public static native void method(String p_sname, String p_name, String p_ret, String[] p_params); +	public static native String getGlobal(String p_key);  	public static native void callobject(int p_ID, String p_method, Object[] p_params);  	public static native void calldeferred(int p_ID, String p_method, Object[] p_params);  	public static native void setVirtualKeyboardHeight(int p_height); -  } diff --git a/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java b/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java index 8fe79fdfc7..61d10ed9e4 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java +++ b/platform/android/java/src/org/godotengine/godot/GodotPaymentV3.java @@ -40,7 +40,6 @@ import java.util.ArrayList;  import java.util.Arrays;  import java.util.List; -  public class GodotPaymentV3 extends Godot.SingletonBase {  	private Godot activity; @@ -67,8 +66,8 @@ public class GodotPaymentV3 extends Godot.SingletonBase {  	public GodotPaymentV3(Activity p_activity) { -		registerClass("GodotPayments", new String[]{"purchase", "setPurchaseCallbackId", "setPurchaseValidationUrlPrefix", "setTransactionId", "getSignature", "consumeUnconsumedPurchases", "requestPurchased", "setAutoConsume", "consume", "querySkuDetails"}); -		activity = (Godot) p_activity; +		registerClass("GodotPayments", new String[] { "purchase", "setPurchaseCallbackId", "setPurchaseValidationUrlPrefix", "setTransactionId", "getSignature", "consumeUnconsumedPurchases", "requestPurchased", "setAutoConsume", "consume", "querySkuDetails" }); +		activity = (Godot)p_activity;  		mPaymentManager = activity.getPaymentsManager();  		mPaymentManager.setBaseSingleton(this);  	} @@ -89,32 +88,32 @@ public class GodotPaymentV3 extends Godot.SingletonBase {  	}  	public void callbackSuccess(String ticket, String signature, String sku) { -		GodotLib.calldeferred(purchaseCallbackId, "purchase_success", new Object[]{ticket, signature, sku}); +		GodotLib.calldeferred(purchaseCallbackId, "purchase_success", new Object[] { ticket, signature, sku });  	}  	public void callbackSuccessProductMassConsumed(String ticket, String signature, String sku) {  		Log.d(this.getClass().getName(), "callbackSuccessProductMassConsumed > " + ticket + "," + signature + "," + sku); -		GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[]{ticket, signature, sku}); +		GodotLib.calldeferred(purchaseCallbackId, "consume_success", new Object[] { ticket, signature, sku });  	}  	public void callbackSuccessNoUnconsumedPurchases() { -		GodotLib.calldeferred(purchaseCallbackId, "consume_not_required", new Object[]{}); +		GodotLib.calldeferred(purchaseCallbackId, "consume_not_required", new Object[] {});  	}  	public void callbackFailConsume() { -		GodotLib.calldeferred(purchaseCallbackId, "consume_fail", new Object[]{}); +		GodotLib.calldeferred(purchaseCallbackId, "consume_fail", new Object[] {});  	}  	public void callbackFail() { -		GodotLib.calldeferred(purchaseCallbackId, "purchase_fail", new Object[]{}); +		GodotLib.calldeferred(purchaseCallbackId, "purchase_fail", new Object[] {});  	}  	public void callbackCancel() { -		GodotLib.calldeferred(purchaseCallbackId, "purchase_cancel", new Object[]{}); +		GodotLib.calldeferred(purchaseCallbackId, "purchase_cancel", new Object[] {});  	}  	public void callbackAlreadyOwned(String sku) { -		GodotLib.calldeferred(purchaseCallbackId, "purchase_owned", new Object[]{sku}); +		GodotLib.calldeferred(purchaseCallbackId, "purchase_owned", new Object[] { sku });  	}  	public int getPurchaseCallbackId() { @@ -161,7 +160,7 @@ public class GodotPaymentV3 extends Godot.SingletonBase {  	// callback for requestPurchased()  	public void callbackPurchased(String receipt, String signature, String sku) { -		GodotLib.calldeferred(purchaseCallbackId, "has_purchased", new Object[]{receipt, signature, sku}); +		GodotLib.calldeferred(purchaseCallbackId, "has_purchased", new Object[] { receipt, signature, sku });  	}  	// consume item automatically after purchase. default is true. @@ -210,10 +209,10 @@ public class GodotPaymentV3 extends Godot.SingletonBase {  	}  	public void completeSkuDetail() { -		GodotLib.calldeferred(purchaseCallbackId, "sku_details_complete", new Object[]{mSkuDetails}); +		GodotLib.calldeferred(purchaseCallbackId, "sku_details_complete", new Object[] { mSkuDetails });  	}  	public void errorSkuDetail(String errorMessage) { -		GodotLib.calldeferred(purchaseCallbackId, "sku_details_error", new Object[]{errorMessage}); +		GodotLib.calldeferred(purchaseCallbackId, "sku_details_error", new Object[] { errorMessage });  	}  } diff --git a/platform/android/java/src/org/godotengine/godot/GodotView.java b/platform/android/java/src/org/godotengine/godot/GodotView.java index b807b952d4..b762aa021a 100644 --- a/platform/android/java/src/org/godotengine/godot/GodotView.java +++ b/platform/android/java/src/org/godotengine/godot/GodotView.java @@ -77,20 +77,19 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  	private static Context ctx;  	private static GodotIO io; -	private static boolean firsttime=true; -	private static boolean use_gl3=false; -	private static boolean use_32=false; +	private static boolean firsttime = true; +	private static boolean use_gl3 = false; +	private static boolean use_32 = false;  	private Godot activity; -  	private InputManagerCompat mInputManager; -	public GodotView(Context context,GodotIO p_io,boolean p_use_gl3, boolean p_use_32_bits, Godot p_activity) { +	public GodotView(Context context, GodotIO p_io, boolean p_use_gl3, boolean p_use_32_bits, Godot p_activity) {  		super(context); -		ctx=context; -		io=p_io; -		use_gl3=p_use_gl3; -		use_32=p_use_32_bits; +		ctx = context; +		io = p_io; +		use_gl3 = p_use_gl3; +		use_32 = p_use_32_bits;  		activity = p_activity; @@ -101,14 +100,15 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  		mInputManager = InputManagerCompat.Factory.getInputManager(this.getContext());  		mInputManager.registerInputDeviceListener(this, null);  		init(false, 16, 0); -    } +	} -    public GodotView(Context context, boolean translucent, int depth, int stencil) { +	public GodotView(Context context, boolean translucent, int depth, int stencil) {  		super(context);  		init(translucent, depth, stencil); -    } +	} -	@Override public boolean onTouchEvent (MotionEvent event) { +	@Override +	public boolean onTouchEvent(MotionEvent event) {  		return activity.gotTouchEvent(event);  	}; @@ -196,16 +196,17 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  	ArrayList<joystick> joy_devices = new ArrayList<joystick>();  	private int find_joy_device(int device_id) { -		for (int i=0; i<joy_devices.size(); i++) { +		for (int i = 0; i < joy_devices.size(); i++) {  			if (joy_devices.get(i).device_id == device_id) { -					return i; +				return i;  			}  		}  		onInputDeviceAdded(device_id);  		return joy_devices.size() - 1;  	} -	@Override public void onInputDeviceAdded(int deviceId) { +	@Override +	public void onInputDeviceAdded(int deviceId) {  		joystick joy = new joystick();  		joy.device_id = deviceId;  		final int id = joy_devices.size(); @@ -219,8 +220,7 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  		for (InputDevice.MotionRange range : ranges) {  			if (range.getAxis() == MotionEvent.AXIS_HAT_X || range.getAxis() == MotionEvent.AXIS_HAT_Y) {  				joy.hats.add(range); -			} -			else { +			} else {  				joy.axes.add(range);  			}  		} @@ -231,9 +231,10 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  				GodotLib.joyconnectionchanged(id, true, name);  			}  		}); -  } +	} -	@Override public void onInputDeviceRemoved(int deviceId) { +	@Override +	public void onInputDeviceRemoved(int deviceId) {  		final int id = find_joy_device(deviceId);  		joy_devices.remove(id);  		queueEvent(new Runnable() { @@ -244,10 +245,11 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  		});  	} -	@Override public void onInputDeviceChanged(int deviceId) { - +	@Override +	public void onInputDeviceChanged(int deviceId) {  	} -	@Override public boolean onKeyUp(final int keyCode, KeyEvent event) { +	@Override +	public boolean onKeyUp(final int keyCode, KeyEvent event) {  		if (keyCode == KeyEvent.KEYCODE_BACK) {  			return true; @@ -282,7 +284,8 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  		return super.onKeyUp(keyCode, event);  	}; -	@Override public boolean onKeyDown(final int keyCode, KeyEvent event) { +	@Override +	public boolean onKeyDown(final int keyCode, KeyEvent event) {  		if (keyCode == KeyEvent.KEYCODE_BACK) {  			activity.onBackPressed(); @@ -326,7 +329,8 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  		return super.onKeyDown(keyCode, event);  	} -	@Override public boolean onGenericMotionEvent(MotionEvent event) { +	@Override +	public boolean onGenericMotionEvent(MotionEvent event) {  		if ((event.getSource() & InputDevice.SOURCE_JOYSTICK) == InputDevice.SOURCE_JOYSTICK && event.getAction() == MotionEvent.ACTION_MOVE) { @@ -335,7 +339,7 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  			for (int i = 0; i < joy.axes.size(); i++) {  				InputDevice.MotionRange range = joy.axes.get(i); -				final float value = (event.getAxisValue(range.getAxis()) - range.getMin() ) / range.getRange() * 2.0f - 1.0f; +				final float value = (event.getAxisValue(range.getAxis()) - range.getMin()) / range.getRange() * 2.0f - 1.0f;  				//Log.e(TAG, String.format("axis event: %d, value %f", i, value));  				final int idx = i;  				queueEvent(new Runnable() { @@ -346,9 +350,9 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  				});  			} -			for (int i = 0; i < joy.hats.size(); i+=2) { +			for (int i = 0; i < joy.hats.size(); i += 2) {  				final int hatX = Math.round(event.getAxisValue(joy.hats.get(i).getAxis())); -				final int hatY = Math.round(event.getAxisValue(joy.hats.get(i+1).getAxis())); +				final int hatY = Math.round(event.getAxisValue(joy.hats.get(i + 1).getAxis()));  				//Log.e(TAG, String.format("HAT EVENT %d, %d", hatX, hatY));  				queueEvent(new Runnable() {  					@Override @@ -363,8 +367,7 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  		return super.onGenericMotionEvent(event);  	}; - -    private void init(boolean translucent, int depth, int stencil) { +	private void init(boolean translucent, int depth, int stencil) {  		this.setFocusableInTouchMode(true);  		/* By default, GLSurfaceView() creates a RGB_565 opaque surface. @@ -388,14 +391,14 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  		 */  		if (use_32) { -			setEGLConfigChooser( translucent ? -						new FallbackConfigChooser(8, 8, 8, 8, 24, stencil, new ConfigChooser(8, 8, 8, 8, 16, stencil)) : -						new FallbackConfigChooser(8, 8, 8, 8, 24, stencil, new ConfigChooser(5, 6, 5, 0, 16, stencil)) ); +			setEGLConfigChooser(translucent ? +										new FallbackConfigChooser(8, 8, 8, 8, 24, stencil, new ConfigChooser(8, 8, 8, 8, 16, stencil)) : +										new FallbackConfigChooser(8, 8, 8, 8, 24, stencil, new ConfigChooser(5, 6, 5, 0, 16, stencil)));  		} else { -			setEGLConfigChooser( translucent ? -						new ConfigChooser(8, 8, 8, 8, 16, stencil) : -						new ConfigChooser(5, 6, 5, 0, 16, stencil) ); +			setEGLConfigChooser(translucent ? +										new ConfigChooser(8, 8, 8, 8, 16, stencil) : +										new ConfigChooser(5, 6, 5, 0, 16, stencil));  		}  		/* Set the renderer responsible for frame rendering */ @@ -403,33 +406,33 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  	}  	private static class ContextFactory implements GLSurfaceView.EGLContextFactory { -	private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098; -	public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) { -		if (use_gl3) -			Log.w(TAG, "creating OpenGL ES 3.0 context :"); -		else -			Log.w(TAG, "creating OpenGL ES 2.0 context :"); - -		checkEglError("Before eglCreateContext", egl); -		int[] attrib_list2 = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE }; -		int[] attrib_list3 = {EGL_CONTEXT_CLIENT_VERSION, 3, EGL10.EGL_NONE }; -		EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, use_gl3?attrib_list3:attrib_list2); -		checkEglError("After eglCreateContext", egl); -		return context; -	} +		private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098; +		public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) { +			if (use_gl3) +				Log.w(TAG, "creating OpenGL ES 3.0 context :"); +			else +				Log.w(TAG, "creating OpenGL ES 2.0 context :"); + +			checkEglError("Before eglCreateContext", egl); +			int[] attrib_list2 = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE }; +			int[] attrib_list3 = { EGL_CONTEXT_CLIENT_VERSION, 3, EGL10.EGL_NONE }; +			EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, use_gl3 ? attrib_list3 : attrib_list2); +			checkEglError("After eglCreateContext", egl); +			return context; +		} -	public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context) { -	    egl.eglDestroyContext(display, context); +		public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context) { +			egl.eglDestroyContext(display, context); +		}  	} -    } -    private static void checkEglError(String prompt, EGL10 egl) { -	int error; -	while ((error = egl.eglGetError()) != EGL10.EGL_SUCCESS) { -	    Log.e(TAG, String.format("%s: EGL error: 0x%x", prompt, error)); +	private static void checkEglError(String prompt, EGL10 egl) { +		int error; +		while ((error = egl.eglGetError()) != EGL10.EGL_SUCCESS) { +			Log.e(TAG, String.format("%s: EGL error: 0x%x", prompt, error)); +		}  	} -    } -    	/* Fallback if 32bit View is not supported*/ +	/* Fallback if 32bit View is not supported*/  	private static class FallbackConfigChooser extends ConfigChooser {  		private ConfigChooser fallback; @@ -438,17 +441,17 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  			this.fallback = fallback;  		} -      		@Override +		@Override  		public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display, EGLConfig[] configs) {  			EGLConfig ec = super.chooseConfig(egl, display, configs);  			if (ec == null) { -	  			Log.w(TAG, "Trying ConfigChooser fallback"); -	  			ec = fallback.chooseConfig(egl, display, configs); -				use_32=false; +				Log.w(TAG, "Trying ConfigChooser fallback"); +				ec = fallback.chooseConfig(egl, display, configs); +				use_32 = false;  			}  			return ec; -      		} -    	} +		} +	}  	private static class ConfigChooser implements GLSurfaceView.EGLConfigChooser { @@ -467,46 +470,46 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  		 */  		private static int EGL_OPENGL_ES2_BIT = 4;  		private static int[] s_configAttribs2 = -		{ -			EGL10.EGL_RED_SIZE, 4, -			EGL10.EGL_GREEN_SIZE, 4, -			EGL10.EGL_BLUE_SIZE, 4, -		  //  EGL10.EGL_DEPTH_SIZE,     16, -		   // EGL10.EGL_STENCIL_SIZE,   EGL10.EGL_DONT_CARE, -			EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, -			EGL10.EGL_NONE -		}; +				{ +					EGL10.EGL_RED_SIZE, 4, +					EGL10.EGL_GREEN_SIZE, 4, +					EGL10.EGL_BLUE_SIZE, 4, +					//  EGL10.EGL_DEPTH_SIZE,     16, +					// EGL10.EGL_STENCIL_SIZE,   EGL10.EGL_DONT_CARE, +					EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, +					EGL10.EGL_NONE +				};  		private static int[] s_configAttribs3 = -		{ -			EGL10.EGL_RED_SIZE, 4, -			EGL10.EGL_GREEN_SIZE, 4, -			EGL10.EGL_BLUE_SIZE, 4, -		   // EGL10.EGL_DEPTH_SIZE,     16, -		  //  EGL10.EGL_STENCIL_SIZE,   EGL10.EGL_DONT_CARE, -			EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, //apparently there is no EGL_OPENGL_ES3_BIT -			EGL10.EGL_NONE -		}; +				{ +					EGL10.EGL_RED_SIZE, 4, +					EGL10.EGL_GREEN_SIZE, 4, +					EGL10.EGL_BLUE_SIZE, 4, +					// EGL10.EGL_DEPTH_SIZE,     16, +					//  EGL10.EGL_STENCIL_SIZE,   EGL10.EGL_DONT_CARE, +					EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, //apparently there is no EGL_OPENGL_ES3_BIT +					EGL10.EGL_NONE +				};  		public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {  			/* Get the number of minimally matching EGL configurations  			 */  			int[] num_config = new int[1]; -			egl.eglChooseConfig(display, use_gl3?s_configAttribs3:s_configAttribs2, null, 0, num_config); +			egl.eglChooseConfig(display, use_gl3 ? s_configAttribs3 : s_configAttribs2, null, 0, num_config);  			int numConfigs = num_config[0];  			if (numConfigs <= 0) { -			throw new IllegalArgumentException("No configs match configSpec"); +				throw new IllegalArgumentException("No configs match configSpec");  			}  			/* Allocate then read the array of minimally matching EGL configs  			 */  			EGLConfig[] configs = new EGLConfig[numConfigs]; -			egl.eglChooseConfig(display, use_gl3?s_configAttribs3:s_configAttribs2, configs, numConfigs, num_config); +			egl.eglChooseConfig(display, use_gl3 ? s_configAttribs3 : s_configAttribs2, configs, numConfigs, num_config);  			if (DEBUG) { -			 printConfigs(egl, display, configs); +				printConfigs(egl, display, configs);  			}  			/* Now return the "best" one  			 */ @@ -514,54 +517,54 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  		}  		public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display, -			EGLConfig[] configs) { -			for(EGLConfig config : configs) { -			int d = findConfigAttrib(egl, display, config, -				EGL10.EGL_DEPTH_SIZE, 0); -			int s = findConfigAttrib(egl, display, config, -				EGL10.EGL_STENCIL_SIZE, 0); - -			// We need at least mDepthSize and mStencilSize bits -			if (d < mDepthSize || s < mStencilSize) -				continue; - -			// We want an *exact* match for red/green/blue/alpha -			int r = findConfigAttrib(egl, display, config, -				EGL10.EGL_RED_SIZE, 0); -			int g = findConfigAttrib(egl, display, config, -					EGL10.EGL_GREEN_SIZE, 0); -			int b = findConfigAttrib(egl, display, config, -					EGL10.EGL_BLUE_SIZE, 0); -			int a = findConfigAttrib(egl, display, config, -				EGL10.EGL_ALPHA_SIZE, 0); - -			if (r == mRedSize && g == mGreenSize && b == mBlueSize && a == mAlphaSize) -				return config; +				EGLConfig[] configs) { +			for (EGLConfig config : configs) { +				int d = findConfigAttrib(egl, display, config, +						EGL10.EGL_DEPTH_SIZE, 0); +				int s = findConfigAttrib(egl, display, config, +						EGL10.EGL_STENCIL_SIZE, 0); + +				// We need at least mDepthSize and mStencilSize bits +				if (d < mDepthSize || s < mStencilSize) +					continue; + +				// We want an *exact* match for red/green/blue/alpha +				int r = findConfigAttrib(egl, display, config, +						EGL10.EGL_RED_SIZE, 0); +				int g = findConfigAttrib(egl, display, config, +						EGL10.EGL_GREEN_SIZE, 0); +				int b = findConfigAttrib(egl, display, config, +						EGL10.EGL_BLUE_SIZE, 0); +				int a = findConfigAttrib(egl, display, config, +						EGL10.EGL_ALPHA_SIZE, 0); + +				if (r == mRedSize && g == mGreenSize && b == mBlueSize && a == mAlphaSize) +					return config;  			}  			return null;  		}  		private int findConfigAttrib(EGL10 egl, EGLDisplay display, -			EGLConfig config, int attribute, int defaultValue) { +				EGLConfig config, int attribute, int defaultValue) {  			if (egl.eglGetConfigAttrib(display, config, attribute, mValue)) { -			return mValue[0]; +				return mValue[0];  			}  			return defaultValue;  		}  		private void printConfigs(EGL10 egl, EGLDisplay display, -			EGLConfig[] configs) { +				EGLConfig[] configs) {  			int numConfigs = configs.length;  			Log.w(TAG, String.format("%d configurations", numConfigs));  			for (int i = 0; i < numConfigs; i++) { -			Log.w(TAG, String.format("Configuration %d:\n", i)); -			printConfig(egl, display, configs[i]); +				Log.w(TAG, String.format("Configuration %d:\n", i)); +				printConfig(egl, display, configs[i]);  			}  		}  		private void printConfig(EGL10 egl, EGLDisplay display, -			EGLConfig config) { +				EGLConfig config) {  			int[] attributes = {  				EGL10.EGL_BUFFER_SIZE,  				EGL10.EGL_ALPHA_SIZE, @@ -634,14 +637,15 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  			};  			int[] value = new int[1];  			for (int i = 0; i < attributes.length; i++) { -			int attribute = attributes[i]; -			String name = names[i]; -			if ( egl.eglGetConfigAttrib(display, config, attribute, value)) { -				Log.w(TAG, String.format("  %s: %d\n", name, value[0])); -			} else { -				// Log.w(TAG, String.format("  %s: failed\n", name)); -				while (egl.eglGetError() != EGL10.EGL_SUCCESS); -			} +				int attribute = attributes[i]; +				String name = names[i]; +				if (egl.eglGetConfigAttrib(display, config, attribute, value)) { +					Log.w(TAG, String.format("  %s: %d\n", name, value[0])); +				} else { +					// Log.w(TAG, String.format("  %s: failed\n", name)); +					while (egl.eglGetError() != EGL10.EGL_SUCCESS) +						; +				}  			}  		} @@ -657,19 +661,18 @@ public class GodotView extends GLSurfaceView implements InputDeviceListener {  	private static class Renderer implements GLSurfaceView.Renderer { -  		public void onDrawFrame(GL10 gl) {  			GodotLib.step(); -			for(int i=0;i<Godot.singleton_count;i++) { +			for (int i = 0; i < Godot.singleton_count; i++) {  				Godot.singletons[i].onGLDrawFrame(gl);  			}  		}  		public void onSurfaceChanged(GL10 gl, int width, int height) { -			GodotLib.resize(width, height,!firsttime); -			firsttime=false; -			for(int i=0;i<Godot.singleton_count;i++) { +			GodotLib.resize(width, height, !firsttime); +			firsttime = false; +			for (int i = 0; i < Godot.singleton_count; i++) {  				Godot.singletons[i].onGLSurfaceChanged(gl, width, height);  			}  		} diff --git a/platform/android/java/src/org/godotengine/godot/input/GodotEditText.java b/platform/android/java/src/org/godotengine/godot/input/GodotEditText.java index d8a3ac5591..9e062d89c6 100644 --- a/platform/android/java/src/org/godotengine/godot/input/GodotEditText.java +++ b/platform/android/java/src/org/godotengine/godot/input/GodotEditText.java @@ -70,42 +70,37 @@ public class GodotEditText extends EditText {  		super(context, attrs, defStyle);  		this.initView();  	} -	 +  	protected void initView() { -		this.setPadding(0,  0, 0, 0); +		this.setPadding(0, 0, 0, 0);  		this.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); -		 +  		sHandler = new Handler() {  			@Override  			public void handleMessage(final Message msg) {  				switch (msg.what) { -					case HANDLER_OPEN_IME_KEYBOARD: -						{ -							GodotEditText edit = (GodotEditText) msg.obj; -							String text = edit.mOriginText; -							if (edit.requestFocus()) -							{ -								edit.removeTextChangedListener(edit.mInputWrapper); -								edit.setText(""); -								edit.append(text); -								edit.mInputWrapper.setOriginText(text); -								edit.addTextChangedListener(edit.mInputWrapper); -								final InputMethodManager imm = (InputMethodManager) mView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); -								imm.showSoftInput(edit, 0); -							} +					case HANDLER_OPEN_IME_KEYBOARD: { +						GodotEditText edit = (GodotEditText)msg.obj; +						String text = edit.mOriginText; +						if (edit.requestFocus()) { +							edit.removeTextChangedListener(edit.mInputWrapper); +							edit.setText(""); +							edit.append(text); +							edit.mInputWrapper.setOriginText(text); +							edit.addTextChangedListener(edit.mInputWrapper); +							final InputMethodManager imm = (InputMethodManager)mView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); +							imm.showSoftInput(edit, 0);  						} -						break; - -					case HANDLER_CLOSE_IME_KEYBOARD: -						{ -							GodotEditText edit = (GodotEditText) msg.obj; -							 -							edit.removeTextChangedListener(mInputWrapper); -							final InputMethodManager imm = (InputMethodManager) mView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); -							imm.hideSoftInputFromWindow(edit.getWindowToken(), 0); -							edit.mView.requestFocus(); -						} -						break; +					} break; + +					case HANDLER_CLOSE_IME_KEYBOARD: { +						GodotEditText edit = (GodotEditText)msg.obj; + +						edit.removeTextChangedListener(mInputWrapper); +						final InputMethodManager imm = (InputMethodManager)mView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); +						imm.hideSoftInputFromWindow(edit.getWindowToken(), 0); +						edit.mView.requestFocus(); +					} break;  				}  			}  		}; @@ -116,7 +111,7 @@ public class GodotEditText extends EditText {  	// ===========================================================  	public void setView(final GodotView view) {  		this.mView = view; -		if(mInputWrapper == null) +		if (mInputWrapper == null)  			mInputWrapper = new GodotTextInputWrapper(mView, this);  		this.setOnEditorActionListener(mInputWrapper);  		view.requestFocus(); @@ -125,7 +120,7 @@ public class GodotEditText extends EditText {  	// ===========================================================  	// Methods for/from SuperClass/Interfaces  	// =========================================================== -    @Override +	@Override  	public boolean onKeyDown(final int keyCode, final KeyEvent keyEvent) {  		super.onKeyDown(keyCode, keyEvent); @@ -142,7 +137,7 @@ public class GodotEditText extends EditText {  	// ===========================================================  	public void showKeyboard(String p_existing_text) {  		this.mOriginText = p_existing_text; -		 +  		final Message msg = new Message();  		msg.what = HANDLER_OPEN_IME_KEYBOARD;  		msg.obj = this; @@ -155,7 +150,7 @@ public class GodotEditText extends EditText {  		msg.obj = this;  		sHandler.sendMessage(msg);  	} -	 +  	// ===========================================================  	// Inner and Anonymous Classes  	// =========================================================== diff --git a/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java b/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java index ac424ab9f8..8e34d9e9e7 100644 --- a/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java +++ b/platform/android/java/src/org/godotengine/godot/input/GodotTextInputWrapper.java @@ -67,7 +67,7 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene  	private boolean isFullScreenEdit() {  		final TextView textField = this.mEdit; -		final InputMethodManager imm = (InputMethodManager) textField.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); +		final InputMethodManager imm = (InputMethodManager)textField.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);  		return imm.isFullscreenMode();  	} @@ -81,7 +81,6 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene  	@Override  	public void afterTextChanged(final Editable s) { -  	}  	@Override diff --git a/platform/android/java/src/org/godotengine/godot/input/InputManagerCompat.java b/platform/android/java/src/org/godotengine/godot/input/InputManagerCompat.java index 4615d2fbb5..0a876d2b7f 100644 --- a/platform/android/java/src/org/godotengine/godot/input/InputManagerCompat.java +++ b/platform/android/java/src/org/godotengine/godot/input/InputManagerCompat.java @@ -23,118 +23,118 @@ import android.view.InputDevice;  import android.view.MotionEvent;  public interface InputManagerCompat { -    /** -     * Gets information about the input device with the specified id. -     * -     * @param id The device id -     * @return The input device or null if not found -     */ -    public InputDevice getInputDevice(int id); +	/** +	 * Gets information about the input device with the specified id. +	 * +	 * @param id The device id +	 * @return The input device or null if not found +	 */ +	public InputDevice getInputDevice(int id); -    /** -     * Gets the ids of all input devices in the system. -     * -     * @return The input device ids. -     */ -    public int[] getInputDeviceIds(); +	/** +	 * Gets the ids of all input devices in the system. +	 * +	 * @return The input device ids. +	 */ +	public int[] getInputDeviceIds(); -    /** -     * Registers an input device listener to receive notifications about when -     * input devices are added, removed or changed. -     * -     * @param listener The listener to register. -     * @param handler The handler on which the listener should be invoked, or -     *            null if the listener should be invoked on the calling thread's -     *            looper. -     */ -    public void registerInputDeviceListener(InputManagerCompat.InputDeviceListener listener, -            Handler handler); +	/** +	 * Registers an input device listener to receive notifications about when +	 * input devices are added, removed or changed. +	 * +	 * @param listener The listener to register. +	 * @param handler The handler on which the listener should be invoked, or +	 *            null if the listener should be invoked on the calling thread's +	 *            looper. +	 */ +	public void registerInputDeviceListener(InputManagerCompat.InputDeviceListener listener, +			Handler handler); -    /** -     * Unregisters an input device listener. -     * -     * @param listener The listener to unregister. -     */ -    public void unregisterInputDeviceListener(InputManagerCompat.InputDeviceListener listener); +	/** +	 * Unregisters an input device listener. +	 * +	 * @param listener The listener to unregister. +	 */ +	public void unregisterInputDeviceListener(InputManagerCompat.InputDeviceListener listener); -    /* -     * The following three calls are to simulate V16 behavior on pre-Jellybean -     * devices. If you don't call them, your callback will never be called -     * pre-API 16. -     */ +	/* +	 * The following three calls are to simulate V16 behavior on pre-Jellybean +	 * devices. If you don't call them, your callback will never be called +	 * pre-API 16. +	 */ -    /** -     * Pass the motion events to the InputManagerCompat. This is used to -     * optimize for polling for controllers. If you do not pass these events in, -     * polling will cause regular object creation. -     * -     * @param event the motion event from the app -     */ -    public void onGenericMotionEvent(MotionEvent event); +	/** +	 * Pass the motion events to the InputManagerCompat. This is used to +	 * optimize for polling for controllers. If you do not pass these events in, +	 * polling will cause regular object creation. +	 * +	 * @param event the motion event from the app +	 */ +	public void onGenericMotionEvent(MotionEvent event); -    /** -     * Tell the V9 input manager that it should stop polling for disconnected -     * devices. You can call this during onPause in your activity, although you -     * might want to call it whenever your game is not active (or whenever you -     * don't care about being notified of new input devices) -     */ -    public void onPause(); +	/** +	 * Tell the V9 input manager that it should stop polling for disconnected +	 * devices. You can call this during onPause in your activity, although you +	 * might want to call it whenever your game is not active (or whenever you +	 * don't care about being notified of new input devices) +	 */ +	public void onPause(); -    /** -     * Tell the V9 input manager that it should start polling for disconnected -     * devices. You can call this during onResume in your activity, although you -     * might want to call it less often (only when the gameplay is actually -     * active) -     */ -    public void onResume(); +	/** +	 * Tell the V9 input manager that it should start polling for disconnected +	 * devices. You can call this during onResume in your activity, although you +	 * might want to call it less often (only when the gameplay is actually +	 * active) +	 */ +	public void onResume(); -    public interface InputDeviceListener { -        /** -         * Called whenever the input manager detects that a device has been -         * added. This will only be called in the V9 version when a motion event -         * is detected. -         * -         * @param deviceId The id of the input device that was added. -         */ -        void onInputDeviceAdded(int deviceId); +	public interface InputDeviceListener { +		/** +		 * Called whenever the input manager detects that a device has been +		 * added. This will only be called in the V9 version when a motion event +		 * is detected. +		 * +		 * @param deviceId The id of the input device that was added. +		 */ +		void onInputDeviceAdded(int deviceId); -        /** -         * Called whenever the properties of an input device have changed since -         * they were last queried. This will not be called for the V9 version of -         * the API. -         * -         * @param deviceId The id of the input device that changed. -         */ -        void onInputDeviceChanged(int deviceId); +		/** +		 * Called whenever the properties of an input device have changed since +		 * they were last queried. This will not be called for the V9 version of +		 * the API. +		 * +		 * @param deviceId The id of the input device that changed. +		 */ +		void onInputDeviceChanged(int deviceId); -        /** -         * Called whenever the input manager detects that a device has been -         * removed. For the V9 version, this can take some time depending on the -         * poll rate. -         * -         * @param deviceId The id of the input device that was removed. -         */ -        void onInputDeviceRemoved(int deviceId); -    } +		/** +		 * Called whenever the input manager detects that a device has been +		 * removed. For the V9 version, this can take some time depending on the +		 * poll rate. +		 * +		 * @param deviceId The id of the input device that was removed. +		 */ +		void onInputDeviceRemoved(int deviceId); +	} -    /** -     * Use this to construct a compatible InputManager. -     */ -    public static class Factory { +	/** +	 * Use this to construct a compatible InputManager. +	 */ +	public static class Factory { -        /** -         * Constructs and returns a compatible InputManger -         * -         * @param context the Context that will be used to get the system -         *            service from -         * @return a compatible implementation of InputManager -         */ -        public static InputManagerCompat getInputManager(Context context) { -            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { -                return new InputManagerV16(context); -            } else { -                return new InputManagerV9(); -            } -        } -    } +		/** +		 * Constructs and returns a compatible InputManger +		 * +		 * @param context the Context that will be used to get the system +		 *            service from +		 * @return a compatible implementation of InputManager +		 */ +		public static InputManagerCompat getInputManager(Context context) { +			if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { +				return new InputManagerV16(context); +			} else { +				return new InputManagerV9(); +			} +		} +	}  } diff --git a/platform/android/java/src/org/godotengine/godot/input/InputManagerV16.java b/platform/android/java/src/org/godotengine/godot/input/InputManagerV16.java index f05701f455..3b88609cc9 100644 --- a/platform/android/java/src/org/godotengine/godot/input/InputManagerV16.java +++ b/platform/android/java/src/org/godotengine/godot/input/InputManagerV16.java @@ -30,78 +30,74 @@ import java.util.Map;  @TargetApi(Build.VERSION_CODES.JELLY_BEAN)  public class InputManagerV16 implements InputManagerCompat { -    private final InputManager mInputManager; -    private final Map<InputManagerCompat.InputDeviceListener, V16InputDeviceListener> mListeners; - -    public InputManagerV16(Context context) { -        mInputManager = (InputManager) context.getSystemService(Context.INPUT_SERVICE); -        mListeners = new HashMap<InputManagerCompat.InputDeviceListener, V16InputDeviceListener>(); -    } - -    @Override -    public InputDevice getInputDevice(int id) { -        return mInputManager.getInputDevice(id); -    } - -    @Override -    public int[] getInputDeviceIds() { -        return mInputManager.getInputDeviceIds(); -    } - -    static class V16InputDeviceListener implements InputManager.InputDeviceListener { -        final InputManagerCompat.InputDeviceListener mIDL; - -        public V16InputDeviceListener(InputDeviceListener idl) { -            mIDL = idl; -        } - -        @Override -        public void onInputDeviceAdded(int deviceId) { -            mIDL.onInputDeviceAdded(deviceId); -        } - -        @Override -        public void onInputDeviceChanged(int deviceId) { -            mIDL.onInputDeviceChanged(deviceId); -        } - -        @Override -        public void onInputDeviceRemoved(int deviceId) { -            mIDL.onInputDeviceRemoved(deviceId); -        } - -    } - -    @Override -    public void registerInputDeviceListener(InputDeviceListener listener, Handler handler) { -        V16InputDeviceListener v16Listener = new V16InputDeviceListener(listener); -        mInputManager.registerInputDeviceListener(v16Listener, handler); -        mListeners.put(listener, v16Listener); -    } - -    @Override -    public void unregisterInputDeviceListener(InputDeviceListener listener) { -        V16InputDeviceListener curListener = mListeners.remove(listener); -        if (null != curListener) -        { -            mInputManager.unregisterInputDeviceListener(curListener); -        } - -    } - -    @Override -    public void onGenericMotionEvent(MotionEvent event) { -        // unused in V16 -    } - -    @Override -    public void onPause() { -        // unused in V16 -    } - -    @Override -    public void onResume() { -        // unused in V16 -    } - +	private final InputManager mInputManager; +	private final Map<InputManagerCompat.InputDeviceListener, V16InputDeviceListener> mListeners; + +	public InputManagerV16(Context context) { +		mInputManager = (InputManager)context.getSystemService(Context.INPUT_SERVICE); +		mListeners = new HashMap<InputManagerCompat.InputDeviceListener, V16InputDeviceListener>(); +	} + +	@Override +	public InputDevice getInputDevice(int id) { +		return mInputManager.getInputDevice(id); +	} + +	@Override +	public int[] getInputDeviceIds() { +		return mInputManager.getInputDeviceIds(); +	} + +	static class V16InputDeviceListener implements InputManager.InputDeviceListener { +		final InputManagerCompat.InputDeviceListener mIDL; + +		public V16InputDeviceListener(InputDeviceListener idl) { +			mIDL = idl; +		} + +		@Override +		public void onInputDeviceAdded(int deviceId) { +			mIDL.onInputDeviceAdded(deviceId); +		} + +		@Override +		public void onInputDeviceChanged(int deviceId) { +			mIDL.onInputDeviceChanged(deviceId); +		} + +		@Override +		public void onInputDeviceRemoved(int deviceId) { +			mIDL.onInputDeviceRemoved(deviceId); +		} +	} + +	@Override +	public void registerInputDeviceListener(InputDeviceListener listener, Handler handler) { +		V16InputDeviceListener v16Listener = new V16InputDeviceListener(listener); +		mInputManager.registerInputDeviceListener(v16Listener, handler); +		mListeners.put(listener, v16Listener); +	} + +	@Override +	public void unregisterInputDeviceListener(InputDeviceListener listener) { +		V16InputDeviceListener curListener = mListeners.remove(listener); +		if (null != curListener) { +			mInputManager.unregisterInputDeviceListener(curListener); +		} +	} + +	@Override +	public void onGenericMotionEvent(MotionEvent event) { +		// unused in V16 +	} + +	@Override +	public void onPause() { +		// unused in V16 +	} + +	@Override +	public void onResume() { +		// unused in V16 +	}  } diff --git a/platform/android/java/src/org/godotengine/godot/input/InputManagerV9.java b/platform/android/java/src/org/godotengine/godot/input/InputManagerV9.java index 0334c00997..a1418c5899 100644 --- a/platform/android/java/src/org/godotengine/godot/input/InputManagerV9.java +++ b/platform/android/java/src/org/godotengine/godot/input/InputManagerV9.java @@ -31,181 +31,179 @@ import java.util.Map;  import java.util.Queue;  public class InputManagerV9 implements InputManagerCompat { -    private static final String LOG_TAG = "InputManagerV9"; -    private static final int MESSAGE_TEST_FOR_DISCONNECT = 101; -    private static final long CHECK_ELAPSED_TIME = 3000L; - -    private static final int ON_DEVICE_ADDED = 0; -    private static final int ON_DEVICE_CHANGED = 1; -    private static final int ON_DEVICE_REMOVED = 2; - -    private final SparseArray<long[]> mDevices; -    private final Map<InputDeviceListener, Handler> mListeners; -    private final Handler mDefaultHandler; - -    private static class PollingMessageHandler extends Handler { -        private final WeakReference<InputManagerV9> mInputManager; - -        PollingMessageHandler(InputManagerV9 im) { -            mInputManager = new WeakReference<InputManagerV9>(im); -        } - -        @Override -        public void handleMessage(Message msg) { -            super.handleMessage(msg); -            switch (msg.what) { -                case MESSAGE_TEST_FOR_DISCONNECT: -                    InputManagerV9 imv = mInputManager.get(); -                    if (null != imv) { -                        long time = SystemClock.elapsedRealtime(); -                        int size = imv.mDevices.size(); -                        for (int i = 0; i < size; i++) { -                            long[] lastContact = imv.mDevices.valueAt(i); -                            if (null != lastContact) { -                                if (time - lastContact[0] > CHECK_ELAPSED_TIME) { -                                    // check to see if the device has been -                                    // disconnected -                                    int id = imv.mDevices.keyAt(i); -                                    if (null == InputDevice.getDevice(id)) { -                                        // disconnected! -                                        imv.notifyListeners(ON_DEVICE_REMOVED, id); -                                        imv.mDevices.remove(id); -                                    } else { -                                        lastContact[0] = time; -                                    } -                                } -                            } -                        } -                        sendEmptyMessageDelayed(MESSAGE_TEST_FOR_DISCONNECT, -                                CHECK_ELAPSED_TIME); -                    } -                    break; -            } -        } - -    } - -    public InputManagerV9() { -        mDevices = new SparseArray<long[]>(); -        mListeners = new HashMap<InputDeviceListener, Handler>(); -        mDefaultHandler = new PollingMessageHandler(this); -        // as a side-effect, populates our collection of watched -        // input devices -        getInputDeviceIds(); -    } - -    @Override -    public InputDevice getInputDevice(int id) { -        return InputDevice.getDevice(id); -    } - -    @Override -    public int[] getInputDeviceIds() { -        // add any hitherto unknown devices to our -        // collection of watched input devices -        int[] activeDevices = InputDevice.getDeviceIds(); -        long time = SystemClock.elapsedRealtime(); -        for ( int id : activeDevices ) { -            long[] lastContact = mDevices.get(id); -            if ( null == lastContact ) { -                // we have a new device -                mDevices.put(id, new long[] { time }); -            } -        } -        return activeDevices; -    } - -    @Override -    public void registerInputDeviceListener(InputDeviceListener listener, Handler handler) { -        mListeners.remove(listener); -        if (handler == null) { -            handler = mDefaultHandler; -        } -        mListeners.put(listener, handler); -    } - -    @Override -    public void unregisterInputDeviceListener(InputDeviceListener listener) { -        mListeners.remove(listener); -    } - -    private void notifyListeners(int why, int deviceId) { -        // the state of some device has changed -        if (!mListeners.isEmpty()) { -            // yes... this will cause an object to get created... hopefully -            // it won't happen very often -            for (InputDeviceListener listener : mListeners.keySet()) { -                Handler handler = mListeners.get(listener); -                DeviceEvent odc = DeviceEvent.getDeviceEvent(why, deviceId, listener); -                handler.post(odc); -            } -        } -    } - -    private static class DeviceEvent implements Runnable { -        private int mMessageType; -        private int mId; -        private InputDeviceListener mListener; -        private static Queue<DeviceEvent> sEventQueue = new ArrayDeque<DeviceEvent>(); - -        private DeviceEvent() { -        } - -        static DeviceEvent getDeviceEvent(int messageType, int id, -                InputDeviceListener listener) { -            DeviceEvent curChanged = sEventQueue.poll(); -            if (null == curChanged) { -                curChanged = new DeviceEvent(); -            } -            curChanged.mMessageType = messageType; -            curChanged.mId = id; -            curChanged.mListener = listener; -            return curChanged; -        } - -        @Override -        public void run() { -            switch (mMessageType) { -                case ON_DEVICE_ADDED: -                    mListener.onInputDeviceAdded(mId); -                    break; -                case ON_DEVICE_CHANGED: -                    mListener.onInputDeviceChanged(mId); -                    break; -                case ON_DEVICE_REMOVED: -                    mListener.onInputDeviceRemoved(mId); -                    break; -                default: -                    Log.e(LOG_TAG, "Unknown Message Type"); -                    break; -            } -            // dump this runnable back in the queue -            sEventQueue.offer(this); -        } -    } - -    @Override -    public void onGenericMotionEvent(MotionEvent event) { -        // detect new devices -        int id = event.getDeviceId(); -        long[] timeArray = mDevices.get(id); -        if (null == timeArray) { -            notifyListeners(ON_DEVICE_ADDED, id); -            timeArray = new long[1]; -            mDevices.put(id, timeArray); -        } -        long time = SystemClock.elapsedRealtime(); -        timeArray[0] = time; -    } - -    @Override -    public void onPause() { -        mDefaultHandler.removeMessages(MESSAGE_TEST_FOR_DISCONNECT); -    } - -    @Override -    public void onResume() { -        mDefaultHandler.sendEmptyMessage(MESSAGE_TEST_FOR_DISCONNECT); -    } - +	private static final String LOG_TAG = "InputManagerV9"; +	private static final int MESSAGE_TEST_FOR_DISCONNECT = 101; +	private static final long CHECK_ELAPSED_TIME = 3000L; + +	private static final int ON_DEVICE_ADDED = 0; +	private static final int ON_DEVICE_CHANGED = 1; +	private static final int ON_DEVICE_REMOVED = 2; + +	private final SparseArray<long[]> mDevices; +	private final Map<InputDeviceListener, Handler> mListeners; +	private final Handler mDefaultHandler; + +	private static class PollingMessageHandler extends Handler { +		private final WeakReference<InputManagerV9> mInputManager; + +		PollingMessageHandler(InputManagerV9 im) { +			mInputManager = new WeakReference<InputManagerV9>(im); +		} + +		@Override +		public void handleMessage(Message msg) { +			super.handleMessage(msg); +			switch (msg.what) { +				case MESSAGE_TEST_FOR_DISCONNECT: +					InputManagerV9 imv = mInputManager.get(); +					if (null != imv) { +						long time = SystemClock.elapsedRealtime(); +						int size = imv.mDevices.size(); +						for (int i = 0; i < size; i++) { +							long[] lastContact = imv.mDevices.valueAt(i); +							if (null != lastContact) { +								if (time - lastContact[0] > CHECK_ELAPSED_TIME) { +									// check to see if the device has been +									// disconnected +									int id = imv.mDevices.keyAt(i); +									if (null == InputDevice.getDevice(id)) { +										// disconnected! +										imv.notifyListeners(ON_DEVICE_REMOVED, id); +										imv.mDevices.remove(id); +									} else { +										lastContact[0] = time; +									} +								} +							} +						} +						sendEmptyMessageDelayed(MESSAGE_TEST_FOR_DISCONNECT, +								CHECK_ELAPSED_TIME); +					} +					break; +			} +		} +	} + +	public InputManagerV9() { +		mDevices = new SparseArray<long[]>(); +		mListeners = new HashMap<InputDeviceListener, Handler>(); +		mDefaultHandler = new PollingMessageHandler(this); +		// as a side-effect, populates our collection of watched +		// input devices +		getInputDeviceIds(); +	} + +	@Override +	public InputDevice getInputDevice(int id) { +		return InputDevice.getDevice(id); +	} + +	@Override +	public int[] getInputDeviceIds() { +		// add any hitherto unknown devices to our +		// collection of watched input devices +		int[] activeDevices = InputDevice.getDeviceIds(); +		long time = SystemClock.elapsedRealtime(); +		for (int id : activeDevices) { +			long[] lastContact = mDevices.get(id); +			if (null == lastContact) { +				// we have a new device +				mDevices.put(id, new long[] { time }); +			} +		} +		return activeDevices; +	} + +	@Override +	public void registerInputDeviceListener(InputDeviceListener listener, Handler handler) { +		mListeners.remove(listener); +		if (handler == null) { +			handler = mDefaultHandler; +		} +		mListeners.put(listener, handler); +	} + +	@Override +	public void unregisterInputDeviceListener(InputDeviceListener listener) { +		mListeners.remove(listener); +	} + +	private void notifyListeners(int why, int deviceId) { +		// the state of some device has changed +		if (!mListeners.isEmpty()) { +			// yes... this will cause an object to get created... hopefully +			// it won't happen very often +			for (InputDeviceListener listener : mListeners.keySet()) { +				Handler handler = mListeners.get(listener); +				DeviceEvent odc = DeviceEvent.getDeviceEvent(why, deviceId, listener); +				handler.post(odc); +			} +		} +	} + +	private static class DeviceEvent implements Runnable { +		private int mMessageType; +		private int mId; +		private InputDeviceListener mListener; +		private static Queue<DeviceEvent> sEventQueue = new ArrayDeque<DeviceEvent>(); + +		private DeviceEvent() { +		} + +		static DeviceEvent getDeviceEvent(int messageType, int id, +				InputDeviceListener listener) { +			DeviceEvent curChanged = sEventQueue.poll(); +			if (null == curChanged) { +				curChanged = new DeviceEvent(); +			} +			curChanged.mMessageType = messageType; +			curChanged.mId = id; +			curChanged.mListener = listener; +			return curChanged; +		} + +		@Override +		public void run() { +			switch (mMessageType) { +				case ON_DEVICE_ADDED: +					mListener.onInputDeviceAdded(mId); +					break; +				case ON_DEVICE_CHANGED: +					mListener.onInputDeviceChanged(mId); +					break; +				case ON_DEVICE_REMOVED: +					mListener.onInputDeviceRemoved(mId); +					break; +				default: +					Log.e(LOG_TAG, "Unknown Message Type"); +					break; +			} +			// dump this runnable back in the queue +			sEventQueue.offer(this); +		} +	} + +	@Override +	public void onGenericMotionEvent(MotionEvent event) { +		// detect new devices +		int id = event.getDeviceId(); +		long[] timeArray = mDevices.get(id); +		if (null == timeArray) { +			notifyListeners(ON_DEVICE_ADDED, id); +			timeArray = new long[1]; +			mDevices.put(id, timeArray); +		} +		long time = SystemClock.elapsedRealtime(); +		timeArray[0] = time; +	} + +	@Override +	public void onPause() { +		mDefaultHandler.removeMessages(MESSAGE_TEST_FOR_DISCONNECT); +	} + +	@Override +	public void onResume() { +		mDefaultHandler.sendEmptyMessage(MESSAGE_TEST_FOR_DISCONNECT); +	}  } diff --git a/platform/android/java/src/org/godotengine/godot/payments/ConsumeTask.java b/platform/android/java/src/org/godotengine/godot/payments/ConsumeTask.java index 8622f4ccff..d6f26e19b2 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/ConsumeTask.java +++ b/platform/android/java/src/org/godotengine/godot/payments/ConsumeTask.java @@ -39,33 +39,32 @@ import android.util.Log;  abstract public class ConsumeTask {  	private Context context; -	 +  	private IInAppBillingService mService; -	public ConsumeTask(IInAppBillingService mService, Context context ){ +	public ConsumeTask(IInAppBillingService mService, Context context) {  		this.context = context;  		this.mService = mService;  	} -	 -	public void consume(final String sku){ +	public void consume(final String sku) {  		//Log.d("XXX", "Consuming product " + sku);  		PaymentsCache pc = new PaymentsCache(context);  		Boolean isBlocked = pc.getConsumableFlag("block", sku);  		String _token = pc.getConsumableValue("token", sku); -		//Log.d("XXX", "token " + _token);		 -		if(!isBlocked && _token == null){ +		//Log.d("XXX", "token " + _token); +		if (!isBlocked && _token == null) {  			//_token = "inapp:"+context.getPackageName()+":android.test.purchased";  			//Log.d("XXX", "Consuming product " + sku + " with token " + _token); -		}else if(!isBlocked){ +		} else if (!isBlocked) {  			//Log.d("XXX", "It is not blocked ¿?");  			return; -		}else if(_token == null){ +		} else if (_token == null) {  			//Log.d("XXX", "No token available");  			this.error("No token for sku:" + sku);  			return;  		}  		final String token = _token; -		new AsyncTask<String, String, String>(){ +		new AsyncTask<String, String, String>() {  			@Override  			protected String doInBackground(String... params) { @@ -73,28 +72,27 @@ abstract public class ConsumeTask {  					//Log.d("XXX", "Requesting to release item.");  					int response = mService.consumePurchase(3, context.getPackageName(), token);  					//Log.d("XXX", "release response code: " + response); -					if(response == 0 || response == 8){ +					if (response == 0 || response == 8) {  						return null;  					}  				} catch (RemoteException e) {  					return e.getMessage(); -					  				}  				return "Some error";  			} -			 -			protected void onPostExecute(String param){ -				if(param == null){ -					success( new PaymentsCache(context).getConsumableValue("ticket", sku) ); -				}else{ + +			protected void onPostExecute(String param) { +				if (param == null) { +					success(new PaymentsCache(context).getConsumableValue("ticket", sku)); +				} else {  					error(param);  				}  			} -			 -		}.execute(); + +		} +				.execute();  	} -	 +  	abstract protected void success(String ticket);  	abstract protected void error(String message); -	  } diff --git a/platform/android/java/src/org/godotengine/godot/payments/GenericConsumeTask.java b/platform/android/java/src/org/godotengine/godot/payments/GenericConsumeTask.java index 0afe35510c..31f6396738 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/GenericConsumeTask.java +++ b/platform/android/java/src/org/godotengine/godot/payments/GenericConsumeTask.java @@ -36,15 +36,12 @@ import android.os.AsyncTask;  import android.os.RemoteException;  import android.util.Log; -abstract public class GenericConsumeTask extends AsyncTask<String, String, String>{ +abstract public class GenericConsumeTask extends AsyncTask<String, String, String> {  	private Context context;  	private IInAppBillingService mService; -	 -	 -	 -	public GenericConsumeTask(Context context, IInAppBillingService mService, String sku, String receipt, String signature, String token){ +	public GenericConsumeTask(Context context, IInAppBillingService mService, String sku, String receipt, String signature, String token) {  		this.context = context;  		this.mService = mService;  		this.sku = sku; @@ -52,19 +49,19 @@ abstract public class GenericConsumeTask extends AsyncTask<String, String, Strin  		this.signature = signature;  		this.token = token;  	} -	 +  	private String sku;  	private String receipt;  	private String signature;  	private String token; -	 +  	@Override  	protected String doInBackground(String... params) {  		try {  			//Log.d("godot", "Requesting to consume an item with token ." + token);  			int response = mService.consumePurchase(3, context.getPackageName(), token);  			//Log.d("godot", "consumePurchase response: " + response); -			if(response == 0 || response == 8){ +			if (response == 0 || response == 8) {  				return null;  			}  		} catch (Exception e) { @@ -72,11 +69,10 @@ abstract public class GenericConsumeTask extends AsyncTask<String, String, Strin  		}  		return null;  	} -	 -	protected void onPostExecute(String sarasa){ + +	protected void onPostExecute(String sarasa) {  		onSuccess(sku, receipt, signature, token);  	} -	 -	abstract public void onSuccess(String sku, String receipt, String signature, String token); +	abstract public void onSuccess(String sku, String receipt, String signature, String token);  } diff --git a/platform/android/java/src/org/godotengine/godot/payments/HandlePurchaseTask.java b/platform/android/java/src/org/godotengine/godot/payments/HandlePurchaseTask.java index 7318ae2fc6..80f53d16c8 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/HandlePurchaseTask.java +++ b/platform/android/java/src/org/godotengine/godot/payments/HandlePurchaseTask.java @@ -50,28 +50,26 @@ import android.util.Log;  abstract public class HandlePurchaseTask {  	private Activity context; -	 -	public HandlePurchaseTask(Activity context ){ + +	public HandlePurchaseTask(Activity context) {  		this.context = context;  	} -	 -	 -	public void handlePurchaseRequest(int resultCode, Intent data){ + +	public void handlePurchaseRequest(int resultCode, Intent data) {  		//Log.d("XXX", "Handling purchase response");  		//int responseCode = data.getIntExtra("RESPONSE_CODE", 0);  		PaymentsCache pc = new PaymentsCache(context); -		 +  		String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");  		//Log.d("XXX", "Purchase data:" + purchaseData);  		String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");  		//Log.d("XXX", "Purchase signature:" + dataSignature); -		 +  		if (resultCode == Activity.RESULT_OK) { -			 +  			try {  				//Log.d("SARLANGA", purchaseData); -				 -				 +  				JSONObject jo = new JSONObject(purchaseData);  				//String sku = jo.getString("productId");  				//alert("You have bought the " + sku + ". Excellent choice, aventurer!"); @@ -82,8 +80,8 @@ abstract public class HandlePurchaseTask {  				//Integer state = jo.getInt("purchaseState");  				String developerPayload = jo.getString("developerPayload");  				String purchaseToken = jo.getString("purchaseToken"); -				 -				if(! pc.getConsumableValue("validation_hash", productId).equals(developerPayload) ) { + +				if (!pc.getConsumableValue("validation_hash", productId).equals(developerPayload)) {  					error("Untrusted callback");  					return;  				} @@ -92,13 +90,13 @@ abstract public class HandlePurchaseTask {  				pc.setConsumableValue("ticket", productId, purchaseData);  				pc.setConsumableFlag("block", productId, true);  				pc.setConsumableValue("token", productId, purchaseToken); -				 +  				success(productId, dataSignature, purchaseData);  				return; -			}	catch (JSONException e) { +			} catch (JSONException e) {  				error(e.getMessage());  			} -		}else if( resultCode == Activity.RESULT_CANCELED){ +		} else if (resultCode == Activity.RESULT_CANCELED) {  			canceled();  		}  	} @@ -106,6 +104,4 @@ abstract public class HandlePurchaseTask {  	abstract protected void success(String sku, String signature, String ticket);  	abstract protected void error(String message);  	abstract protected void canceled(); - -	  } diff --git a/platform/android/java/src/org/godotengine/godot/payments/PaymentsCache.java b/platform/android/java/src/org/godotengine/godot/payments/PaymentsCache.java index 69ac02e902..f9828ef77d 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/PaymentsCache.java +++ b/platform/android/java/src/org/godotengine/godot/payments/PaymentsCache.java @@ -34,41 +34,38 @@ import android.content.SharedPreferences;  import android.util.Log;  public class PaymentsCache { -	 +  	public Context context; -	public PaymentsCache(Context context){ +	public PaymentsCache(Context context) {  		this.context = context;  	} -	 -	 -	public void setConsumableFlag(String set, String sku, Boolean flag){ -		SharedPreferences sharedPref = context.getSharedPreferences("consumables_" + set, Context.MODE_PRIVATE);  -	    SharedPreferences.Editor editor = sharedPref.edit(); -	    editor.putBoolean(sku, flag); -	    editor.commit(); -} -	public boolean getConsumableFlag(String set, String sku){ -	    SharedPreferences sharedPref = context.getSharedPreferences( -	    		"consumables_" + set, Context.MODE_PRIVATE); -	    return sharedPref.getBoolean(sku, false); +	public void setConsumableFlag(String set, String sku, Boolean flag) { +		SharedPreferences sharedPref = context.getSharedPreferences("consumables_" + set, Context.MODE_PRIVATE); +		SharedPreferences.Editor editor = sharedPref.edit(); +		editor.putBoolean(sku, flag); +		editor.commit();  	} +	public boolean getConsumableFlag(String set, String sku) { +		SharedPreferences sharedPref = context.getSharedPreferences( +				"consumables_" + set, Context.MODE_PRIVATE); +		return sharedPref.getBoolean(sku, false); +	} -	public void setConsumableValue(String set, String sku, String value){ -		SharedPreferences sharedPref = context.getSharedPreferences("consumables_" + set, Context.MODE_PRIVATE);  -	    SharedPreferences.Editor editor = sharedPref.edit(); -	    editor.putString(sku, value); +	public void setConsumableValue(String set, String sku, String value) { +		SharedPreferences sharedPref = context.getSharedPreferences("consumables_" + set, Context.MODE_PRIVATE); +		SharedPreferences.Editor editor = sharedPref.edit(); +		editor.putString(sku, value);  		//Log.d("XXX", "Setting asset: consumables_" + set + ":" + sku); -	    editor.commit(); +		editor.commit();  	} -	public String getConsumableValue(String set, String sku){ -	    SharedPreferences sharedPref = context.getSharedPreferences( -	    		"consumables_" + set, Context.MODE_PRIVATE); +	public String getConsumableValue(String set, String sku) { +		SharedPreferences sharedPref = context.getSharedPreferences( +				"consumables_" + set, Context.MODE_PRIVATE);  		//Log.d("XXX", "Getting asset: consumables_" + set + ":" + sku); -	    return sharedPref.getString(sku, null); +		return sharedPref.getString(sku, null);  	} -  } diff --git a/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java b/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java index b327265abb..71407566e2 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java +++ b/platform/android/java/src/org/godotengine/godot/payments/PaymentsManager.java @@ -106,7 +106,6 @@ public class PaymentsManager {  			@Override  			protected void error(String message) {  				godotPaymentV3.callbackFail(); -  			}  			@Override @@ -119,8 +118,8 @@ public class PaymentsManager {  				godotPaymentV3.callbackAlreadyOwned(sku);  			} -		}.purchase(sku, transactionId); - +		} +				.purchase(sku, transactionId);  	}  	public void consumeUnconsumedPurchases() { @@ -135,16 +134,15 @@ public class PaymentsManager {  			protected void error(String message) {  				Log.d("godot", "consumeUnconsumedPurchases :" + message);  				godotPaymentV3.callbackFailConsume(); -  			}  			@Override  			protected void notRequired() {  				Log.d("godot", "callbackSuccessNoUnconsumedPurchases :");  				godotPaymentV3.callbackSuccessNoUnconsumedPurchases(); -  			} -		}.consumeItAll(); +		} +				.consumeItAll();  	}  	public void requestPurchased() { @@ -210,9 +208,9 @@ public class PaymentsManager {  						@Override  						protected void error(String message) {  							godotPaymentV3.callbackFail(); -  						} -					}.consume(sku); +					} +							.consume(sku);  				}  			} @@ -225,7 +223,8 @@ public class PaymentsManager {  			protected void canceled() {  				godotPaymentV3.callbackCancel();  			} -		}.handlePurchaseRequest(resultCode, data); +		} +				.handlePurchaseRequest(resultCode, data);  	}  	public void validatePurchase(String purchaseToken, final String sku) { @@ -246,8 +245,8 @@ public class PaymentsManager {  					protected void error(String message) {  						godotPaymentV3.callbackFail();  					} -				}.consume(sku); - +				} +						.consume(sku);  			}  			@Override @@ -259,7 +258,8 @@ public class PaymentsManager {  			protected void canceled() {  				godotPaymentV3.callbackCancel();  			} -		}.validatePurchase(sku); +		} +				.validatePurchase(sku);  	}  	public void setAutoConsume(boolean autoConsume) { @@ -278,7 +278,8 @@ public class PaymentsManager {  			protected void error(String message) {  				godotPaymentV3.callbackFailConsume();  			} -		}.consume(sku); +		} +				.consume(sku);  	}  	// Workaround to bug where sometimes response codes come as Long instead of Integer @@ -287,8 +288,10 @@ public class PaymentsManager {  		if (o == null) {  			//logDebug("Bundle with null response code, assuming OK (known issue)");  			return BILLING_RESPONSE_RESULT_OK; -		} else if (o instanceof Integer) return ((Integer) o).intValue(); -		else if (o instanceof Long) return (int) ((Long) o).longValue(); +		} else if (o instanceof Integer) +			return ((Integer)o).intValue(); +		else if (o instanceof Long) +			return (int)((Long)o).longValue();  		else {  			//logError("Unexpected type for bundle response code.");  			//logError(o.getClass().getName()); @@ -304,25 +307,41 @@ public class PaymentsManager {  	 * It also includes the result code numerically.  	 */  	public static String getResponseDesc(int code) { -		String[] iab_msgs = ("0:OK/1:User Canceled/2:Unknown/" + -				"3:Billing Unavailable/4:Item unavailable/" + -				"5:Developer Error/6:Error/7:Item Already Owned/" + -				"8:Item not owned").split("/"); -		String[] iabhelper_msgs = ("0:OK/-1001:Remote exception during initialization/" + -				"-1002:Bad response received/" + -				"-1003:Purchase signature verification failed/" + -				"-1004:Send intent failed/" + -				"-1005:User cancelled/" + -				"-1006:Unknown purchase response/" + -				"-1007:Missing token/" + -				"-1008:Unknown error/" + -				"-1009:Subscriptions not available/" + -				"-1010:Invalid consumption attempt").split("/"); +		String[] iab_msgs = ("0:OK/1:User Canceled/2:Unknown/" +							 + +							 "3:Billing Unavailable/4:Item unavailable/" +							 + +							 "5:Developer Error/6:Error/7:Item Already Owned/" +							 + +							 "8:Item not owned") +									.split("/"); +		String[] iabhelper_msgs = ("0:OK/-1001:Remote exception during initialization/" +								   + +								   "-1002:Bad response received/" +								   + +								   "-1003:Purchase signature verification failed/" +								   + +								   "-1004:Send intent failed/" +								   + +								   "-1005:User cancelled/" +								   + +								   "-1006:Unknown purchase response/" +								   + +								   "-1007:Missing token/" +								   + +								   "-1008:Unknown error/" +								   + +								   "-1009:Subscriptions not available/" +								   + +								   "-1010:Invalid consumption attempt") +										  .split("/");  		if (code <= -1000) {  			int index = -1000 - code; -			if (index >= 0 && index < iabhelper_msgs.length) return iabhelper_msgs[index]; -			else return String.valueOf(code) + ":Unknown IAB Helper Error"; +			if (index >= 0 && index < iabhelper_msgs.length) +				return iabhelper_msgs[index]; +			else +				return String.valueOf(code) + ":Unknown IAB Helper Error";  		} else if (code < 0 || code >= iab_msgs.length)  			return String.valueOf(code) + ":Unknown";  		else @@ -375,7 +394,7 @@ public class PaymentsManager {  						ArrayList<String> responseList = skuDetails.getStringArrayList("DETAILS_LIST");  						for (String thisResponse : responseList) { -							Log.d("godot", "response = "+thisResponse); +							Log.d("godot", "response = " + thisResponse);  							godotPaymentV3.addSkuDetail(thisResponse);  						}  					} catch (RemoteException e) { @@ -385,7 +404,8 @@ public class PaymentsManager {  				}  				godotPaymentV3.completeSkuDetail();  			} -		})).start(); +		})) +				.start();  	}  	private GodotPaymentV3 godotPaymentV3; @@ -393,5 +413,4 @@ public class PaymentsManager {  	public void setBaseSingleton(GodotPaymentV3 godotPaymentV3) {  		this.godotPaymentV3 = godotPaymentV3;  	} -  } diff --git a/platform/android/java/src/org/godotengine/godot/payments/PurchaseTask.java b/platform/android/java/src/org/godotengine/godot/payments/PurchaseTask.java index 6ecea0106c..e2f08345ad 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/PurchaseTask.java +++ b/platform/android/java/src/org/godotengine/godot/payments/PurchaseTask.java @@ -50,17 +50,16 @@ import android.util.Log;  abstract public class PurchaseTask {  	private Activity context; -	 +  	private IInAppBillingService mService; -	public PurchaseTask(IInAppBillingService mService, Activity context ){ +	public PurchaseTask(IInAppBillingService mService, Activity context) {  		this.context = context;  		this.mService = mService;  	} -	  	private boolean isLooping = false; -	 -	public void purchase(final String sku, final String transactionId){ + +	public void purchase(final String sku, final String transactionId) {  		Log.d("XXX", "Starting purchase for: " + sku);  		PaymentsCache pc = new PaymentsCache(context);  		Boolean isBlocked = pc.getConsumableFlag("block", sku); @@ -75,7 +74,7 @@ abstract public class PurchaseTask {  		Bundle buyIntentBundle;  		try { -			buyIntentBundle = mService.getBuyIntent(3, context.getApplicationContext().getPackageName(), sku, "inapp", hash  ); +			buyIntentBundle = mService.getBuyIntent(3, context.getApplicationContext().getPackageName(), sku, "inapp", hash);  		} catch (RemoteException e) {  			//Log.d("XXX", "Error: " + e.getMessage());  			error(e.getMessage()); @@ -83,50 +82,45 @@ abstract public class PurchaseTask {  		}  		Object rc = buyIntentBundle.get("RESPONSE_CODE");  		int responseCode = 0; -		if(rc == null){ +		if (rc == null) {  			responseCode = PaymentsManager.BILLING_RESPONSE_RESULT_OK; -		}else if( rc instanceof Integer){ +		} else if (rc instanceof Integer) {  			responseCode = ((Integer)rc).intValue(); -		}else if( rc instanceof Long){ +		} else if (rc instanceof Long) {  			responseCode = (int)((Long)rc).longValue();  		}  		//Log.d("XXX", "Buy intent response code: " + responseCode); -		if(responseCode == 1 || responseCode == 3 || responseCode == 4){ +		if (responseCode == 1 || responseCode == 3 || responseCode == 4) {  			canceled();  			return;  		} -		if(responseCode == 7){ +		if (responseCode == 7) {  			alreadyOwned();  			return;  		} -			 -		 +  		PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT");  		pc.setConsumableValue("validation_hash", sku, hash);  		try { -			if(context == null){ +			if (context == null) {  				//Log.d("XXX", "No context!");  			} -			if(pendingIntent == null){ +			if (pendingIntent == null) {  				//Log.d("XXX", "No pending intent");  			}  			//Log.d("XXX", "Starting activity for purchase!");  			context.startIntentSenderForResult(  					pendingIntent.getIntentSender(), -					PaymentsManager.REQUEST_CODE_FOR_PURCHASE,  -					new Intent(),  +					PaymentsManager.REQUEST_CODE_FOR_PURCHASE, +					new Intent(),  					Integer.valueOf(0), Integer.valueOf(0), -					   Integer.valueOf(0)); +					Integer.valueOf(0));  		} catch (SendIntentException e) {  			error(e.getMessage());  		} -		 -		 -		  	}  	abstract protected void error(String message);  	abstract protected void canceled();  	abstract protected void alreadyOwned(); -	  } diff --git a/platform/android/java/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java b/platform/android/java/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java index d831e45694..765906d0bb 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java +++ b/platform/android/java/src/org/godotengine/godot/payments/ReleaseAllConsumablesTask.java @@ -48,69 +48,63 @@ abstract public class ReleaseAllConsumablesTask {  	private Context context;  	private IInAppBillingService mService; -	 -	public ReleaseAllConsumablesTask(IInAppBillingService mService, Context context ){ + +	public ReleaseAllConsumablesTask(IInAppBillingService mService, Context context) {  		this.context = context;  		this.mService = mService;  	} -	 -	public void consumeItAll(){ -		try{ +	public void consumeItAll() { +		try {  			//Log.d("godot", "consumeItall for " + context.getPackageName()); -			Bundle bundle = mService.getPurchases(3, context.getPackageName(), "inapp",null); -			 +			Bundle bundle = mService.getPurchases(3, context.getPackageName(), "inapp", null); +  			for (String key : bundle.keySet()) {  				Object value = bundle.get(key);  				//Log.d("godot", String.format("%s %s (%s)", key,  				//value.toString(), value.getClass().getName()));  			} -			 -			 -			if (bundle.getInt("RESPONSE_CODE") == 0){ + +			if (bundle.getInt("RESPONSE_CODE") == 0) {  				final ArrayList<String> myPurchases = bundle.getStringArrayList("INAPP_PURCHASE_DATA_LIST");  				final ArrayList<String> mySignatures = bundle.getStringArrayList("INAPP_DATA_SIGNATURE_LIST"); -				 -				if (myPurchases == null || myPurchases.size() == 0){ +				if (myPurchases == null || myPurchases.size() == 0) {  					//Log.d("godot", "No purchases!");  					notRequired();  					return;  				} -		 -				 +  				//Log.d("godot", "# products to be consumed:" + myPurchases.size()); -				for (int i=0;i<myPurchases.size();i++) -				{ -					 -					try{ +				for (int i = 0; i < myPurchases.size(); i++) { + +					try {  						String receipt = myPurchases.get(i);  						JSONObject inappPurchaseData = new JSONObject(receipt);  						String sku = inappPurchaseData.getString("productId");  						String token = inappPurchaseData.getString("purchaseToken");  						String signature = mySignatures.get(i);  						//Log.d("godot", "A punto de consumir un item con token:" + token + "\n" + receipt); -						new GenericConsumeTask(context, mService, sku, receipt,signature, token) { -							 +						new GenericConsumeTask(context, mService, sku, receipt, signature, token) { +  							@Override  							public void onSuccess(String sku, String receipt, String signature, String token) {  								ReleaseAllConsumablesTask.this.success(sku, receipt, signature, token);  							} -						}.execute(); -						 +						} +								.execute(); +  					} catch (JSONException e) {  					}  				} -  			} -		}catch(Exception e){ +		} catch (Exception e) {  			Log.d("godot", "Error releasing products:" + e.getClass().getName() + ":" + e.getMessage());  		}  	} -	 +  	abstract protected void success(String sku, String receipt, String signature, String token);  	abstract protected void error(String message);  	abstract protected void notRequired(); -	  } diff --git a/platform/android/java/src/org/godotengine/godot/payments/ValidateTask.java b/platform/android/java/src/org/godotengine/godot/payments/ValidateTask.java index 6e058c140c..3e62ef282a 100644 --- a/platform/android/java/src/org/godotengine/godot/payments/ValidateTask.java +++ b/platform/android/java/src/org/godotengine/godot/payments/ValidateTask.java @@ -55,22 +55,21 @@ abstract public class ValidateTask {  	private Activity context;  	private GodotPaymentV3 godotPaymentsV3; -	public ValidateTask(Activity context, GodotPaymentV3 godotPaymentsV3){ +	public ValidateTask(Activity context, GodotPaymentV3 godotPaymentsV3) {  		this.context = context;  		this.godotPaymentsV3 = godotPaymentsV3;  	} -	 -	public void validatePurchase(final String sku){ -		new AsyncTask<String, String, String>(){ -			 +	public void validatePurchase(final String sku) { +		new AsyncTask<String, String, String>() { +  			private ProgressDialog dialog;  			@Override -			protected void onPreExecute(){ +			protected void onPreExecute() {  				dialog = ProgressDialog.show(context, null, "Please wait...");  			} -			 +  			@Override  			protected String doInBackground(String... params) {  				PaymentsCache pc = new PaymentsCache(context); @@ -90,37 +89,34 @@ abstract public class ValidateTask {  				//Log.d("XXX", "Validation response:\n"+jsonResponse);  				return jsonResponse;  			} -			 +  			@Override -			protected void onPostExecute(String response){ -				if(dialog != null){ +			protected void onPostExecute(String response) { +				if (dialog != null) {  					dialog.dismiss();  				}  				JSONObject j;  				try {  					j = new JSONObject(response); -					if(j.getString("status").equals("OK")){ +					if (j.getString("status").equals("OK")) {  						success();  						return; -					}else if(j.getString("status") != null){ +					} else if (j.getString("status") != null) {  						error(j.getString("message")); -					}else{ +					} else {  						error("Connection error");  					}  				} catch (JSONException e) {  					error(e.getMessage()); -				}catch (Exception e){ +				} catch (Exception e) {  					error(e.getMessage());  				} - -				  			} -			 -		}.execute(); + +		} +				.execute();  	}  	abstract protected void success();  	abstract protected void error(String message);  	abstract protected void canceled(); - -	  } diff --git a/platform/android/java/src/org/godotengine/godot/utils/Crypt.java b/platform/android/java/src/org/godotengine/godot/utils/Crypt.java index 2fd66553f6..35e4e430a4 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/Crypt.java +++ b/platform/android/java/src/org/godotengine/godot/utils/Crypt.java @@ -34,34 +34,34 @@ import java.util.Random;  public class Crypt { -	public static String md5(String input){ -        try { -            // Create MD5 Hash -            MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); -            digest.update(input.getBytes()); -            byte messageDigest[] = digest.digest(); -             -            // Create Hex String -            StringBuffer hexString = new StringBuffer(); -            for (int i=0; i<messageDigest.length; i++) -                hexString.append(Integer.toHexString(0xFF & messageDigest[i])); -            return hexString.toString(); -             -        } catch (Exception e) { -            e.printStackTrace(); -        }    -        return ""; +	public static String md5(String input) { +		try { +			// Create MD5 Hash +			MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); +			digest.update(input.getBytes()); +			byte messageDigest[] = digest.digest(); + +			// Create Hex String +			StringBuffer hexString = new StringBuffer(); +			for (int i = 0; i < messageDigest.length; i++) +				hexString.append(Integer.toHexString(0xFF & messageDigest[i])); +			return hexString.toString(); + +		} catch (Exception e) { +			e.printStackTrace(); +		} +		return "";  	} -	 -	public static String createRandomHash(){ + +	public static String createRandomHash() {  		return md5(Long.toString(createRandomLong()));  	} -	 -	public static long createAbsRandomLong(){ + +	public static long createAbsRandomLong() {  		return Math.abs(createRandomLong());  	} -	 -	public static long createRandomLong(){ + +	public static long createRandomLong() {  		Random r = new Random();  		return r.nextLong();  	} diff --git a/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java b/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java index 3fc8c48397..bfcf7e3b2a 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java +++ b/platform/android/java/src/org/godotengine/godot/utils/CustomSSLSocketFactory.java @@ -42,30 +42,29 @@ import javax.net.ssl.TrustManagerFactory;  import org.apache.http.conn.ssl.SSLSocketFactory; -  /**   *    * @author Luis Linietsky <luis.linietsky@gmail.com>   */  public class CustomSSLSocketFactory extends SSLSocketFactory { -    SSLContext sslContext = SSLContext.getInstance("TLS"); +	SSLContext sslContext = SSLContext.getInstance("TLS"); -    public CustomSSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { -        super(truststore); +	public CustomSSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { +		super(truststore); -        TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); -        tmf.init(truststore); +		TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509"); +		tmf.init(truststore); -        sslContext.init(null, tmf.getTrustManagers(), null); -    } +		sslContext.init(null, tmf.getTrustManagers(), null); +	} -    @Override -    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { -        return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose); -    } +	@Override +	public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { +		return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose); +	} -    @Override -    public Socket createSocket() throws IOException { -        return sslContext.getSocketFactory().createSocket(); -    } +	@Override +	public Socket createSocket() throws IOException { +		return sslContext.getSocketFactory().createSocket(); +	}  } diff --git a/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java b/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java index 0711f30b8b..81a642af9f 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java +++ b/platform/android/java/src/org/godotengine/godot/utils/HttpRequester.java @@ -63,7 +63,6 @@ import org.apache.http.params.HttpProtocolParams;  import org.apache.http.protocol.HTTP;  import org.apache.http.util.EntityUtils; -  import android.content.Context;  import android.content.SharedPreferences;  import android.util.Log; @@ -73,155 +72,154 @@ import android.util.Log;   * @author Luis Linietsky <luis.linietsky@gmail.com>   */  public class HttpRequester { -	 +  	private Context context; -	private static final int TTL = 600000; // 10 minutos  -	private long cttl=0; -	 -	public HttpRequester(){ +	private static final int TTL = 600000; // 10 minutos +	private long cttl = 0; + +	public HttpRequester() {  		//Log.d("XXX", "Creando http request sin contexto");  	} -	 -	public HttpRequester(Context context){ -		this.context=context; + +	public HttpRequester(Context context) { +		this.context = context;  		//Log.d("XXX", "Creando http request con contexto");  	} -	 -	public String post(RequestParams params){ -	    HttpPost httppost = new HttpPost(params.getUrl()); -        try { + +	public String post(RequestParams params) { +		HttpPost httppost = new HttpPost(params.getUrl()); +		try {  			httppost.setEntity(new UrlEncodedFormEntity(params.toPairsList()));  			return request(httppost);  		} catch (UnsupportedEncodingException e) {  			return null;  		}  	} -	 -	public String get(RequestParams params){ + +	public String get(RequestParams params) {  		String response = getResponseFromCache(params.getUrl()); -		if(response == null){ +		if (response == null) {  			//Log.d("XXX", "Cache miss!"); -		    HttpGet httpget = new HttpGet(params.getUrl()); -		    long timeInit = new Date().getTime(); -		    response = request(httpget); -		    long delay = new Date().getTime() - timeInit; -		    Log.d("com.app11tt.android.utils.HttpRequest::get(url)", "Url: " + params.getUrl() + " downloaded in " + String.format("%.03f", delay/1000.0f) + " seconds"); -		    if(response == null || response.length() == 0){ -		    	response = ""; -		    }else{ -		    	saveResponseIntoCache(params.getUrl(), response); -		    }  +			HttpGet httpget = new HttpGet(params.getUrl()); +			long timeInit = new Date().getTime(); +			response = request(httpget); +			long delay = new Date().getTime() - timeInit; +			Log.d("com.app11tt.android.utils.HttpRequest::get(url)", "Url: " + params.getUrl() + " downloaded in " + String.format("%.03f", delay / 1000.0f) + " seconds"); +			if (response == null || response.length() == 0) { +				response = ""; +			} else { +				saveResponseIntoCache(params.getUrl(), response); +			}  		}  		Log.d("XXX", "Req: " + params.getUrl());  		Log.d("XXX", "Resp: " + response); -	    return response; +		return response;  	} -	 -	private String request(HttpUriRequest request){ + +	private String request(HttpUriRequest request) {  		//Log.d("XXX", "Haciendo request a: " + request.getURI() ); -		Log.d("PPP", "Haciendo request a: " + request.getURI() ); +		Log.d("PPP", "Haciendo request a: " + request.getURI());  		long init = new Date().getTime();  		HttpClient httpclient = getNewHttpClient();  		HttpParams httpParameters = httpclient.getParams();  		HttpConnectionParams.setConnectionTimeout(httpParameters, 0);  		HttpConnectionParams.setSoTimeout(httpParameters, 0);  		HttpConnectionParams.setTcpNoDelay(httpParameters, true); -	    try { -	        HttpResponse response = httpclient.execute(request); -	        Log.d("PPP", "Fin de request (" + (new Date().getTime() - init) + ") a: " + request.getURI() ); +		try { +			HttpResponse response = httpclient.execute(request); +			Log.d("PPP", "Fin de request (" + (new Date().getTime() - init) + ") a: " + request.getURI());  			//Log.d("XXX1", "Status:" + response.getStatusLine().toString()); -	        if(response.getStatusLine().getStatusCode() == 200){ -	        	String strResponse = EntityUtils.toString(response.getEntity()); +			if (response.getStatusLine().getStatusCode() == 200) { +				String strResponse = EntityUtils.toString(response.getEntity());  				//Log.d("XXX2", strResponse); -	        	return strResponse; -	        }else{ -	        	Log.d("XXX3", "Response status code:" + response.getStatusLine().getStatusCode() + "\n" + EntityUtils.toString(response.getEntity())); -	        	return null; -	        } -	         -	    } catch (ClientProtocolException e) { -	    	Log.d("XXX3", e.getMessage()); -	    } catch (IOException e) { -	    	Log.d("XXX4", e.getMessage()); -	    } +				return strResponse; +			} else { +				Log.d("XXX3", "Response status code:" + response.getStatusLine().getStatusCode() + "\n" + EntityUtils.toString(response.getEntity())); +				return null; +			} + +		} catch (ClientProtocolException e) { +			Log.d("XXX3", e.getMessage()); +		} catch (IOException e) { +			Log.d("XXX4", e.getMessage()); +		}  		return null;  	} -	 +  	private HttpClient getNewHttpClient() { -	    try { -	        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); -	        trustStore.load(null, null); +		try { +			KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); +			trustStore.load(null, null); -	        SSLSocketFactory sf = new CustomSSLSocketFactory(trustStore); -	        sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); +			SSLSocketFactory sf = new CustomSSLSocketFactory(trustStore); +			sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); -	        HttpParams params = new BasicHttpParams(); -	        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); -	        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); +			HttpParams params = new BasicHttpParams(); +			HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); +			HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); -	        SchemeRegistry registry = new SchemeRegistry(); -	        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); -	        registry.register(new Scheme("https", sf, 443)); +			SchemeRegistry registry = new SchemeRegistry(); +			registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); +			registry.register(new Scheme("https", sf, 443)); -	        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry); +			ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry); -	        return new DefaultHttpClient(ccm, params); -	    } catch (Exception e) { -	        return new DefaultHttpClient(); -	    } +			return new DefaultHttpClient(ccm, params); +		} catch (Exception e) { +			return new DefaultHttpClient(); +		}  	} -	 +  	private static String convertStreamToString(InputStream is) { -	    BufferedReader reader = new BufferedReader(new InputStreamReader(is)); -	    StringBuilder sb = new StringBuilder(); -	    String line = null; -	    try { -	        while ((line = reader.readLine()) != null) { -	            sb.append((line + "\n")); -	        } -	    } catch (IOException e) { -	        e.printStackTrace(); -	    } finally { -	        try { -	            is.close();  -	        } catch (IOException e) { -	            e.printStackTrace();  -	        } -	    } -	    return sb.toString(); +		BufferedReader reader = new BufferedReader(new InputStreamReader(is)); +		StringBuilder sb = new StringBuilder(); +		String line = null; +		try { +			while ((line = reader.readLine()) != null) { +				sb.append((line + "\n")); +			} +		} catch (IOException e) { +			e.printStackTrace(); +		} finally { +			try { +				is.close(); +			} catch (IOException e) { +				e.printStackTrace(); +			} +		} +		return sb.toString();  	} -	public void saveResponseIntoCache(String request, String response){ -		if(context == null){ +	public void saveResponseIntoCache(String request, String response) { +		if (context == null) {  			//Log.d("XXX", "No context, cache failed!");  			return;  		} -        SharedPreferences sharedPref = context.getSharedPreferences("http_get_cache", Context.MODE_PRIVATE);  -        SharedPreferences.Editor editor = sharedPref.edit(); -        editor.putString("request_" + Crypt.md5(request), response); -        editor.putLong("request_" + Crypt.md5(request) + "_ttl", new Date().getTime() + getTtl()); -        editor.commit(); +		SharedPreferences sharedPref = context.getSharedPreferences("http_get_cache", Context.MODE_PRIVATE); +		SharedPreferences.Editor editor = sharedPref.edit(); +		editor.putString("request_" + Crypt.md5(request), response); +		editor.putLong("request_" + Crypt.md5(request) + "_ttl", new Date().getTime() + getTtl()); +		editor.commit();  	} -	 -	 -	public String getResponseFromCache(String request){ -		if(context == null){ + +	public String getResponseFromCache(String request) { +		if (context == null) {  			Log.d("XXX", "No context, cache miss");  			return null;  		} -        SharedPreferences sharedPref = context.getSharedPreferences( "http_get_cache", Context.MODE_PRIVATE); -        long ttl = getResponseTtl(request); -        if(ttl == 0l || (new Date().getTime() - ttl) > 0l){ -        	Log.d("XXX", "Cache invalid ttl:" + ttl + " vs now:" + new Date().getTime()); -        	return null; -        } -        return sharedPref.getString("request_" + Crypt.md5(request), null); +		SharedPreferences sharedPref = context.getSharedPreferences("http_get_cache", Context.MODE_PRIVATE); +		long ttl = getResponseTtl(request); +		if (ttl == 0l || (new Date().getTime() - ttl) > 0l) { +			Log.d("XXX", "Cache invalid ttl:" + ttl + " vs now:" + new Date().getTime()); +			return null; +		} +		return sharedPref.getString("request_" + Crypt.md5(request), null);  	} -	public long getResponseTtl(String request){ -        SharedPreferences sharedPref = context.getSharedPreferences( -        		"http_get_cache", Context.MODE_PRIVATE);  -        return sharedPref.getLong("request_" + Crypt.md5(request) + "_ttl", 0l); +	public long getResponseTtl(String request) { +		SharedPreferences sharedPref = context.getSharedPreferences( +				"http_get_cache", Context.MODE_PRIVATE); +		return sharedPref.getLong("request_" + Crypt.md5(request) + "_ttl", 0l);  	}  	public long getTtl() { @@ -229,7 +227,6 @@ public class HttpRequester {  	}  	public void setTtl(long ttl) { -		this.cttl = (ttl*1000) + new Date().getTime(); +		this.cttl = (ttl * 1000) + new Date().getTime();  	} -	  } diff --git a/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java b/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java index ded11550bb..051fed5500 100644 --- a/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java +++ b/platform/android/java/src/org/godotengine/godot/utils/RequestParams.java @@ -43,33 +43,33 @@ import org.apache.http.message.BasicNameValuePair;   */  public class RequestParams { -	private HashMap<String,String> params; +	private HashMap<String, String> params;  	private String url; -	 -	public RequestParams(){ -		params = new HashMap<String,String>(); + +	public RequestParams() { +		params = new HashMap<String, String>();  	} -	 -	public void put(String key, String value){ + +	public void put(String key, String value) {  		params.put(key, value);  	} -	 -	public String get(String key){ + +	public String get(String key) {  		return params.get(key);  	} -	 -	public void remove(Object key){ + +	public void remove(Object key) {  		params.remove(key);  	} -	 -	public boolean has(String key){ + +	public boolean has(String key) {  		return params.containsKey(key);  	} -	 -	public List<NameValuePair> toPairsList(){ -		List<NameValuePair>  fields = new ArrayList<NameValuePair>(); -		for(String key : params.keySet()){ +	public List<NameValuePair> toPairsList() { +		List<NameValuePair> fields = new ArrayList<NameValuePair>(); + +		for (String key : params.keySet()) {  			fields.add(new BasicNameValuePair(key, this.get(key)));  		}  		return fields; @@ -82,6 +82,4 @@ public class RequestParams {  	public void setUrl(String url) {  		this.url = url;  	} - -	  } |