From 2c47f0a1809395315a4de2b88f3ec3b313fc1ae9 Mon Sep 17 00:00:00 2001 From: sekelsenmat Date: Mon, 8 Aug 2011 16:03:47 +0000 Subject: [PATCH] android-sdk: Fixes some bugs in the string read/write and in the object read/write git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1788 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../android_bindings_generator.lpi | 46 +++++++++++++++---- .../android-sdk/android_sdk_bindings_gen.pas | 22 ++++++--- bindings/android-sdk/mainform.lfm | 9 ++++ bindings/android-sdk/mainform.pas | 11 +++++ .../android-sdk/sdk_level_7/android_all.txt | 2 +- 5 files changed, 74 insertions(+), 16 deletions(-) diff --git a/bindings/android-sdk/android_bindings_generator.lpi b/bindings/android-sdk/android_bindings_generator.lpi index d67705c05..61ed7ad64 100644 --- a/bindings/android-sdk/android_bindings_generator.lpi +++ b/bindings/android-sdk/android_bindings_generator.lpi @@ -57,10 +57,11 @@ + - - + + @@ -119,8 +120,8 @@ - - + + @@ -198,11 +199,10 @@ - - - + + @@ -220,13 +220,13 @@ - + - + @@ -311,6 +311,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bindings/android-sdk/android_sdk_bindings_gen.pas b/bindings/android-sdk/android_sdk_bindings_gen.pas index 67b05e26e..6e4ba0e5d 100644 --- a/bindings/android-sdk/android_sdk_bindings_gen.pas +++ b/bindings/android-sdk/android_sdk_bindings_gen.pas @@ -322,6 +322,8 @@ var lJavaParamVar, lJavaParams, lJavaParamSelf: string; // For adding the var for string params HasStringParam: Boolean = False; + StringParamCount: Integer = 0; + i: Integer; begin if ASourceLine = '' then Exit; @@ -377,13 +379,15 @@ begin // Pascal parameter sending if lParamTypePas = 'string' then begin - FPasOutputImpl.Add(Format(' lString := TString.Create(%s);', [lParamName])); - FPasOutputImpl.Add(' vAndroidPipesComm.SendInt(lString.Index); // text'); - FPasOutputImpl.Add(' lString.Free;'); HasStringParam := True; + Inc(StringParamCount); + FPasOutputImpl.Insert(FPasOutputImplCurLine+1, Format(' lString_%d := TString.Create(%s);', [StringParamCount, lParamName])); + FPasOutputImpl.Add(Format(' vAndroidPipesComm.SendInt(lString_%d.Index); // text', [StringParamCount])); end - else - FPasOutputImpl.Add(' vAndroidPipesComm.SendInt(Integer(' + lParamName + '));'); + else if IsBasicJavaType(lParamType) then + FPasOutputImpl.Add(' vAndroidPipesComm.SendInt(Integer(' + lParamName + '));') + else // for objects + FPasOutputImpl.Add(' vAndroidPipesComm.SendInt(Integer(' + lParamName + '.Index));'); // Java parameter reading lJavaParamVar := Format('l%s_%d', [ConvertPointToUnderline(lParamType), lParamNum]); @@ -420,7 +424,11 @@ begin if HasStringParam then begin FPasOutputImpl.Insert(FPasOutputImplCurLine+1, 'var'); - FPasOutputImpl.Insert(FPasOutputImplCurLine+2, ' lString: TString;'); + for i := 1 to StringParamCount do + begin + FPasOutputImpl.Insert(FPasOutputImplCurLine+1+i, Format(' lString_%d: TString;', [i])); + FPasOutputImpl.Add(Format(' lString_%d.Free;', [i])); + end; end; FPasOutputImpl.Add('end;'); FPasOutputImpl.Add(''); @@ -718,6 +726,8 @@ begin if AType = 'boolean' then Exit('lBool') else if AType = 'int' then Exit('lInt') else if AType = 'float' then Exit('lFloat') + else if AType = 'CharSequence' then + Result := Format('(%s) MyJavaLang.LangElements.get(lInt)', [AType]) else Result := Format('(%s) ViewElements.get(lInt)', [AType]); end; diff --git a/bindings/android-sdk/mainform.lfm b/bindings/android-sdk/mainform.lfm index 07dcc19c8..4f2a96bd9 100644 --- a/bindings/android-sdk/mainform.lfm +++ b/bindings/android-sdk/mainform.lfm @@ -44,4 +44,13 @@ object Form1: TForm1 OnClick = Button1Click TabOrder = 1 end + object Button2: TButton + Left = 17 + Height = 25 + Top = 160 + Width = 155 + Caption = 'Copy to the LCL' + OnClick = Button2Click + TabOrder = 2 + end end diff --git a/bindings/android-sdk/mainform.pas b/bindings/android-sdk/mainform.pas index 0e608440f..caacc879d 100644 --- a/bindings/android-sdk/mainform.pas +++ b/bindings/android-sdk/mainform.pas @@ -14,10 +14,12 @@ type TForm1 = class(TForm) Button1: TButton; + Button2: TButton; editInputPath: TDirectoryEdit; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); + procedure Button2Click(Sender: TObject); private { private declarations } public @@ -38,5 +40,14 @@ begin AndroidSDKBindingsGen.GenerateAllBindings(editInputPath.Text, editInputPath.Text, editInputPath.Text); end; +procedure TForm1.Button2Click(Sender: TObject); +var + lSourcePath, lDestPath: String; +begin + lSourcePath := IncludeTrailingPathDelimiter(editInputPath.Text) + 'android_all.pas'; + lDestPath := '/home/felipe/Programas/lazarus/lcl/interfaces/android/android_all.pas'; + FileUtil.CopyFile(lSourcePath, lDestPath); +end; + end. diff --git a/bindings/android-sdk/sdk_level_7/android_all.txt b/bindings/android-sdk/sdk_level_7/android_all.txt index ca0706a38..c068f1a1e 100644 --- a/bindings/android-sdk/sdk_level_7/android_all.txt +++ b/bindings/android-sdk/sdk_level_7/android_all.txt @@ -47,7 +47,7 @@ method void addView(View child, ViewGroup.LayoutParams params); [LinearLayout] ViewGroup constructor Create(Activity); -procedure setOrientation(int orientation); +method void setOrientation(int orientation); const HORIZONTAL = 0; const VERTICAL = 1;