/*
* Copyright 2013 Jacob Klinker
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.klinker.android.send_message;
import android.net.wifi.WifiInfo;
import android.os.Build;
import com.klinker.android.logger.Log;
/**
* Class to house all of the settings that can be used to send a message
*
* @author Jake Klinker
*/
public class Settings {
public static final int DEFAULT_SUBSCRIPTION_ID = -1;
// MMS options
private String mmsc;
private String proxy;
private String port;
private String userAgent;
private String uaProfUrl;
private String uaProfTagName;
private boolean group;
private boolean useSystemSending;
// SMS options
private boolean deliveryReports;
private boolean split;
private boolean splitCounter;
private boolean stripUnicode;
private String signature;
private String preText;
private boolean sendLongAsMms;
private int sendLongAsMmsAfter;
// SIM options
private int subscriptionId = DEFAULT_SUBSCRIPTION_ID;
/**
* Default constructor to set everything to default values
*/
public Settings() {
this("", "", "0", true, false, false, false, false, "", "", true, 3, true, DEFAULT_SUBSCRIPTION_ID);
}
/**
* Copy constuctor
* @param s is the Settings object to copy from
*/
public Settings(Settings s) {
this.mmsc = s.getMmsc();
this.proxy = s.getProxy();
this.port = s.getPort();
this.userAgent = s.getAgent();
this.uaProfUrl = s.getUserProfileUrl();
this.uaProfTagName = s.getUaProfTagName();
this.group = s.getGroup();
this.deliveryReports = s.getDeliveryReports();
this.split = s.getSplit();
this.splitCounter = s.getSplitCounter();
this.stripUnicode = s.getStripUnicode();
this.signature = s.getSignature();
this.preText = s.getPreText();
this.sendLongAsMms = s.getSendLongAsMms();
this.sendLongAsMmsAfter = s.getSendLongAsMmsAfter();
this.subscriptionId = s.getSubscriptionId();
}
/**
* @param mmsc is the address contained by the apn to send MMS to
* @param proxy is the proxy address in the apn to send MMS through
* @param port is the port from the apn to send MMS through
* @param group is a boolean specifying whether or not to send messages with multiple recipients as a group MMS message
* @param deliveryReports is a boolean to retrieve delivery reports from SMS messages
* @param split is a boolean to manually split messages (shouldn't be necessary, but some carriers do not split on their own)
* @param splitCounter adds a split counter to the front of all split messages
* @param stripUnicode replaces many unicode characters with their gsm compatible equivalent to allow for sending 160 characters instead of 70
* @param signature a signature to attach at the end of each message
* @param sendLongAsMms if a message is too long to be multiple SMS, convert it to a single MMS
* @param sendLongAsMmsAfter is an int of how many pages long an SMS must be before it is split
* @param subscriptionId is the ID for the SIM card. Can be null unless you are trying to use dual SIM support
*/
public Settings(String mmsc, String proxy, String port, boolean group,
boolean deliveryReports, boolean split, boolean splitCounter,
boolean stripUnicode, String signature, String preText, boolean sendLongAsMms,
int sendLongAsMmsAfter, boolean useSystemSending, Integer subscriptionId) {
this.mmsc = mmsc;
this.proxy = proxy;
this.port = port;
this.userAgent = "";
this.uaProfUrl = "";
this.uaProfTagName = "";
this.group = group;
this.deliveryReports = deliveryReports;
this.split = split;
this.splitCounter = splitCounter;
this.stripUnicode = stripUnicode;
this.signature = signature;
this.preText = preText;
this.sendLongAsMms = sendLongAsMms;
this.sendLongAsMmsAfter = sendLongAsMmsAfter;
setUseSystemSending(useSystemSending);
this.subscriptionId = subscriptionId != null ? subscriptionId : DEFAULT_SUBSCRIPTION_ID;
}
/**
* Sets MMSC
*
* @param mmsc is the mmsc from the apns
*/
public void setMmsc(String mmsc) {
this.mmsc = mmsc;
}
/**
* Sets the MMS Proxy
*
* @param proxy is the proxy from the apns
*/
public void setProxy(String proxy) {
this.proxy = proxy;
}
/**
* Sets the Port
*
* @param port is the port from the apns
*/
public void setPort(String port) {
this.port = port;
}
/**
* Sets the user agent
*
* @param agent is the agent to send http request with
*/
public void setAgent(String agent) { this.userAgent = agent; }
/**
* Sets the user agent profile url
*
* @param userProfileUrl is the user agent profile url
*/
public void setUserProfileUrl(String userProfileUrl) { this.uaProfUrl = userProfileUrl; }
/**
* Sets the user agent profile tag name
*
* @param tagName the tag name to use
*/
public void setUaProfTagName(String tagName) { this.uaProfTagName = tagName; }
/**
* Sets group MMS messages
*
* @param group is a boolean specifying whether or not to send messages with multiple recipients as a group MMS message
*/
public void setGroup(boolean group) {
this.group = group;
}
/**
* Sets whether to receive delivery reports from SMS messages
*
* @param deliveryReports is a boolean to retrieve delivery reports from SMS messages
*/
public void setDeliveryReports(boolean deliveryReports) {
this.deliveryReports = deliveryReports;
}
/**
* Sets whether to manually split an SMS or not
*
* @param split is a boolean to manually split messages (shouldn't be necessary, but some carriers do not split on their own)
*/
public void setSplit(boolean split) {
this.split = split;
}
/**
* Adds a split counter to the front of each split SMS
*
* @param splitCounter adds a split counter to the front of all split messages
*/
public void setSplitCounter(boolean splitCounter) {
this.splitCounter = splitCounter;
}
/**
* Sets whether or not unicode characters should be sent or converted to their GSM compatible alternative
*
* @param stripUnicode replaces many unicode characters with their gsm compatible equivalent to allow for sending 160 characters instead of 70
*/
public void setStripUnicode(boolean stripUnicode) {
this.stripUnicode = stripUnicode;
}
/**
* Sets a signature to be attached to each message
*
* @param signature a signature to attach at the end of each message
*/
public void setSignature(String signature) {
this.signature = signature;
}
/**
* Sets the text to be sent before an SMS message
*
* @param preText text to be attached to the beginning of each message
*/
public void setPreText(String preText) {
this.preText = preText;
}
/**
* Sets whether long SMS or Voice messages should instead be sent by a single MMS
*
* @param sendLongAsMms if a message is too long to be multiple SMS, convert it to a single MMS
*/
public void setSendLongAsMms(boolean sendLongAsMms) {
this.sendLongAsMms = sendLongAsMms;
}
/**
* Sets when we should convert SMS or Voice into an MMS message
*
* @param sendLongAsMmsAfter is an int of how many pages long an SMS must be before it is split
*/
public void setSendLongAsMmsAfter(int sendLongAsMmsAfter) {
this.sendLongAsMmsAfter = sendLongAsMmsAfter;
}
/**
* @param useSystemSending whether or not to use the system sending method on Lollipop+ devices
*/
public void setUseSystemSending(boolean useSystemSending) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
this.useSystemSending = useSystemSending;
} else {
this.useSystemSending = false;
Log.e("Settings", "System sending only available on Lollipop+ devices");
}
}
/**
* Set the subscription ID that should be used for sending. It isn't applied to receiving at this time.
*
* @param subscriptionId null if you do not want to use one.
*/
public void setSubscriptionId(Integer subscriptionId) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1 || subscriptionId == null) {
// we won't allow you to go away from the default if your device doesn't support it
this.subscriptionId = DEFAULT_SUBSCRIPTION_ID;
} else {
this.subscriptionId = subscriptionId;
}
}
/**
* @return MMSC to send through
*/
public String getMmsc() {
return this.mmsc;
}
/**
* @return the proxy to send MMS through
*/
public String getProxy() {
return this.proxy;
}
/**
* @return the port to send MMS through
*/
public String getPort() {
return this.port;
}
/**
* @return the user agent to send mms with
*/
public String getAgent() { return this.userAgent; }
/**
* @return the user agent profile url to send mms with
*/
public String getUserProfileUrl() { return this.uaProfUrl; }
/**
* @return the user agent profile tag name
*/
public String getUaProfTagName() { return this.uaProfTagName; }
/**
* @return whether or not to send Group MMS or multiple SMS/Voice messages
*/
public boolean getGroup() {
return this.group;
}
/**
* @return whether or not to request delivery reports on SMS messages
*/
public boolean getDeliveryReports() {
return this.deliveryReports;
}
/**
* @return whether or not SMS should be split manually
*/
public boolean getSplit() {
return this.split;
}
/**
* @return whether or not a split counter should be attached to manually split messages
*/
public boolean getSplitCounter() {
return this.splitCounter;
}
/**
* @return whether or not unicode chars should be substituted with gms characters
*/
public boolean getStripUnicode() {
return this.stripUnicode;
}
/**
* @return the signature attached to SMS messages
*/
public String getSignature() {
return this.signature;
}
/**
* @return the text attached to the beginning of each SMS
*/
public String getPreText() {
return this.preText;
}
/**
* @return whether or not to send long SMS or Voice as single MMS
*/
public boolean getSendLongAsMms() {
return this.sendLongAsMms;
}
/**
* @return number of pages sms must be to send instead as MMS
*/
public int getSendLongAsMmsAfter() {
return this.sendLongAsMmsAfter;
}
/**
* @return whether or not to use the system sending method on Lollipop+ devices
*/
public boolean getUseSystemSending() {
return useSystemSending;
}
/**
* @return the subscription ID or the default if one isn't set.
*/
public int getSubscriptionId() {
return subscriptionId;
}
/**
* Enables or disables logging for debug purposes logs will be written both to your devices
* logcat log and an external file you can specify so that other users can assist with debugging easily
* if you would like
*
* @param debugLogging true to enable debug logging when sending and receiving messages
* @param path the external path on the sd card to write the log to
*/
public static void setDebugLogging(boolean debugLogging, String path) {
Log.setDebug(debugLogging);
Log.setPath(path);
}
}