forked from unoplatform/uno
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBaseActivity.Callbacks.Implementation.Android.tt
More file actions
245 lines (225 loc) · 9.9 KB
/
Copy pathBaseActivity.Callbacks.Implementation.Android.tt
File metadata and controls
245 lines (225 loc) · 9.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Text.RegularExpressions" #>
<#@ import namespace="System.Collections.Generic" #>
<#
// On metadata view of the Activity and FragmentActivity classes, use the regex: (^\s*(//|\[).*\r\n|\[\w+\])
// Then keep only methods which are required (currently all the "OnXXXX" expect (Create|Prepare)Dialog (Obsolete) and OnRetainNonConfigurationInstance (sealed))
// If you want to exclude a method, you can prefix its line with "//"
// If you have a namespace clash (eg. Context in OnCreateView) you can use FQN (eg. Android.Content.Context)
// Line which does not contains the "virtual" keyword will be ignored.
var overridableMethods = @"
// FragmentActivity
public virtual void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults);RequestPermissionsResultWithResults
public virtual void OnAttachFragment(Fragment fragment);
protected override void OnCreate(Bundle savedInstanceState);
public override View OnCreateView(View parent, string name, Context context, IAttributeSet attrs);CreateViewWithParent
public override View OnCreateView(string name, Context context, IAttributeSet attrs);
protected virtual bool OnPrepareOptionsPanel(View view, IMenu menu);
// Removed because support 25 does not include this method anymore.
// public virtual void OnRequestPermissionsResult(int requestCode, string[] permissions);
protected virtual void OnResumeFragments();
public virtual Java.Lang.Object OnRetainCustomNonConfigurationInstance();
//public override sealed Java.Lang.Object OnRetainNonConfigurationInstance();
public virtual void OnStateNotSaved();
// Activity
public virtual void OnActionModeFinished(ActionMode mode);
public virtual void OnActionModeStarted(ActionMode mode);
public virtual void OnActivityReenter(int resultCode, Intent data);
protected virtual void OnActivityResult(int requestCode, Result resultCode, Intent data);
public virtual void OnAttachedToWindow();
public virtual void OnAttachFragment(Fragment fragment);
public virtual void OnBackPressed();
protected virtual void OnChildTitleChanged(Activity childActivity, ICharSequence title);
protected void OnChildTitleChanged(Activity childActivity, string title);
public virtual void OnConfigurationChanged(Configuration newConfig);
public virtual void OnContentChanged();
public virtual bool OnContextItemSelected(IMenuItem item);
public virtual void OnContextMenuClosed(IMenu menu);
protected virtual void OnCreate(Bundle savedInstanceState);
public virtual void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState);CreateWithPersistedState
public virtual void OnCreateContextMenu(IContextMenu menu, View v, IContextMenuContextMenuInfo menuInfo);
public virtual ICharSequence OnCreateDescriptionFormatted();
public string OnCreateDescription();
//protected virtual Dialog OnCreateDialog(int id);
//protected virtual Dialog OnCreateDialog(int id, Bundle args);
public virtual void OnCreateNavigateUpTaskStack(TaskStackBuilder builder);
public virtual bool OnCreateOptionsMenu(IMenu menu);
public virtual bool OnCreatePanelMenu(int featureId, IMenu menu);
public virtual View OnCreatePanelView(int featureId);
public virtual bool OnCreateThumbnail(Bitmap outBitmap, Canvas canvas);
public virtual View OnCreateView(View parent, string name, Android.Content.Context context, IAttributeSet attrs);CreateViewWithParent
public virtual View OnCreateView(string name, Android.Content.Context context, IAttributeSet attrs);
protected virtual void OnDestroy();
public virtual void OnDetachedFromWindow();
public virtual void OnEnterAnimationComplete();
public virtual bool OnGenericMotionEvent(MotionEvent e);
public virtual bool OnKeyDown( Keycode keyCode, KeyEvent e);
public virtual bool OnKeyLongPress( Keycode keyCode, KeyEvent e);
public virtual bool OnKeyMultiple( Keycode keyCode, int repeatCount, KeyEvent e);
public virtual bool OnKeyShortcut( Keycode keyCode, KeyEvent e);
public virtual bool OnKeyUp( Keycode keyCode, KeyEvent e);
public virtual void OnLowMemory();
public virtual bool OnMenuOpened(int featureId, IMenu menu);
public virtual bool OnNavigateUp();
public virtual bool OnNavigateUpFromChild(Activity child);
protected virtual void OnNewIntent(Intent intent);
public virtual bool OnOptionsItemSelected(IMenuItem item);
public virtual void OnOptionsMenuClosed(IMenu menu);
public virtual void OnPanelClosed(int featureId, IMenu menu);
protected virtual void OnPause();
protected virtual void OnPostCreate(Bundle savedInstanceState);
public virtual void OnPostCreate(Bundle savedInstanceState, PersistableBundle persistentState);PostCreateWithPersistedState
protected virtual void OnPostResume();
//protected virtual void OnPrepareDialog(int id, Dialog dialog);
//protected virtual void OnPrepareDialog(int id, Dialog dialog, Bundle args);
public virtual void OnPrepareNavigateUpTaskStack(TaskStackBuilder builder);
public virtual bool OnPrepareOptionsMenu(IMenu menu);
public virtual bool OnPreparePanel(int featureId, View view, IMenu menu);
public virtual void OnProvideAssistData(Bundle data);
protected virtual void OnRestart();
protected virtual void OnRestoreInstanceState(Bundle savedInstanceState);
public virtual void OnRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState);RestoreInstanceStateWithPersistedState
protected virtual void OnResume();
//public virtual Java.Lang.Object OnRetainNonConfigurationInstance();
protected virtual void OnSaveInstanceState(Bundle outState);
public virtual void OnSaveInstanceState(Bundle outState, PersistableBundle outPersistentState);SaveInstanceStateWithPersistedState
public virtual bool OnSearchRequested();
protected virtual void OnStart();
protected virtual void OnStop();
protected virtual void OnTitleChanged(ICharSequence title, Color color);
protected void OnTitleChanged(string title, Color color);
public virtual bool OnTouchEvent(MotionEvent e);
public virtual bool OnTrackballEvent(MotionEvent e);
public virtual void OnTrimMemory( TrimMemory level);
public virtual void OnUserInteraction();
protected virtual void OnUserLeaveHint();
public virtual void OnVisibleBehindCanceled();
public virtual void OnWindowAttributesChanged(WindowManagerLayoutParams @params);
public virtual void OnWindowFocusChanged(bool hasFocus);
public virtual ActionMode OnWindowStartingActionMode(ActionMode.ICallback callback);
";
#>
#pragma warning disable
using System;
using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.Content.Res;
using Android.Graphics;
using Android.OS;
using Android.Util;
using Android.Views;
using Java.Lang;
namespace Uno.UI
{
partial class BaseActivity
{
<#
var methodRegex = new Regex(@"(?<modifiers>[\s\w]+)\s+(?<return>[\w\.]+)\s+(?<name>\w+)\((?<parameters>[^\)]*)\)(;(?<nameOverride>.*))?");
//var parametersRegex = new Regex(@"")
var methods = overridableMethods
.Split('\r', '\n')
.Where(line => !string.IsNullOrWhiteSpace(line) && !line.Trim().StartsWith("//") && line.Contains("virtual"))
.Distinct()
.Select(method =>
{
var match = methodRegex.Match(method);
return new
{
modifiers = match.Groups["modifiers"].Value.Trim(),
returnType = match.Groups["return"].Value,
name = match.Groups["name"].Value,
nameOverride = match.Groups["nameOverride"].Value,
parameters = match.Groups["parameters"].Value
};
})
.OrderBy(method => method.name)
.ThenBy(method => method.parameters.Length);
foreach(var method in methods)
{
var name = string.IsNullOrEmpty(method.nameOverride)
? method.name.Replace("On", "")
: method.nameOverride;
var parameters = method.parameters
.Split(',')
.Where(parameter => !string.IsNullOrWhiteSpace(parameter))
.Select(parameter =>
{
var p = parameter.Split(' ').Where(part => !string.IsNullOrWhiteSpace(part));
return new
{
type = p.FirstOrDefault() ?? "NOT_FOUND",
name = p.LastOrDefault() ?? "NOT_FOUND"
};
})
.ToArray();
var baseParameters = string.Join(",", parameters.Select(p => p.name));
string type, value;
if (parameters.Length == 0)
{
type = "";
value = "";
}
else if (parameters.Length == 1)
{
type = parameters[0].type;
value = parameters[0].name;
}
else
{
type = name + "EventArgs";
value = "new " + name + "EventArgs(" + baseParameters + ")";
//type = $"System.Tuple<{string.Join(", ", parameters.Select(p => p.type))}>";
//value = $"System.Tuple.Create({string.Join(", ", parameters.Select(p => p.name))})";
#>
public class <#= name#>EventArgs
{
public <#= name#>EventArgs(<#= method.parameters #>)
{
<# foreach(var parameter in parameters) { #>
<#= char.ToUpper(parameter.name[0]) + parameter.name.Substring(1) #> = <#= parameter.name#>;
<# } #>
}
<# foreach(var parameter in parameters) { #>
public <#= parameter.type #> <#= char.ToUpper(parameter.name[0]) + parameter.name.Substring(1) #> { get; }
<# } #>
}
<#
}
if(!string.IsNullOrEmpty(type))
{
#>
/// <summary>
/// Occurs when <see cref="<#= method.name #>"/> is invoked on the activity.
/// </summary>
public event EventHandler<<#= type #>> <#= name #>;
<#
}
else
{
#>
/// <summary>
/// Occurs when <see cref="<#= method.name #>"/> is invoked on the activity.
/// </summary>
public event EventHandler <#= name #>;
<#
}
#>
<#= method.modifiers.Replace("virtual", "override") #> <#= method.returnType #> <#= method.name #>(<#= method.parameters #>)
{
var handler = <#= name #>;
if (handler != null)
{
handler.Invoke(this, <#= string.IsNullOrEmpty(value) ? "EventArgs.Empty" : value #>);
}
Inner<#= name#>(<#= baseParameters #>);
<#= method.returnType == "void" ? "" : "return" #> base.<#= method.name #>(<#= baseParameters #>);
}
partial void Inner<#= name#>(<#= method.parameters #>);
<#
} // foreach
#>
}
}