2 * Copyright (C) 2010 Felix Bechstein
4 * This file is part of WebSMS.
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
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
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
;
26 * ConnectorSpec presents all necessary informations to use a connector.
30 public final class ConnectorSpec
{
32 /** Key to find a connector in a Bundle. */
33 private static final String EXTRAS_CONNECTOR
= "connector";
36 private static final String ID
= "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";
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;
68 public static final short CAPABILITIES_SEND
= 4;
69 /** Connector: Balance. */
70 private static final String BALANCE
= "connector_balance";
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";
79 * SubConnectorSpec presents all necessary informations to use a
84 public final class SubConnectorSpec
{
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";
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.
111 SubConnectorSpec(final Bundle b
) {
116 * Create SubConnectorSpec.
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
143 public String
getID() {
144 return this.bundle
.getString(ID
);
150 public String
getName() {
151 return this.bundle
.getString(NAME
);
157 public short getFeatures() {
158 return this.bundle
.getShort(FEATURES
, FEATURE_NONE
);
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.
181 public ConnectorSpec(final Intent i
) {
182 Bundle e
= i
.getExtras();
184 this.bundle
= e
.getBundle(EXTRAS_CONNECTOR
);
186 this.bundle
= new Bundle();
191 * Create ConnectorSpec.
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.
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}.
219 * @return the same {@link Intent}
221 public Intent
setToIntent(final Intent intent
) {
222 intent
.putExtra(EXTRAS_CONNECTOR
, this.getBundle());
227 * @return internal bundle
229 public Bundle
getBundle() {
236 public String
getID() {
237 return this.bundle
.getString(ID
);
243 public String
getName() {
244 return this.bundle
.getString(NAME
);
253 public void setName(final String name
) {
254 this.bundle
.putString(NAME
, name
);
260 public short getStatus() {
261 return this.bundle
.getShort(STATUS
, STATUS_INACTIVE
);
270 public void setStatus(final short status
) {
271 this.bundle
.putShort(STATUS
, status
);
280 public void setStatus(final int status
) {
281 this.bundle
.putShort(STATUS
, (short) status
);
287 public void setReady() {
288 this.setStatus(STATUS_ENABLED
| STATUS_READY
);
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
;
304 public String
getAuthor() {
305 return this.bundle
.getString(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
);
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
);
348 public void setPrefsTitle(final String prefsTitle
) {
349 this.bundle
.putString(PREFSTITLE
, prefsTitle
);
355 public String
getBalance() {
356 return this.bundle
.getString(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
);
379 * @param capabilities
382 public void setCapabilities(final short capabilities
) {
383 this.bundle
.putShort(CAPABILITIES
, capabilities
);
389 * @param capabilities
392 public void setCapabilities(final int capabilities
) {
393 this.setCapabilities((short) capabilities
);
397 * @param 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
));
420 * Get SubConnector by 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())) {
439 * Add a SubConnector.
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.
466 public void addSubConnector(final String id
, final String name
,
467 final int features
) {
468 this.addSubConnector(id
, name
, (short) features
);