package org.iilab.pb.model;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.text.TextUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class SMSSettings {
public static final String PHONE_NUMBER = "PHONE_NUMBER_";
public static final String SMS_MESSAGE = "SMS_MESSAGE";
private static final int MASK_LIMIT = 2;
public static final String BLANK = "";
private List<String> phoneNumbers = new ArrayList<String>();
private String message;
public SMSSettings(List<String> phoneNumbers) {
this.phoneNumbers = phoneNumbers;
this.message = null;
}
public SMSSettings(List<String> phoneNumbers, String message) {
this.phoneNumbers = phoneNumbers;
this.message = message;
}
public static void saveContacts(Context context, SMSSettings smsSettings) {
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = settings.edit();
int i = 0;
for (String phoneNumber : smsSettings.phoneNumbers) {
String validPhoneDigit = phoneNumber.replaceAll("[- ]", "");
editor.putString(PHONE_NUMBER + i++, validPhoneDigit);
}
editor.commit();
}
public static void saveMessage(Context context, String msg){
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = settings.edit();
editor.putString(SMS_MESSAGE, msg);
editor.commit();
}
public static SMSSettings retrieve(Context context) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
Map<String, String> allPreferences = (Map<String, String>) sharedPreferences.getAll();
List<String> retrievedPhoneNumbers = retrievePhoneNumbers(allPreferences);
return new SMSSettings(retrievedPhoneNumbers, allPreferences.get(SMS_MESSAGE));
}
private static List<String> retrievePhoneNumbers(Map<String, String> allPreferences) {
List<String> retrievedPhoneNumbers = new ArrayList<String>();
List<String> sortedKeys = new ArrayList<String>(allPreferences.keySet());
Collections.sort(sortedKeys);
for (String preferenceKey : sortedKeys) {
if (preferenceKey.startsWith(PHONE_NUMBER)) {
retrievedPhoneNumbers.add(allPreferences.get(preferenceKey));
}
}
return retrievedPhoneNumbers;
}
public static String retrieveMessage(Context context) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
Map<String, String> allPreferences = (Map<String, String>) sharedPreferences.getAll();
List<String> retrievedPhoneNumbers = retrievePhoneNumbers(allPreferences);
return allPreferences.get(SMS_MESSAGE);
}
public String message() {
return message == null? BLANK : message.trim();
}
public String trimmedMessage() {
String trimmedMessage = message();
if(trimmedMessage.endsWith(".")) {
return trimmedMessage.substring(0, trimmedMessage.length()-1);
}
return trimmedMessage;
}
public String phoneNumberAt(int index) {
return phoneNumbers.size() > index ? phoneNumbers.get(index) : BLANK;
}
public List<String> validPhoneNumbers() {
List<String> validNumbers = new ArrayList<String>();
for(String phoneNumber : phoneNumbers) {
if(!TextUtils.isEmpty(phoneNumber)) validNumbers.add(phoneNumber);
}
return validNumbers;
}
public String maskedPhoneNumberAt(int index) {
return mask(phoneNumberAt(index));
}
private String mask(String phoneNumber) {
if (phoneNumber == null || phoneNumber.length() < MASK_LIMIT) return phoneNumber;
int length = phoneNumber.length();
String prefix = phoneNumber.substring(0, length - MASK_LIMIT).replaceAll(".", "*");
return prefix + phoneNumber.substring(length - MASK_LIMIT);
}
public boolean isConfigured() {
if (phoneNumbers == null || phoneNumbers.isEmpty()) return false;
for (String phoneNumber : phoneNumbers) {
if (!TextUtils.isEmpty(phoneNumber)) {
return true;
}
}
return false;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
SMSSettings that = (SMSSettings) o;
if (!message.equals(that.message)) return false;
if (!phoneNumbers.equals(that.phoneNumbers)) return false;
return true;
}
@Override
public int hashCode() {
int result = phoneNumbers.hashCode();
result = 31 * result + message.hashCode();
return result;
}
}