access Android_id only on push
This commit is contained in:
parent
5fa1caf7ee
commit
1cfc5d426e
|
@ -913,27 +913,45 @@ public class XmppConnectionService extends Service {
|
|||
manageAccountConnectionStates(ACTION_INTERNAL_PING, null);
|
||||
}
|
||||
|
||||
private synchronized void manageAccountConnectionStates(final String action, final Bundle extras) {
|
||||
private synchronized void manageAccountConnectionStates(
|
||||
final String action, final Bundle extras) {
|
||||
final String pushedAccountHash = extras == null ? null : extras.getString("account");
|
||||
final boolean interactive = Arrays.asList(ACTION_TRY_AGAIN).contains(action);
|
||||
final boolean interactive = java.util.Objects.equals(ACTION_TRY_AGAIN, action);
|
||||
WakeLockHelper.acquire(wakeLock);
|
||||
boolean pingNow = ConnectivityManager.CONNECTIVITY_ACTION.equals(action) || (Config.POST_CONNECTIVITY_CHANGE_PING_INTERVAL > 0 && ACTION_POST_CONNECTIVITY_CHANGE.equals(action));
|
||||
boolean pingNow =
|
||||
ConnectivityManager.CONNECTIVITY_ACTION.equals(action)
|
||||
|| (Config.POST_CONNECTIVITY_CHANGE_PING_INTERVAL > 0
|
||||
&& ACTION_POST_CONNECTIVITY_CHANGE.equals(action));
|
||||
final HashSet<Account> pingCandidates = new HashSet<>();
|
||||
final String androidId = PhoneHelper.getAndroidId(this);
|
||||
final String androidId = pushedAccountHash == null ? null : PhoneHelper.getAndroidId(this);
|
||||
for (final Account account : accounts) {
|
||||
final boolean pushWasMeantForThisAccount = CryptoHelper.getAccountFingerprint(account, androidId).equals(pushedAccountHash);
|
||||
pingNow |= processAccountState(account,
|
||||
interactive,
|
||||
"ui".equals(action),
|
||||
pushWasMeantForThisAccount,
|
||||
pingCandidates);
|
||||
final boolean pushWasMeantForThisAccount =
|
||||
androidId != null
|
||||
&& CryptoHelper.getAccountFingerprint(account, androidId)
|
||||
.equals(pushedAccountHash);
|
||||
pingNow |=
|
||||
processAccountState(
|
||||
account,
|
||||
interactive,
|
||||
"ui".equals(action),
|
||||
pushWasMeantForThisAccount,
|
||||
pingCandidates);
|
||||
}
|
||||
if (pingNow) {
|
||||
for (Account account : pingCandidates) {
|
||||
for (final Account account : pingCandidates) {
|
||||
final boolean lowTimeout = isInLowPingTimeoutMode(account);
|
||||
account.getXmppConnection().sendPing();
|
||||
Log.d(Config.LOGTAG, account.getJid().asBareJid() + " send ping (action=" + action + ",lowTimeout=" + lowTimeout + ")");
|
||||
scheduleWakeUpCall(lowTimeout ? Config.LOW_PING_TIMEOUT : Config.PING_TIMEOUT, account.getUuid().hashCode());
|
||||
Log.d(
|
||||
Config.LOGTAG,
|
||||
account.getJid().asBareJid()
|
||||
+ " send ping (action="
|
||||
+ action
|
||||
+ ",lowTimeout="
|
||||
+ lowTimeout
|
||||
+ ")");
|
||||
scheduleWakeUpCall(
|
||||
lowTimeout ? Config.LOW_PING_TIMEOUT : Config.PING_TIMEOUT,
|
||||
account.getUuid().hashCode());
|
||||
}
|
||||
}
|
||||
WakeLockHelper.release(wakeLock);
|
||||
|
|
|
@ -13,14 +13,12 @@ import android.provider.Settings;
|
|||
public class PhoneHelper {
|
||||
|
||||
@SuppressLint("HardwareIds")
|
||||
public static String getAndroidId(Context context) {
|
||||
public static String getAndroidId(final Context context) {
|
||||
return Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID);
|
||||
}
|
||||
|
||||
public static Uri getProfilePictureUri(Context context) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
|
||||
&& context.checkSelfPermission(Manifest.permission.READ_CONTACTS)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
public static Uri getProfilePictureUri(final Context context) {
|
||||
if (context.checkSelfPermission(Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
|
||||
return null;
|
||||
}
|
||||
final String[] projection = new String[] {Profile._ID, Profile.PHOTO_URI};
|
||||
|
|
Loading…
Reference in a new issue