Get rid of Settings.getJIDResource(), which really should live in GTalkService. Add API to store the JID resource in IM provider settings.
This commit is contained in:
@ -1620,6 +1620,9 @@ public class Im {
|
|||||||
/** specifies the last heartbeat interval received from the server */
|
/** specifies the last heartbeat interval received from the server */
|
||||||
public static final String SETTING_HEARTBEAT_INTERVAL = "heartbeat_interval";
|
public static final String SETTING_HEARTBEAT_INTERVAL = "heartbeat_interval";
|
||||||
|
|
||||||
|
/** specifiy the JID resource used for Google Talk connection */
|
||||||
|
public static final String SETTING_JID_RESOURCE = "jid_resource";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Used for reliable message queue (RMQ). This is for storing the last rmq id received
|
* Used for reliable message queue (RMQ). This is for storing the last rmq id received
|
||||||
* from the GTalk server
|
* from the GTalk server
|
||||||
@ -1861,6 +1864,14 @@ public class Im {
|
|||||||
putLongValue(contentResolver, providerId, SETTING_HEARTBEAT_INTERVAL, interval);
|
putLongValue(contentResolver, providerId, SETTING_HEARTBEAT_INTERVAL, interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A convenience method to set the jid resource.
|
||||||
|
*/
|
||||||
|
public static void setJidResource(ContentResolver contentResolver,
|
||||||
|
long providerId, String jidResource) {
|
||||||
|
putStringValue(contentResolver, providerId, SETTING_JID_RESOURCE, jidResource);
|
||||||
|
}
|
||||||
|
|
||||||
public static class QueryMap extends ContentQueryMap {
|
public static class QueryMap extends ContentQueryMap {
|
||||||
private ContentResolver mContentResolver;
|
private ContentResolver mContentResolver;
|
||||||
private long mProviderId;
|
private long mProviderId;
|
||||||
@ -2046,6 +2057,23 @@ public class Im {
|
|||||||
return getLong(SETTING_HEARTBEAT_INTERVAL, 0L /* an invalid default interval */);
|
return getLong(SETTING_HEARTBEAT_INTERVAL, 0L /* an invalid default interval */);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the JID resource.
|
||||||
|
*
|
||||||
|
* @param jidResource the jid resource to be stored.
|
||||||
|
*/
|
||||||
|
public void setJidResource(String jidResource) {
|
||||||
|
ProviderSettings.setJidResource(mContentResolver, mProviderId, jidResource);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Get the JID resource used for the Google Talk connection
|
||||||
|
*
|
||||||
|
* @return the JID resource stored.
|
||||||
|
*/
|
||||||
|
public String getJidResource() {
|
||||||
|
return getString(SETTING_JID_RESOURCE, null);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convenience function for retrieving a single settings value
|
* Convenience function for retrieving a single settings value
|
||||||
* as a boolean.
|
* as a boolean.
|
||||||
|
@ -413,8 +413,6 @@ public final class Settings {
|
|||||||
|
|
||||||
private static final String TAG = "Settings";
|
private static final String TAG = "Settings";
|
||||||
|
|
||||||
private static String sJidResource = null;
|
|
||||||
|
|
||||||
public static class SettingNotFoundException extends AndroidException {
|
public static class SettingNotFoundException extends AndroidException {
|
||||||
public SettingNotFoundException(String msg) {
|
public SettingNotFoundException(String msg) {
|
||||||
super(msg);
|
super(msg);
|
||||||
@ -3621,42 +3619,6 @@ public final class Settings {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the GTalk JID resource associated with this device.
|
|
||||||
*
|
|
||||||
* @return String the JID resource of the device. It uses the device IMEI in the computation
|
|
||||||
* of the JID resource. If IMEI is not ready (i.e. telephony module not ready), we'll return
|
|
||||||
* an empty string.
|
|
||||||
* @hide
|
|
||||||
*/
|
|
||||||
// TODO: we shouldn't not have a permenant Jid resource, as that's an easy target for
|
|
||||||
// spams. We should change it once a while, like when we resubscribe to the subscription feeds
|
|
||||||
// server.
|
|
||||||
// (also, should this live in GTalkService?)
|
|
||||||
public static synchronized String getJidResource() {
|
|
||||||
if (sJidResource != null) {
|
|
||||||
return sJidResource;
|
|
||||||
}
|
|
||||||
|
|
||||||
MessageDigest digest;
|
|
||||||
try {
|
|
||||||
digest = MessageDigest.getInstance("SHA-1");
|
|
||||||
} catch (NoSuchAlgorithmException e) {
|
|
||||||
throw new RuntimeException("this should never happen");
|
|
||||||
}
|
|
||||||
|
|
||||||
String deviceId = TelephonyManager.getDefault().getDeviceId();
|
|
||||||
if (TextUtils.isEmpty(deviceId)) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[] hashedDeviceId = digest.digest(deviceId.getBytes());
|
|
||||||
String id = new String(Base64.encodeBase64(hashedDeviceId), 0, 12);
|
|
||||||
id = id.replaceAll("/", "_");
|
|
||||||
sJidResource = JID_RESOURCE_PREFIX + id;
|
|
||||||
return sJidResource;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the device ID that we should use when connecting to the mobile gtalk server.
|
* Returns the device ID that we should use when connecting to the mobile gtalk server.
|
||||||
* This is a string like "android-0x1242", where the hex string is the Android ID obtained
|
* This is a string like "android-0x1242", where the hex string is the Android ID obtained
|
||||||
|
Reference in New Issue
Block a user