switching connectors is working
[andGMXsms.git] / src / de / ub0r / android / websms / connector / ConnectorSpec.java
bloba93bc9e844267c8cca6d6077f5415132574d1e59
1 /*
2 * Copyright (C) 2010 Felix Bechstein
3 *
4 * This file is part of WebSMS.
5 *
6 * This program is free software; you can redistribute it and/or modify it under
7 * the terms of the GNU General Public License as published by the Free Software
8 * Foundation; either version 3 of the License, or (at your option) any later
9 * version.
11 * This program is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
14 * details.
16 * You should have received a copy of the GNU General Public License along with
17 * this program; If not, see <http://www.gnu.org/licenses/>.
20 package de.ub0r.android.websms.connector;
22 import android.content.Intent;
23 import android.os.Bundle;
25 /**
26 * ConnectorSpec presents all necessary informations to use a connector.
28 * @author flx
30 public final class ConnectorSpec {
32 /** Key to find a connector in a Bundle. */
33 private static final String EXTRAS_CONNECTOR = "connector";
35 /** Connector: ID. */
36 private static final String ID = "connector_id";
37 /** Connector: ID. */
38 private static final String NAME = "connector_name";
39 /** Connector: Status. */
40 private static final String STATUS = "connector_status";
41 /** Connector: Status: inactive. */
42 public static final short STATUS_INACTIVE = 0;
43 /** Connector: Status: enabled. */
44 public static final short STATUS_ENABLED = 1;
45 /** Connector: Status: ready. */
46 public static final short STATUS_READY = 2;
47 /** Connector: Status: bootstrapping. */
48 public static final short STATUS_BOOTSTRAPPING = 4;
49 /** Connector: Status: updating. */
50 public static final short STATUS_UPDATING = 8;
51 /** Connector: Status: sending. */
52 public static final short STATUS_SENDING = 16;
53 /** Connector: Author. */
54 private static final String AUTHOR = "connector_author";
55 /** Connector: Preferences' intent URI. */
56 private static final String PREFSINTENT = "connector_prefsintent";
57 /** Connector: Preferences' title. */
58 private static final String PREFSTITLE = "connector_prefstitle";
59 /** Connector: Capabilities. */
60 private static final String CAPABILITIES = "connector_capabilities";
61 /** Feature: none. */
62 public static final short CAPABILITIES_NONE = 0;
63 /** Feature: bootstrap. */
64 public static final short CAPABILITIES_BOOSTRAP = 1;
65 /** Feature: update. */
66 public static final short CAPABILITIES_UPDATE = 2;
67 /** Feature: send. */
68 public static final short CAPABILITIES_SEND = 4;
69 /** Connector: Balance. */
70 private static final String BALANCE = "connector_balance";
72 // Subconnectors
73 /** Connector: SubConnector prefix. */
74 private static final String SUB_PREFIX = "sub_";
75 /** Connector: number of subconnectors. */
76 private static final String SUB_COUNT = SUB_PREFIX + "n";
78 /**
79 * SubConnectorSpec presents all necessary informations to use a
80 * subconnector.
82 * @author flx
84 public final class SubConnectorSpec {
85 /** Connector: ID. */
86 private static final String ID = "subconnector_id";
87 /** Connector: name. */
88 private static final String NAME = "subconnector_name";
89 /** Connector: features. */
90 private static final String FEATURES = "subconnector_features";
91 /** Feature: none. */
92 public static final short FEATURE_NONE = 0;
93 /** Feature: multiple recipients. */
94 public static final short FEATURE_MULTIRECIPIENTS = 1;
95 /** Feature: flash sms. */
96 public static final short FEATURE_FLASHSMS = 2;
97 /** Feature: send later. */
98 public static final short FEATURE_SENDLATER = 4;
99 /** Feature: custom sender. */
100 public static final short FEATURE_CUSTOMSENDER = 8;
102 /** {@link Bundle} represents the SubConnectorSpec. */
103 private final Bundle bundle;
106 * Create SubConnectorSpec from bundle.
108 * @param b
109 * bundle
111 SubConnectorSpec(final Bundle b) {
112 this.bundle = b;
116 * Create SubConnectorSpec.
118 * @param id
119 * id
120 * @param name
121 * name
122 * @param features
123 * features
125 SubConnectorSpec(final String id, final String name,
126 final short features) {
127 this.bundle = new Bundle();
128 this.bundle.putString(ID, id);
129 this.bundle.putString(NAME, name);
130 this.bundle.putShort(FEATURES, features);
134 * @return internal bundle
136 Bundle getBundle() {
137 return this.bundle;
141 * @return ID
143 public String getID() {
144 return this.bundle.getString(ID);
148 * @return name
150 public String getName() {
151 return this.bundle.getString(NAME);
155 * @return features
157 public short getFeatures() {
158 return this.bundle.getShort(FEATURES, FEATURE_NONE);
162 * @param features
163 * features
164 * @return true if connector has given features
166 public boolean hasFeatures(final short features) {
167 final short f = this.bundle.getShort(FEATURES, FEATURE_NONE);
168 return (f & features) == features;
172 /** {@link Bundle} represents the ConnectorSpec. */
173 private final Bundle bundle;
176 * Create ConnectorSpec from intent.
178 * @param i
179 * intent
181 public ConnectorSpec(final Intent i) {
182 Bundle e = i.getExtras();
183 if (e != null) {
184 this.bundle = e.getBundle(EXTRAS_CONNECTOR);
185 } else {
186 this.bundle = new Bundle();
191 * Create ConnectorSpec.
193 * @param id
194 * ID
195 * @param name
196 * name
198 public ConnectorSpec(final String id, final String name) {
199 this.bundle = new Bundle();
200 this.bundle.putString(ID, id);
201 this.bundle.putString(NAME, name);
205 * Update ConnectorSpecs.
207 * @param connector
208 * {@link ConnectorSpec}
210 public void update(final ConnectorSpec connector) {
211 this.bundle.putAll(connector.getBundle());
215 * Set this {@link ConnectorSpec} to an {@link Intent}.
217 * @param intent
218 * {@link Intent}.
219 * @return the same {@link Intent}
221 public Intent setToIntent(final Intent intent) {
222 intent.putExtra(EXTRAS_CONNECTOR, this.getBundle());
223 return intent;
227 * @return internal bundle
229 public Bundle getBundle() {
230 return this.bundle;
234 * @return ID
236 public String getID() {
237 return this.bundle.getString(ID);
241 * @return Name
243 public String getName() {
244 return this.bundle.getString(NAME);
248 * Set name.
250 * @param name
251 * name
253 public void setName(final String name) {
254 this.bundle.putString(NAME, name);
258 * @return status
260 public short getStatus() {
261 return this.bundle.getShort(STATUS, STATUS_INACTIVE);
265 * Set status.
267 * @param status
268 * status
270 public void setStatus(final short status) {
271 this.bundle.putShort(STATUS, status);
275 * Set status.
277 * @param status
278 * status
280 public void setStatus(final int status) {
281 this.bundle.putShort(STATUS, (short) status);
285 * Set status: ready.
287 public void setReady() {
288 this.setStatus(STATUS_ENABLED | STATUS_READY);
292 * @param status
293 * status
294 * @return true if connector has given status
296 public boolean hasStatus(final short status) {
297 final short s = this.bundle.getShort(STATUS, STATUS_INACTIVE);
298 return (s & status) == status;
302 * @return author
304 public String getAuthor() {
305 return this.bundle.getString(AUTHOR);
309 * Set author.
311 * @param author
312 * author
314 public void setAuthor(final String author) {
315 this.bundle.putString(AUTHOR, author);
319 * @return prefs intent uri
321 public String getPrefsIntent() {
322 return this.bundle.getString(PREFSINTENT);
326 * Set prefs intent.
328 * @param prefsIntent
329 * prefs intent
331 public void setPrefsIntent(final String prefsIntent) {
332 this.bundle.putString(PREFSINTENT, prefsIntent);
336 * @return prefs title
338 public String getPrefsTitle() {
339 return this.bundle.getString(PREFSTITLE);
343 * Set prefs title.
345 * @param prefsTitle
346 * prefs title
348 public void setPrefsTitle(final String prefsTitle) {
349 this.bundle.putString(PREFSTITLE, prefsTitle);
353 * @return balance
355 public String getBalance() {
356 return this.bundle.getString(BALANCE);
360 * Set balance.
362 * @param balance
363 * balance
365 public void setBalance(final String balance) {
366 this.bundle.putString(BALANCE, balance);
370 * @return capabilities
372 public short getCapabilities() {
373 return this.bundle.getShort(CAPABILITIES, CAPABILITIES_NONE);
377 * Set capabilities.
379 * @param capabilities
380 * capabilities
382 public void setCapabilities(final short capabilities) {
383 this.bundle.putShort(CAPABILITIES, capabilities);
387 * Set capabilities.
389 * @param capabilities
390 * capabilities
392 public void setCapabilities(final int capabilities) {
393 this.setCapabilities((short) capabilities);
397 * @param capabilities
398 * capabilities
399 * @return true if connector has given capabilities
401 public boolean hasCapabilities(final short capabilities) {
402 final short c = this.bundle.getShort(CAPABILITIES, CAPABILITIES_NONE);
403 return (c & capabilities) == capabilities;
407 * @return all SubConnectors
409 public SubConnectorSpec[] getSubConnectors() {
410 final int c = this.bundle.getInt(SUB_COUNT, 0);
411 final SubConnectorSpec[] ret = new SubConnectorSpec[c];
412 for (int i = 0; i < c; i++) {
413 ret[i] = new SubConnectorSpec(// .
414 this.bundle.getBundle(SUB_PREFIX + i));
416 return ret;
420 * Get SubConnector by ID.
422 * @param id
423 * ID
424 * @return SubConnector
426 public SubConnectorSpec getSubConnector(final String id) {
427 final int c = this.bundle.getInt(SUB_COUNT, 0);
428 for (int i = 0; i < c; i++) {
429 final SubConnectorSpec sc = new SubConnectorSpec(this.bundle
430 .getBundle(SUB_PREFIX + i));
431 if (id.equals(sc.getID())) {
432 return sc;
435 return null;
439 * Add a SubConnector.
441 * @param id
442 * id
443 * @param name
444 * name
445 * @param features
446 * features
448 public void addSubConnector(final String id, final String name,
449 final short features) {
450 final int c = this.bundle.getInt(SUB_COUNT, 0);
451 this.bundle.putBundle(SUB_PREFIX + c, new SubConnectorSpec(id, name,
452 features).getBundle());
453 this.bundle.putInt(SUB_COUNT, c + 1);
457 * Add a SubConnector.
459 * @param id
460 * id
461 * @param name
462 * name
463 * @param features
464 * features
466 public void addSubConnector(final String id, final String name,
467 final int features) {
468 this.addSubConnector(id, name, (short) features);