aboutsummaryrefslogtreecommitdiff
path: root/src/phone.vala
blob: e90cd6691c5672850e675818142146f1a7f3fabb (plain)
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
/*
 * Copyright 2013 Canonical Ltd.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 3.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * Authors:
 *   Charles Kerr <charles.kerr@canonical.com>
 */

class Phone: Profile
{
  SimpleActionGroup action_group;

  public Phone (Bluetooth bluetooth, SimpleActionGroup action_group)
  {
    const string profile_name = "phone";
    base (bluetooth, profile_name);

    this.bluetooth = bluetooth;
    this.action_group = action_group;

    // build the static actions
    Action[] actions = {};
    actions += root_action;
    actions += create_enabled_action (bluetooth);
    actions += create_settings_action ();
    foreach (var a in actions)
      action_group.add_action (a);

    var section = new Menu ();
    section.append_item (create_enabled_menuitem ());
    section.append (_("Bluetooth settings…"),
                    "indicator.phone-show-settings::bluetooth");
    menu.append_section (null, section);

    // know when to show the indicator & when to hide it
    bluetooth.notify.connect (() => update_visibility());
    update_visibility ();

    bluetooth.notify.connect (() => update_root_action_state());
  }

  void update_visibility ()
  {
    visible = bluetooth.powered && !bluetooth.blocked;
  }

  ///
  ///  Actions
  ///

  void show_settings (string panel)
  {
    spawn_command_line_async ("system-settings " + panel);
  }

  Action create_settings_action ()
  {
    var action = new SimpleAction ("phone-show-settings", VariantType.STRING);

    action.activate.connect ((action, panel)
        => show_settings (panel.get_string()));

    return action;
  }
}