Compare commits
13 Commits
bugfix/237
...
bugfix/cro
Author | SHA1 | Date | |
---|---|---|---|
![]() |
533d92509f | ||
![]() |
46194317a8 | ||
![]() |
c4d6e18759 | ||
![]() |
ee41a600b1 | ||
![]() |
07562cc5a9 | ||
![]() |
7577e3064c | ||
![]() |
d33e1f266c | ||
![]() |
aeda21f163 | ||
![]() |
4d1142df4d | ||
![]() |
4c632d0c72 | ||
![]() |
deb3701ebf | ||
![]() |
980df2b3a7 | ||
![]() |
f001d1fa54 |
@@ -1,7 +1,7 @@
|
|||||||
files:
|
files:
|
||||||
- source: src/keepass2android/Resources/values/strings.xml
|
- source: src/keepass2android-app/Resources/values/strings.xml
|
||||||
translation: >-
|
translation: >-
|
||||||
/src/keepass2android/Resources/values-%two_letters_code%/%original_file_name%
|
/src/keepass2android-app/Resources/values-%two_letters_code%/%original_file_name%
|
||||||
translate_attributes: '0'
|
translate_attributes: '0'
|
||||||
content_segmentation: '0'
|
content_segmentation: '0'
|
||||||
languages_mapping:
|
languages_mapping:
|
||||||
|
@@ -12,7 +12,6 @@
|
|||||||
<PackageReference Include="FluentFTP" Version="51.1.0" />
|
<PackageReference Include="FluentFTP" Version="51.1.0" />
|
||||||
<PackageReference Include="MegaApiClient" Version="1.10.4" />
|
<PackageReference Include="MegaApiClient" Version="1.10.4" />
|
||||||
<PackageReference Include="Microsoft.Graph" Version="5.68.0" />
|
<PackageReference Include="Microsoft.Graph" Version="5.68.0" />
|
||||||
<PackageReference Include="Microsoft.Graph.Auth" Version="1.0.0-preview.7" />
|
|
||||||
<PackageReference Include="Microsoft.Identity.Client" Version="4.67.1" />
|
<PackageReference Include="Microsoft.Identity.Client" Version="4.67.1" />
|
||||||
<PackageReference Include="Xamarin.AndroidX.Browser" Version="1.8.0" />
|
<PackageReference Include="Xamarin.AndroidX.Browser" Version="1.8.0" />
|
||||||
<PackageReference Include="Xamarin.AndroidX.Core" Version="1.13.1.5" />
|
<PackageReference Include="Xamarin.AndroidX.Core" Version="1.13.1.5" />
|
||||||
|
@@ -138,7 +138,8 @@ namespace keepass2android
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (host.IndexOf(otherHost, StringComparison.InvariantCultureIgnoreCase) > -1)
|
if (string.Equals(host, otherHost, StringComparison.OrdinalIgnoreCase) ||
|
||||||
|
host.EndsWith("." + otherHost, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
pgResults.AddEntry(entry, false);
|
pgResults.AddEntry(entry, false);
|
||||||
}
|
}
|
||||||
|
@@ -356,7 +356,13 @@ public class KP2AKeyboard extends InputMethodService
|
|||||||
pFilter.addAction("android.intent.action.PACKAGE_ADDED");
|
pFilter.addAction("android.intent.action.PACKAGE_ADDED");
|
||||||
pFilter.addAction("android.intent.action.PACKAGE_REPLACED");
|
pFilter.addAction("android.intent.action.PACKAGE_REPLACED");
|
||||||
pFilter.addAction("android.intent.action.PACKAGE_REMOVED");
|
pFilter.addAction("android.intent.action.PACKAGE_REMOVED");
|
||||||
registerReceiver(mPluginManager, pFilter);
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
registerReceiver(mPluginManager, pFilter, RECEIVER_EXPORTED);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
registerReceiver(mPluginManager, pFilter);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
LatinIMEUtil.GCUtils.getInstance().reset();
|
LatinIMEUtil.GCUtils.getInstance().reset();
|
||||||
@@ -375,16 +381,28 @@ public class KP2AKeyboard extends InputMethodService
|
|||||||
|
|
||||||
// register to receive ringer mode changes for silent mode
|
// register to receive ringer mode changes for silent mode
|
||||||
IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
|
IntentFilter filter = new IntentFilter(AudioManager.RINGER_MODE_CHANGED_ACTION);
|
||||||
registerReceiver(mSilentModeReceiver, filter);
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
|
registerReceiver(mSilentModeReceiver, filter, RECEIVER_EXPORTED);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
registerReceiver(mSilentModeReceiver, filter);
|
||||||
|
}
|
||||||
|
|
||||||
prefs.registerOnSharedPreferenceChangeListener(this);
|
prefs.registerOnSharedPreferenceChangeListener(this);
|
||||||
|
|
||||||
//check if we have KP2A data available:
|
//check if we have KP2A data available:
|
||||||
mHadKp2aData = mShowKp2aKeyboard = keepass2android.kbbridge.KeyboardData.hasData();
|
mHadKp2aData = mShowKp2aKeyboard = KeyboardData.hasData();
|
||||||
|
|
||||||
mClearKeyboardReceiver = new ClearKeyboardBroadcastReceiver();
|
mClearKeyboardReceiver = new ClearKeyboardBroadcastReceiver();
|
||||||
registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)));
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
android.util.Log.d("KP2AK", "registered receiver for clear keyboard broadcast: "+get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this));
|
registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)), RECEIVER_EXPORTED);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
registerReceiver(mClearKeyboardReceiver, new IntentFilter(get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this)));
|
||||||
|
}
|
||||||
|
Log.d("KP2AK", "registered receiver for clear keyboard broadcast: "+get_KEEPASS2ANDROID_KEYBOARD_CLEARED(this));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -53,6 +53,7 @@ using keepass2android.fileselect;
|
|||||||
using KeeTrayTOTP.Libraries;
|
using KeeTrayTOTP.Libraries;
|
||||||
using Boolean = Java.Lang.Boolean;
|
using Boolean = Java.Lang.Boolean;
|
||||||
using Android.Util;
|
using Android.Util;
|
||||||
|
using AndroidX.Core.Content;
|
||||||
using Google.Android.Material.Dialog;
|
using Google.Android.Material.Dialog;
|
||||||
using keepass2android;
|
using keepass2android;
|
||||||
|
|
||||||
@@ -491,9 +492,9 @@ namespace keepass2android
|
|||||||
App.Kp2a.LastOpenedEntry = new PwEntryOutput(Entry, App.Kp2a.CurrentDb);
|
App.Kp2a.LastOpenedEntry = new PwEntryOutput(Entry, App.Kp2a.CurrentDb);
|
||||||
|
|
||||||
_pluginActionReceiver = new PluginActionReceiver(this);
|
_pluginActionReceiver = new PluginActionReceiver(this);
|
||||||
RegisterReceiver(_pluginActionReceiver, new IntentFilter(Strings.ActionAddEntryAction), ReceiverFlags.Exported);
|
ContextCompat.RegisterReceiver(this, _pluginActionReceiver, new IntentFilter(Strings.ActionAddEntryAction), (int)ReceiverFlags.Exported);
|
||||||
_pluginFieldReceiver = new PluginFieldReceiver(this);
|
_pluginFieldReceiver = new PluginFieldReceiver(this);
|
||||||
RegisterReceiver(_pluginFieldReceiver, new IntentFilter(Strings.ActionSetEntryField), ReceiverFlags.Exported);
|
ContextCompat.RegisterReceiver(this, _pluginFieldReceiver, new IntentFilter(Strings.ActionSetEntryField), (int)ReceiverFlags.Exported);
|
||||||
|
|
||||||
var notifyPluginsOnOpenThread = new Thread(NotifyPluginsOnOpen);
|
var notifyPluginsOnOpenThread = new Thread(NotifyPluginsOnOpen);
|
||||||
notifyPluginsOnOpenThread.Start();
|
notifyPluginsOnOpenThread.Start();
|
||||||
|
@@ -21,6 +21,7 @@ using Android.OS;
|
|||||||
using Android.Preferences;
|
using Android.Preferences;
|
||||||
using Android.Runtime;
|
using Android.Runtime;
|
||||||
using Android.Views;
|
using Android.Views;
|
||||||
|
using AndroidX.Core.Content;
|
||||||
using KeePassLib.Serialization;
|
using KeePassLib.Serialization;
|
||||||
|
|
||||||
namespace keepass2android
|
namespace keepass2android
|
||||||
@@ -69,7 +70,7 @@ namespace keepass2android
|
|||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.AddAction(Intents.DatabaseLocked);
|
filter.AddAction(Intents.DatabaseLocked);
|
||||||
filter.AddAction(Intent.ActionScreenOff);
|
filter.AddAction(Intent.ActionScreenOff);
|
||||||
RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported);
|
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnDestroy()
|
protected override void OnDestroy()
|
||||||
|
@@ -21,6 +21,7 @@ using Android.OS;
|
|||||||
using Android.Preferences;
|
using Android.Preferences;
|
||||||
using Android.Runtime;
|
using Android.Runtime;
|
||||||
using Android.Views;
|
using Android.Views;
|
||||||
|
using AndroidX.Core.Content;
|
||||||
using KeePassLib.Serialization;
|
using KeePassLib.Serialization;
|
||||||
|
|
||||||
namespace keepass2android
|
namespace keepass2android
|
||||||
@@ -55,7 +56,7 @@ namespace keepass2android
|
|||||||
|
|
||||||
filter.AddAction(Intents.DatabaseLocked);
|
filter.AddAction(Intents.DatabaseLocked);
|
||||||
filter.AddAction(Intent.ActionScreenOff);
|
filter.AddAction(Intent.ActionScreenOff);
|
||||||
RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported);
|
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -18,6 +18,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
|
|||||||
using System;
|
using System;
|
||||||
using Android.Content;
|
using Android.Content;
|
||||||
using Android.OS;
|
using Android.OS;
|
||||||
|
using AndroidX.Core.Content;
|
||||||
using KeePassLib.Serialization;
|
using KeePassLib.Serialization;
|
||||||
|
|
||||||
namespace keepass2android
|
namespace keepass2android
|
||||||
@@ -39,7 +40,7 @@ namespace keepass2android
|
|||||||
_intentReceiver = new LockCloseActivityBroadcastReceiver(this);
|
_intentReceiver = new LockCloseActivityBroadcastReceiver(this);
|
||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.AddAction(Intents.DatabaseLocked);
|
filter.AddAction(Intents.DatabaseLocked);
|
||||||
RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported);
|
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnResume() {
|
protected override void OnResume() {
|
||||||
|
@@ -65,6 +65,7 @@ using Enum = System.Enum;
|
|||||||
using Exception = System.Exception;
|
using Exception = System.Exception;
|
||||||
using String = System.String;
|
using String = System.String;
|
||||||
using Toolbar = AndroidX.AppCompat.Widget.Toolbar;
|
using Toolbar = AndroidX.AppCompat.Widget.Toolbar;
|
||||||
|
using AndroidX.Core.Content;
|
||||||
|
|
||||||
namespace keepass2android
|
namespace keepass2android
|
||||||
{
|
{
|
||||||
@@ -647,7 +648,7 @@ namespace keepass2android
|
|||||||
_intentReceiver = new PasswordActivityBroadcastReceiver(this);
|
_intentReceiver = new PasswordActivityBroadcastReceiver(this);
|
||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.AddAction(Intent.ActionScreenOff);
|
filter.AddAction(Intent.ActionScreenOff);
|
||||||
RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported);
|
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
|
||||||
|
|
||||||
|
|
||||||
//use FlagSecure to make sure the last (revealed) character of the master password is not visible in recent apps
|
//use FlagSecure to make sure the last (revealed) character of the master password is not visible in recent apps
|
||||||
|
@@ -34,6 +34,7 @@ using keepass2android;
|
|||||||
using KeePassLib;
|
using KeePassLib;
|
||||||
using KeePassLib.Serialization;
|
using KeePassLib.Serialization;
|
||||||
using Toolbar = AndroidX.AppCompat.Widget.Toolbar;
|
using Toolbar = AndroidX.AppCompat.Widget.Toolbar;
|
||||||
|
using AndroidX.Core.Content;
|
||||||
|
|
||||||
namespace keepass2android
|
namespace keepass2android
|
||||||
{
|
{
|
||||||
@@ -153,7 +154,7 @@ namespace keepass2android
|
|||||||
_intentReceiver = new QuickUnlockBroadcastReceiver(this);
|
_intentReceiver = new QuickUnlockBroadcastReceiver(this);
|
||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.AddAction(Intents.DatabaseLocked);
|
filter.AddAction(Intents.DatabaseLocked);
|
||||||
RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported);
|
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
|
||||||
|
|
||||||
Util.SetNoPersonalizedLearning(FindViewById<EditText>(Resource.Id.QuickUnlock_password));
|
Util.SetNoPersonalizedLearning(FindViewById<EditText>(Resource.Id.QuickUnlock_password));
|
||||||
|
|
||||||
|
@@ -69,6 +69,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:orientation="vertical"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content">
|
android:layout_height="wrap_content">
|
||||||
<com.google.android.material.textfield.TextInputLayout
|
<com.google.android.material.textfield.TextInputLayout
|
||||||
@@ -82,7 +83,7 @@
|
|||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:inputType="textPassword"
|
android:inputType="textPassword"
|
||||||
android:hint="password"
|
android:hint="@string/hint_pass"
|
||||||
android:importantForAccessibility="no"/>
|
android:importantForAccessibility="no"/>
|
||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
@@ -135,6 +136,7 @@
|
|||||||
</com.google.android.material.textfield.TextInputLayout>
|
</com.google.android.material.textfield.TextInputLayout>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:orientation="vertical"
|
||||||
android:id="@+id/entry_extras_container"
|
android:id="@+id/entry_extras_container"
|
||||||
style="@style/EntryEditSingleLine_container">
|
style="@style/EntryEditSingleLine_container">
|
||||||
<ImageView
|
<ImageView
|
||||||
@@ -173,6 +175,7 @@
|
|||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
<!-- file attachments -->
|
<!-- file attachments -->
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:orientation="vertical"
|
||||||
android:id="@+id/entry_binaries_container"
|
android:id="@+id/entry_binaries_container"
|
||||||
style="@style/EntryEditSingleLine_container">
|
style="@style/EntryEditSingleLine_container">
|
||||||
<ImageView
|
<ImageView
|
||||||
@@ -228,6 +231,7 @@
|
|||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
<!--expires-->
|
<!--expires-->
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
android:orientation="vertical"
|
||||||
android:id="@+id/expires_section"
|
android:id="@+id/expires_section"
|
||||||
style="@style/EntryEditSingleLine_container">
|
style="@style/EntryEditSingleLine_container">
|
||||||
<ImageView
|
<ImageView
|
||||||
|
@@ -26,6 +26,7 @@ using KeePassLib.Keys;
|
|||||||
using KeePassLib.Serialization;
|
using KeePassLib.Serialization;
|
||||||
using Console = System.Console;
|
using Console = System.Console;
|
||||||
using Object = Java.Lang.Object;
|
using Object = Java.Lang.Object;
|
||||||
|
using AndroidX.Core.Content;
|
||||||
|
|
||||||
namespace keepass2android
|
namespace keepass2android
|
||||||
{
|
{
|
||||||
@@ -343,7 +344,7 @@ namespace keepass2android
|
|||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.AddAction(Intents.DatabaseLocked);
|
filter.AddAction(Intents.DatabaseLocked);
|
||||||
filter.AddAction(Intent.ActionScreenOff);
|
filter.AddAction(Intent.ActionScreenOff);
|
||||||
RegisterReceiver(_intentReceiver, filter, ReceiverFlags.Exported);
|
ContextCompat.RegisterReceiver(this, _intentReceiver, filter, (int)ReceiverFlags.Exported);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1342,7 +1342,7 @@ namespace keepass2android
|
|||||||
intentFilter.AddAction(Intents.LockDatabase);
|
intentFilter.AddAction(Intents.LockDatabase);
|
||||||
intentFilter.AddAction(Intents.LockDatabaseByTimeout);
|
intentFilter.AddAction(Intents.LockDatabaseByTimeout);
|
||||||
intentFilter.AddAction(Intents.CloseDatabase);
|
intentFilter.AddAction(Intents.CloseDatabase);
|
||||||
Context.RegisterReceiver(broadcastReceiver, intentFilter, ReceiverFlags.Exported);
|
ContextCompat.RegisterReceiver(Context, broadcastReceiver, intentFilter, (int)ReceiverFlags.Exported);
|
||||||
|
|
||||||
//ZXing.Net.Mobile.Forms.Android.Platform.Init();
|
//ZXing.Net.Mobile.Forms.Android.Platform.Init();
|
||||||
}
|
}
|
||||||
|
@@ -39,6 +39,7 @@ using KeePass.Util.Spr;
|
|||||||
using keepass2android;
|
using keepass2android;
|
||||||
using KeePassLib.Serialization;
|
using KeePassLib.Serialization;
|
||||||
using PluginTOTP;
|
using PluginTOTP;
|
||||||
|
using AndroidX.Core.Content;
|
||||||
|
|
||||||
namespace keepass2android
|
namespace keepass2android
|
||||||
{
|
{
|
||||||
@@ -322,7 +323,8 @@ namespace keepass2android
|
|||||||
_stopOnLockBroadcastReceiver = new StopOnLockBroadcastReceiver(this);
|
_stopOnLockBroadcastReceiver = new StopOnLockBroadcastReceiver(this);
|
||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.AddAction(Intents.DatabaseLocked);
|
filter.AddAction(Intents.DatabaseLocked);
|
||||||
RegisterReceiver(_stopOnLockBroadcastReceiver, filter, ReceiverFlags.Exported);
|
|
||||||
|
ContextCompat.RegisterReceiver(this, _stopOnLockBroadcastReceiver, filter, (int)ReceiverFlags.Exported);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((intent.Action == Intents.ShowNotification) || (intent.Action == Intents.UpdateKeyboard))
|
if ((intent.Action == Intents.ShowNotification) || (intent.Action == Intents.UpdateKeyboard))
|
||||||
@@ -529,7 +531,7 @@ namespace keepass2android
|
|||||||
_notificationDeletedBroadcastReceiver = new NotificationDeletedBroadcastReceiver(this);
|
_notificationDeletedBroadcastReceiver = new NotificationDeletedBroadcastReceiver(this);
|
||||||
IntentFilter deletefilter = new IntentFilter();
|
IntentFilter deletefilter = new IntentFilter();
|
||||||
deletefilter.AddAction(ActionNotificationCancelled);
|
deletefilter.AddAction(ActionNotificationCancelled);
|
||||||
RegisterReceiver(_notificationDeletedBroadcastReceiver, deletefilter, ReceiverFlags.Exported);
|
ContextCompat.RegisterReceiver(this, _notificationDeletedBroadcastReceiver, deletefilter, (int)ReceiverFlags.Exported);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -23,6 +23,7 @@ using Android.Graphics;
|
|||||||
using Android.OS;
|
using Android.OS;
|
||||||
using Android.Preferences;
|
using Android.Preferences;
|
||||||
using AndroidX.Core.App;
|
using AndroidX.Core.App;
|
||||||
|
using AndroidX.Core.Content;
|
||||||
using keepass2android;
|
using keepass2android;
|
||||||
using KeePassLib.Utility;
|
using KeePassLib.Utility;
|
||||||
|
|
||||||
@@ -60,8 +61,8 @@ namespace keepass2android
|
|||||||
_screenOffReceiver = new ScreenOffReceiver();
|
_screenOffReceiver = new ScreenOffReceiver();
|
||||||
IntentFilter filter = new IntentFilter();
|
IntentFilter filter = new IntentFilter();
|
||||||
filter.AddAction(Intent.ActionScreenOff);
|
filter.AddAction(Intent.ActionScreenOff);
|
||||||
RegisterReceiver(_screenOffReceiver, filter, ReceiverFlags.Exported);
|
ContextCompat.RegisterReceiver(this, _screenOffReceiver, filter, (int)ReceiverFlags.Exported);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
|
public override StartCommandResult OnStartCommand(Intent intent, StartCommandFlags flags, int startId)
|
||||||
|
Reference in New Issue
Block a user