diff --git a/bindings/android-sdk/android_bindings_generator.lpi b/bindings/android-sdk/android_bindings_generator.lpi
index 45f13eaa1..17e9b4795 100644
--- a/bindings/android-sdk/android_bindings_generator.lpi
+++ b/bindings/android-sdk/android_bindings_generator.lpi
@@ -48,7 +48,7 @@
-
+
@@ -60,8 +60,8 @@
-
-
+
+
@@ -130,9 +130,9 @@
-
-
-
+
+
+
@@ -175,123 +175,123 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
diff --git a/bindings/android-sdk/android_sdk_bindings_gen.pas b/bindings/android-sdk/android_sdk_bindings_gen.pas
index e61a6bb14..2eedbf9d8 100644
--- a/bindings/android-sdk/android_sdk_bindings_gen.pas
+++ b/bindings/android-sdk/android_sdk_bindings_gen.pas
@@ -13,7 +13,7 @@ type
TAndroidSDKBindingsGen = class
private
- FSourceFile, FPasOutputClasses, FPasOutputIDs, FPasOutputImpl: TStringList;
+ FSourceFile, FPasOutputClasses, FPasOutputConsts, FPasOutputIDs, FPasOutputImpl: TStringList;
FJavaOutputIDs, FJavaOutputMethods: TStringList;
FClassName, FClassNamePas: string; // Class name of the class currently being parsed
FClassNum, FMethodNum: Integer;
@@ -22,10 +22,14 @@ type
procedure ProcessModelClass(ASourceLine: string);
procedure ProcessModelMethod(ASourceLine: string);
procedure ProcessModelConstructor(ASourceLine: string);
+ procedure ProcessModelConst(ASourceLine: string);
function GetNextWord(ALine: string; var AStartPos: Integer): string;
function GetPascalTypeName(ABaseName: string): string;
+ function PassByReference(ABaseName: string): Boolean;
function GetJavaResultFunction(AReturnType: string): string;
function GetJavaTypeReader(AType: string): string;
+ function GetIDString(AMethodName: string): string;
+ procedure AddOutputIDs(AIDString: string);
public
constructor Create;
destructor Destroy; override;
@@ -60,7 +64,7 @@ begin
end;
// Now save the Pascal file
- lPasOutputFile.Add('unit ;');
+ lPasOutputFile.Add(Format('unit %s;', [ChangeFileExt(ExtractFileName(ASourceFile), '')]));
lPasOutputFile.Add('');
lPasOutputFile.Add('interface');
lPasOutputFile.Add('');
@@ -71,6 +75,8 @@ begin
lPasOutputFile.Add('implementation');
lPasOutputFile.Add('');
lPasOutputFile.Add('const');
+ lPasOutputFile.AddStrings(FPasOutputConsts);
+ lPasOutputFile.Add('');
lPasOutputFile.AddStrings(FPasOutputIDs);
lPasOutputFile.Add('');
lPasOutputFile.AddStrings(FPasOutputImpl);
@@ -124,6 +130,13 @@ begin
ProcessModelConstructor(ASourceLine);
Exit;
end;
+
+ // Constants
+ if lCurWord = 'const' then
+ begin
+ ProcessModelConst(ASourceLine);
+ Exit;
+ end;
end;
procedure TAndroidSDKBindingsGen.ProcessModelClass(ASourceLine: string);
@@ -153,6 +166,7 @@ begin
FPasOutputIDs.Add(' // ' + FClassNamePas);
FJavaOutputIDs.Add(' // ' + FClassName);
+ FPasOutputConsts.Add(' { ' + FClassNamePas + ' }');
end;
procedure TAndroidSDKBindingsGen.ProcessModelMethod(
@@ -180,7 +194,7 @@ begin
// Beginning of the implementation part
FPasOutputImplCurLine := FPasOutputImpl.Count;
- lIDString := 'amkUI_' + FClassNamePas + '_' + lMethodName;
+ lIDString := GetIDString(lMethodName);
FPasOutputImpl.Add('begin');
FPasOutputImpl.Add(' vAndroidPipesComm.SendByte(ShortInt(amkUICommand));');
@@ -197,16 +211,22 @@ begin
FJavaOutputMethods.Add(' // params');
// Lists of constants for the IDs
- FPasOutputIDs.Add(' ' + lIDString + ' = $' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';');
- FJavaOutputIDs.Add(' static final int ' + lIDString + ' = 0x' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';');
+ AddOutputIDs(lIDString);
// Add all parameters
TmpStr := lMethodName + '(';
repeat
lParamType := GetNextWord(ASourceLine, lReaderPos);
+
+ // Method modifiers
+ if (lParamType = 'virtual') or (lParamType = 'override') then Continue;
+
lParamTypePas := GetPascalTypeName(lParamType);
- lParamName := GetNextWord(ASourceLine, lReaderPos);
+ if PassByReference(lParamType) then
+ lParamName := 'var ' + GetNextWord(ASourceLine, lReaderPos)
+ else
+ lParamName := GetNextWord(ASourceLine, lReaderPos);
if lParamName = '' then Break;
@@ -277,7 +297,7 @@ begin
// Method type and name
lMethodName := GetNextWord(ASourceLine, lReaderPos);
- lIDString := 'amkUI_' + FClassNamePas + '_' + lMethodName;
+ lIDString := GetIDString(lMethodName);
FPasOutputClasses.Add(' constructor ' + lMethodName + '();');
@@ -288,8 +308,7 @@ begin
FPasOutputImpl.Add(' Index := vAndroidPipesComm.WaitForIntReturn();');
FPasOutputImpl.Add('end;');
- FPasOutputIDs.Add(' ' + lIDString + ' = $' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';');
- FJavaOutputIDs.Add(' static final int ' + lIDString + ' = 0x' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';');
+ AddOutputIDs(lIDString);
FJavaOutputMethods.Add(' case ' + lIDString + ':');
FJavaOutputMethods.Add(' DebugOut("' + lIDString + '");');
@@ -300,12 +319,29 @@ begin
Inc(FMethodNum);
end;
+procedure TAndroidSDKBindingsGen.ProcessModelConst(ASourceLine: string);
+var
+ lReaderPos: Integer = 1;
+ lCurWord: string;
+ lConstName, lConstValue: string;
+begin
+ if ASourceLine = '' then Exit;
+
+ lConstName := GetNextWord(ASourceLine, lReaderPos);
+ lConstName := GetNextWord(ASourceLine, lReaderPos);
+ lConstValue := GetNextWord(ASourceLine, lReaderPos);
+ lConstValue := GetNextWord(ASourceLine, lReaderPos);
+
+ // Method type and name
+ FPasOutputConsts.Add(Format(' %s = %s;', [lConstName, lConstValue]));
+end;
+
{ Reads one word in a string, starting at AStartPos (1-based index)
and going up to a space or comma or ( or ) or another separator }
function TAndroidSDKBindingsGen.GetNextWord(ALine: string;
var AStartPos: Integer): string;
const
- WordSeparators = [' ','(',')','[',']',',',#9];
+ WordSeparators = [' ','(',')','[',']',',',';',#9{TAB}];
var
lState: Integer = 0;
begin
@@ -343,12 +379,23 @@ begin
if ABaseName = 'int' then Result := 'Integer'
else if ABaseName = 'boolean' then Result := 'Boolean'
+ else if ABaseName = 'float' then Result := 'Single'
else if ABaseName = 'void' then Result := ABaseName
else if ABaseName = 'CharSequence' then Result := 'string'
else if ABaseName = 'TJavaObject' then Result := ABaseName
else Result := 'T' + ABaseName;
end;
+function TAndroidSDKBindingsGen.PassByReference(ABaseName: string): Boolean;
+begin
+ if ABaseName = '' then Exit(False);
+
+ if ABaseName = 'int' then Result := False
+ else if ABaseName = 'boolean' then Result := False
+ else if ABaseName = 'float' then Result := False
+ else Result := True;
+end;
+
function TAndroidSDKBindingsGen.GetJavaResultFunction(AReturnType: string
): string;
begin
@@ -362,6 +409,17 @@ begin
else Exit('GetInt');
end;
+function TAndroidSDKBindingsGen.GetIDString(AMethodName: string): string;
+begin
+ Result := 'amkUI_' + FClassNamePas + '_' + AMethodName;;
+end;
+
+procedure TAndroidSDKBindingsGen.AddOutputIDs(AIDString: string);
+begin
+ FPasOutputIDs.Add(' ' + AIDString + ' = $' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';');
+ FJavaOutputIDs.Add(' static final int ' + AIDString + ' = 0x' + IntToHex(FClassNum*$1000+FMethodNum, 8) + ';');
+end;
+
constructor TAndroidSDKBindingsGen.Create;
begin
FSourceFile := TStringList.Create;
@@ -369,6 +427,7 @@ begin
FPasOutputImpl := TStringList.Create;
FPasOutputIDs := TStringList.Create;
+ FPasOutputConsts := TStringList.Create;
FJavaOutputIDs := TStringList.Create;
FJavaOutputMethods := TStringList.Create;
@@ -382,6 +441,7 @@ begin
FPasOutputImpl.Free;
FPasOutputIDs.Free;
+ FPasOutputConsts.Free;
FJavaOutputIDs.Free;
FJavaOutputMethods.Free;
diff --git a/bindings/android-sdk/mainform.lfm b/bindings/android-sdk/mainform.lfm
index a24be5e8d..07dcc19c8 100644
--- a/bindings/android-sdk/mainform.lfm
+++ b/bindings/android-sdk/mainform.lfm
@@ -16,7 +16,7 @@ object Form1: TForm1
ParentColor = False
end
object editInputPath: TDirectoryEdit
- Left = 64
+ Left = 88
Height = 25
Top = 72
Width = 312
@@ -31,8 +31,8 @@ object Form1: TForm1
Left = 7
Height = 18
Top = 73
- Width = 43
- Caption = 'Label2'
+ Width = 69
+ Caption = 'Input Path:'
ParentColor = False
end
object Button1: TButton
diff --git a/bindings/android-sdk/sdk_level_7/android_all.txt b/bindings/android-sdk/sdk_level_7/android_all.txt
index 7363fd943..4daeaddfe 100644
--- a/bindings/android-sdk/sdk_level_7/android_all.txt
+++ b/bindings/android-sdk/sdk_level_7/android_all.txt
@@ -5,13 +5,97 @@
#[Menu] TJavaObject
#method MenuItem add(int groupId, int itemId, int order, CharSequence title)
-[CompoundButton] Button 110
+#
+# android.util.*
+#
+[DisplayMetrics] TJavaObject
+constructor Create()
+method float density()
+method int densityDpi()
+method int heightPixels()
+method float scaledDensity()
+method int widthPixels()
+method float xdpi()
+method float ydpi()
+
+#
+# android.app.*
+#
+[Display] TJavaObject
+method void getMetrics(DisplayMetrics outMetrics)
+
+[WindowManager] TJavaObject
+method Display getDefaultDisplay()
+
+#
+# android.view
+#
+[LayoutParams] TJavaObject
+constructor Create(int width, int height);
+const FILL_PARENT = $FFFFFFFF;
+
+[View] TJavaObject
+method void setLayoutParams(LayoutParams params);
+method void setVisibility(int visibility);
+const VISIBLE = 0;
+const INVISIBLE = 4;
+const GONE = 8;
+
+[ViewGroup] View
+procedure addView(View child, LayoutParams params);
+procedure addView(View child);
+
+[LinearLayout] TViewGroup
+constructor Create();
+procedure setOrientation(int orientation);
+const HORIZONTAL = 0;
+const VERTICAL = 1;
+
+[AbsoluteLayout] TViewGroup
+constructor Create();
+
+[AbsoluteLayout_LayoutParams] LayoutParams
+constructor Create(int param_width, int param_height, int param_x, int param_y);
+# TOnClickCallback = procedure (v: TView) of object;
+
+[TextView] View
+# protected
+# OnClickListener: TOnClickCallback;
+constructor Create(); virtual;
+method void setText(CharSequence AText); virtual;
+# procedure setOnClickListener(ACallback: TOnClickCallback);
+# procedure callOnClickListener();
+method void setTextSize(int unit_; float size);
+
+[EditText] TextView
+constructor Create(); override;
+method void setText(CharSequence AText); override;
+
+[Button] TextView
+constructor Create(); override;
+method void setText(CharSequence AText); override;
+
+[FrameLayout] ViewGroup
+
+[TimePicker] FrameLayout
+constructor Create();
+method int getCurrentHour();
+method void setCurrentHour(int currentHour);
+method int getCurrentMinute: Integer;
+method void setCurrentMinute(int currentMinute);
+method boolean is24HourView: Boolean;
+method void setIs24HourView(boolean AIs24HourView);
+
+[ScrollView] FrameLayout
+constructor Create();
+
+[CompoundButton] Button
method boolean isChecked()
method boolean performClick()
method void setChecked(boolean checked)
#method void setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener listener)
method void toggle()
-[CheckBox] CompoundButton 111
-constructor Create
+[CheckBox] CompoundButton
+constructor Create()