示例#1
0
        public override void OnReceive(Context context, Intent intent)
        {
            if (_isStarted)
            {
                //DO NOT REMOVE
                //Helps to avoid multiple receivers registration on same event
                Log.Debug("AbnormalMonitorService", $"Received {intent.Action}, but monitoring already started!");
                return;
            }
            Log.Debug("AbnormalMonitorService", $"Received {intent.Action}");

            DataHolder.Initialize(context);

            ScreenUnlockReceiver.SetUnlockReceiverStatus(context,
                                                         enable: DataHolder.IsSelectedCategory(DataHolder.ScreenCategory));
            PhoneCallReceiver.SetCallReceiverStatus(context,
                                                    enable: DataHolder.IsSelectedCategory(DataHolder.PhoneCategory));
            SmsReceiver.SetSmsReceiverStatus(context,
                                             enable: DataHolder.IsSelectedCategory(DataHolder.SmsCategory));

            IntentFilter filter = new IntentFilter();

            filter.AddAction(LocationManager.ModeChangedAction);
            context.ApplicationContext.RegisterReceiver(new LocationModeChangeReceiver(), filter);

            SystemModListenerService.SetSystemMonitoringStatus(context,
                                                               enable: DataHolder.IsSelectedCategory(DataHolder.SystemCategory));

            AlarmReceiver.RegisterReceiver(context);

            LocationUtils.SetLocationTrackingEnabled(DataHolder.IsSelectedCategory(DataHolder.LocationCategory));

            _isStarted = true;
        }
示例#2
0
            public override void OnCreatePreferences(Bundle savedInstanceState, string rootKey)
            {
                AddPreferencesFromResource(Resource.Xml.settings);
                mPreferences = PreferenceManager.GetDefaultSharedPreferences(Activity);
                SettingsDir  = new File(Activity.DataDir, "shared_prefs");
                var exportPreference = FindPreference("export_settings");

                exportPreference.PreferenceClick += (sender, args) =>
                {
                    var paths = new List <File> {
                        new File(SettingsDir, SettingsFileName)
                    };
                    foreach (var file in Activity.FilesDir.ListFiles())
                    {
                        if (file.IsFile)
                        {
                            paths.Add(file);
                        }
                    }

                    if (paths.Count > 0)
                    {
                        if (OtherUtils.CreateZipArchive(paths, exportFile.AbsolutePath))
                        {
                            Toast.MakeText(Activity, Activity.GetString(Resource.String.toast_export_successful),
                                           ToastLength.Short).Show();
                        }
                        else
                        {
                            Toast.MakeText(Activity, Activity.GetString(Resource.String.toast_export_failed),
                                           ToastLength.Short).Show();
                        }
                    }
                    else
                    {
                        Toast.MakeText(Activity, Activity.GetString(Resource.String.toast_export_no_files),
                                       ToastLength.Short).Show();
                    }
                };

                var importPreference = FindPreference("import_settings");

                importPreference.PreferenceClick += (sender, args) =>
                {
                    if (!exportFile.Exists())
                    {
                        Toast.MakeText(Activity, Activity.GetString(Resource.String.toast_import_no_file),
                                       ToastLength.Short).Show();
                        return;
                    }

                    if (exportFile.Length() > 1024 * 1024)
                    {
                        Toast.MakeText(Activity, Activity.GetString(Resource.String.toast_import_big_file),
                                       ToastLength.Short).Show();
                        return;
                    }

                    if (OtherUtils.UnpackZipArchive(exportFile.AbsolutePath, Activity.CacheDir))
                    {
                        Toast.MakeText(Activity, Activity.GetString(Resource.String.toast_import_successful),
                                       ToastLength.Short).Show();
                    }
                    else
                    {
                        Toast.MakeText(Activity, Activity.GetString(Resource.String.toast_import_failed),
                                       ToastLength.Short).Show();
                        return;
                    }

                    foreach (var file in Activity.CacheDir.ListFiles())
                    {
                        Stream outputStream;

                        if (file.Name == SettingsFileName)
                        {
                            var path = new File(SettingsDir, SettingsFileName).AbsolutePath;
                            Log.Debug(nameof(OtherUtils.UnpackZipArchive), path);
                            outputStream = new FileStream(path, FileMode.Create);
                        }
                        else
                        {
                            outputStream = Activity.OpenFileOutput(file.Name, FileCreationMode.Private);
                        }

                        string text;
                        if (!file.Exists())
                        {
                            continue;
                        }
                        using (var reader = new StreamReader(new FileStream(file.AbsolutePath, FileMode.Open)))
                        {
                            text = reader.ReadToEnd();
                        }

                        using (var writer = new StreamWriter(outputStream))
                        {
                            writer.Write(text);
                        }

                        file.Delete();
                    }
                };

                var categoriesPreference =
                    (MultiSelectListPreference)FindPreference("selected_categories");

                categoriesPreference.PreferenceChange += (sender, args) =>
                {
                    var set = args.NewValue.JavaCast <HashSet>();
                    SystemModListenerService.SetSystemMonitoringStatus(Activity,
                                                                       set.Contains(DataHolder.SystemCategory));
                    LocationUtils.SetLocationTrackingEnabled(set.Contains(DataHolder.LocationCategory));
                    ScreenUnlockReceiver.SetUnlockReceiverStatus(Activity, set.Contains(DataHolder.ScreenCategory));
                    PhoneCallReceiver.SetCallReceiverStatus(Activity, set.Contains(DataHolder.PhoneCategory));
                    SmsReceiver.SetSmsReceiverStatus(Activity, set.Contains(DataHolder.SmsCategory));

                    var categories = new List <string>();
                    foreach (var val in set.ToArray())
                    {
                        categories.Add(val.ToString());
                    }

                    mPreferences.Edit().PutStringSet(categoriesPreference.Key, categories).Apply();
                };

                var about = FindPreference("app_info");

                about.Summary =
                    Activity.ApplicationContext.PackageManager.GetPackageInfo(Activity.PackageName, 0).VersionName;
                about.PreferenceClick += (sender, args) =>
                {
                    if ((mDevClickedTimes = (mDevClickedTimes + 1) % 7) == 0)
                    {
                        if (Activity is SettingsActivity parent)
                        {
                            parent.LoadScreen(SettingsCategory.Developer);
                        }
                    }
                };

                try
                {
                    var summaryNotifyPreference = FindPreference(MonitoringSummaryType);
                    summaryNotifyPreference.PreferenceChange += (sender, args) =>
                    {
                        AlarmReceiver.RegisterReceiver(Activity, (bool)args.NewValue ? 1 : 0);
                    };
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    Log.Error(nameof(MonitoringSummaryType), e.Message);
                }
            }