Fixed leaks
This commit is contained in:
parent
6e8d2cf7dd
commit
7f8b231437
9 changed files with 100 additions and 55 deletions
|
@ -32,7 +32,6 @@ import android.hardware.SensorManager;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.os.PowerManager.WakeLock;
|
import android.os.PowerManager.WakeLock;
|
||||||
import android.telephony.PhoneStateListener;
|
import android.telephony.PhoneStateListener;
|
||||||
|
@ -97,7 +96,6 @@ public class LinphoneManager implements SensorEventListener {
|
||||||
private final Sensor mProximity;
|
private final Sensor mProximity;
|
||||||
private final MediaScanner mMediaScanner;
|
private final MediaScanner mMediaScanner;
|
||||||
private Timer mTimer, mAutoAnswerTimer;
|
private Timer mTimer, mAutoAnswerTimer;
|
||||||
private final Handler mHandler = new Handler();
|
|
||||||
|
|
||||||
private final LinphonePreferences mPrefs;
|
private final LinphonePreferences mPrefs;
|
||||||
private Core mCore;
|
private Core mCore;
|
||||||
|
@ -109,6 +107,7 @@ public class LinphoneManager implements SensorEventListener {
|
||||||
private boolean mCallGsmON;
|
private boolean mCallGsmON;
|
||||||
private boolean mProximitySensingEnabled;
|
private boolean mProximitySensingEnabled;
|
||||||
private boolean mHasLastCallSasBeenRejected;
|
private boolean mHasLastCallSasBeenRejected;
|
||||||
|
private Runnable mIterateRunnable;
|
||||||
|
|
||||||
public LinphoneManager(Context c) {
|
public LinphoneManager(Context c) {
|
||||||
mExited = false;
|
mExited = false;
|
||||||
|
@ -263,7 +262,7 @@ public class LinphoneManager implements SensorEventListener {
|
||||||
if (result == VersionUpdateCheckResult.NewVersionAvailable) {
|
if (result == VersionUpdateCheckResult.NewVersionAvailable) {
|
||||||
final String urlToUse = url;
|
final String urlToUse = url;
|
||||||
final String versionAv = version;
|
final String versionAv = version;
|
||||||
mHandler.postDelayed(
|
LinphoneUtils.dispatchOnUIThreadAfter(
|
||||||
new Runnable() {
|
new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
@ -450,11 +449,8 @@ public class LinphoneManager implements SensorEventListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
mCore.start();
|
mCore.start();
|
||||||
TimerTask lTask =
|
|
||||||
new TimerTask() {
|
mIterateRunnable =
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
LinphoneUtils.dispatchOnUIThread(
|
|
||||||
new Runnable() {
|
new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
@ -462,7 +458,12 @@ public class LinphoneManager implements SensorEventListener {
|
||||||
mCore.iterate();
|
mCore.iterate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
|
TimerTask lTask =
|
||||||
|
new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
LinphoneUtils.dispatchOnUIThread(mIterateRunnable);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
/*use schedule instead of scheduleAtFixedRate to avoid iterate from being call in burst after cpu wake up*/
|
/*use schedule instead of scheduleAtFixedRate to avoid iterate from being call in burst after cpu wake up*/
|
||||||
|
|
|
@ -23,7 +23,6 @@ import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
|
||||||
import org.linphone.LinphoneManager;
|
import org.linphone.LinphoneManager;
|
||||||
import org.linphone.LinphoneService;
|
import org.linphone.LinphoneService;
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
|
@ -31,11 +30,10 @@ import org.linphone.assistant.MenuAssistantActivity;
|
||||||
import org.linphone.chat.ChatActivity;
|
import org.linphone.chat.ChatActivity;
|
||||||
import org.linphone.history.HistoryActivity;
|
import org.linphone.history.HistoryActivity;
|
||||||
import org.linphone.settings.LinphonePreferences;
|
import org.linphone.settings.LinphonePreferences;
|
||||||
|
import org.linphone.utils.LinphoneUtils;
|
||||||
|
|
||||||
/** Creates LinphoneService and wait until Core is ready to start main Activity */
|
/** Creates LinphoneService and wait until Core is ready to start main Activity */
|
||||||
public class LinphoneLauncherActivity extends Activity {
|
public class LinphoneLauncherActivity extends Activity {
|
||||||
private Handler mHandler;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
@ -47,8 +45,6 @@ public class LinphoneLauncherActivity extends Activity {
|
||||||
if (!getResources().getBoolean(R.bool.use_full_screen_image_splashscreen)) {
|
if (!getResources().getBoolean(R.bool.use_full_screen_image_splashscreen)) {
|
||||||
setContentView(R.layout.launch_screen);
|
setContentView(R.layout.launch_screen);
|
||||||
} // Otherwise use drawable/launch_screen layer list up until first activity starts
|
} // Otherwise use drawable/launch_screen layer list up until first activity starts
|
||||||
|
|
||||||
mHandler = new Handler();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -90,7 +86,7 @@ public class LinphoneLauncherActivity extends Activity {
|
||||||
LinphoneManager.getInstance().checkForUpdate();
|
LinphoneManager.getInstance().checkForUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
mHandler.postDelayed(
|
LinphoneUtils.dispatchOnUIThreadAfter(
|
||||||
new Runnable() {
|
new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
@ -118,7 +114,7 @@ public class LinphoneLauncherActivity extends Activity {
|
||||||
throw new RuntimeException("waiting thread sleep() has been interrupted");
|
throw new RuntimeException("waiting thread sleep() has been interrupted");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mHandler.post(
|
LinphoneUtils.dispatchOnUIThread(
|
||||||
new Runnable() {
|
new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
|
@ -29,7 +29,6 @@ import android.graphics.drawable.ColorDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.CountDownTimer;
|
import android.os.CountDownTimer;
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
@ -49,6 +48,7 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.drawerlayout.widget.DrawerLayout;
|
import androidx.drawerlayout.widget.DrawerLayout;
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
import org.linphone.LinphoneManager;
|
import org.linphone.LinphoneManager;
|
||||||
import org.linphone.LinphoneService;
|
import org.linphone.LinphoneService;
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
|
@ -84,18 +84,25 @@ public class CallActivity extends LinphoneGenericActivity
|
||||||
private static final int WRITE_EXTERNAL_STORAGE_FOR_RECORDING = 2;
|
private static final int WRITE_EXTERNAL_STORAGE_FOR_RECORDING = 2;
|
||||||
private static final int CAMERA_TO_ACCEPT_UPDATE = 3;
|
private static final int CAMERA_TO_ACCEPT_UPDATE = 3;
|
||||||
|
|
||||||
private Handler mHandler = new Handler();
|
private static class HideControlsRunnable implements Runnable {
|
||||||
private Runnable mHideControlsRunnable =
|
private WeakReference<CallActivity> mWeakCallActivity;
|
||||||
new Runnable() {
|
|
||||||
|
public HideControlsRunnable(CallActivity activity) {
|
||||||
|
mWeakCallActivity = new WeakReference<>(activity);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
// Make sure that at the time this is executed this is still required
|
// Make sure that at the time this is executed this is still required
|
||||||
Call call = mCore.getCurrentCall();
|
Call call = LinphoneManager.getCore().getCurrentCall();
|
||||||
if (call != null && call.getCurrentParams().videoEnabled()) {
|
if (call != null && call.getCurrentParams().videoEnabled()) {
|
||||||
updateButtonsVisibility(false);
|
CallActivity activity = mWeakCallActivity.get();
|
||||||
|
if (activity != null) activity.updateButtonsVisibility(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
|
private final HideControlsRunnable mHideControlsRunnable = new HideControlsRunnable(this);
|
||||||
|
|
||||||
private int mPreviewX, mPreviewY;
|
private int mPreviewX, mPreviewY;
|
||||||
private TextureView mLocalPreview, mRemoteVideo;
|
private TextureView mLocalPreview, mRemoteVideo;
|
||||||
|
@ -485,9 +492,49 @@ public class CallActivity extends LinphoneGenericActivity
|
||||||
core.setNativeVideoWindowId(null);
|
core.setNativeVideoWindowId(null);
|
||||||
core.setNativePreviewWindowId(null);
|
core.setNativePreviewWindowId(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mZoomHelper != null) {
|
if (mZoomHelper != null) {
|
||||||
mZoomHelper.destroy();
|
mZoomHelper.destroy();
|
||||||
|
mZoomHelper = null;
|
||||||
}
|
}
|
||||||
|
if (mCallUpdateCountDownTimer != null) {
|
||||||
|
mCallUpdateCountDownTimer.cancel();
|
||||||
|
mCallUpdateCountDownTimer = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
mCallTimer.stop();
|
||||||
|
mCallTimer = null;
|
||||||
|
mLocalPreview = null;
|
||||||
|
mRemoteVideo = null;
|
||||||
|
mStatsFragment = null;
|
||||||
|
|
||||||
|
mButtons = null;
|
||||||
|
mActiveCalls = null;
|
||||||
|
mContactAvatar = null;
|
||||||
|
mActiveCallHeader = null;
|
||||||
|
mConferenceHeader = null;
|
||||||
|
mCallsList = null;
|
||||||
|
mCallPausedByRemote = null;
|
||||||
|
mConferenceList = null;
|
||||||
|
mMicro = null;
|
||||||
|
mSpeaker = null;
|
||||||
|
mVideo = null;
|
||||||
|
mPause = null;
|
||||||
|
mSwitchCamera = null;
|
||||||
|
mRecordingInProgress = null;
|
||||||
|
mExtrasButtons = null;
|
||||||
|
mAddCall = null;
|
||||||
|
mTransferCall = null;
|
||||||
|
mRecordCall = null;
|
||||||
|
mConference = null;
|
||||||
|
mAudioRoute = null;
|
||||||
|
mRouteEarpiece = null;
|
||||||
|
mRouteSpeaker = null;
|
||||||
|
mRouteBluetooth = null;
|
||||||
|
mContactName = null;
|
||||||
|
mMissedMessages = null;
|
||||||
|
mVideoInviteInProgress = null;
|
||||||
|
mCallUpdateDialog = null;
|
||||||
|
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
@ -588,8 +635,9 @@ public class CallActivity extends LinphoneGenericActivity
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void resetCallControlsHidingTimer() {
|
public void resetCallControlsHidingTimer() {
|
||||||
mHandler.removeCallbacks(mHideControlsRunnable);
|
LinphoneUtils.removeFromUIThreadDispatcher(mHideControlsRunnable);
|
||||||
mHandler.postDelayed(mHideControlsRunnable, SECONDS_BEFORE_HIDING_CONTROLS);
|
LinphoneUtils.dispatchOnUIThreadAfter(
|
||||||
|
mHideControlsRunnable, SECONDS_BEFORE_HIDING_CONTROLS);
|
||||||
}
|
}
|
||||||
|
|
||||||
// BUTTONS
|
// BUTTONS
|
||||||
|
@ -742,7 +790,7 @@ public class CallActivity extends LinphoneGenericActivity
|
||||||
LinphoneManager.getInstance().enableProximitySensing(!videoEnabled);
|
LinphoneManager.getInstance().enableProximitySensing(!videoEnabled);
|
||||||
|
|
||||||
if (!videoEnabled) {
|
if (!videoEnabled) {
|
||||||
mHandler.removeCallbacks(mHideControlsRunnable);
|
LinphoneUtils.removeFromUIThreadDispatcher(mHideControlsRunnable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Handler;
|
|
||||||
import android.text.Html;
|
import android.text.Html;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
@ -37,11 +36,11 @@ import org.linphone.core.CallParams;
|
||||||
import org.linphone.core.CallStats;
|
import org.linphone.core.CallStats;
|
||||||
import org.linphone.core.PayloadType;
|
import org.linphone.core.PayloadType;
|
||||||
import org.linphone.core.StreamType;
|
import org.linphone.core.StreamType;
|
||||||
|
import org.linphone.utils.LinphoneUtils;
|
||||||
|
|
||||||
public class CallStatsChildViewHolder {
|
public class CallStatsChildViewHolder {
|
||||||
private Timer mTimer;
|
private Timer mTimer;
|
||||||
private Call mCall;
|
private Call mCall;
|
||||||
private final Handler mHandler = new Handler();
|
|
||||||
private CallListenerStub mListener;
|
private CallListenerStub mListener;
|
||||||
private HashMap<String, String> mEncoderTexts;
|
private HashMap<String, String> mEncoderTexts;
|
||||||
private HashMap<String, String> mDecoderTexts;
|
private HashMap<String, String> mDecoderTexts;
|
||||||
|
@ -170,7 +169,7 @@ public class CallStatsChildViewHolder {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mHandler.post(
|
LinphoneUtils.dispatchOnUIThread(
|
||||||
new Runnable() {
|
new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
|
@ -25,7 +25,6 @@ import android.content.Context;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
|
@ -46,9 +45,9 @@ import org.linphone.core.ProxyConfig;
|
||||||
import org.linphone.core.RegistrationState;
|
import org.linphone.core.RegistrationState;
|
||||||
import org.linphone.core.tools.Log;
|
import org.linphone.core.tools.Log;
|
||||||
import org.linphone.settings.LinphonePreferences;
|
import org.linphone.settings.LinphonePreferences;
|
||||||
|
import org.linphone.utils.LinphoneUtils;
|
||||||
|
|
||||||
public class CallStatusBarFragment extends Fragment {
|
public class CallStatusBarFragment extends Fragment {
|
||||||
private final Handler mRefreshHandler = new Handler();
|
|
||||||
private TextView mStatusText;
|
private TextView mStatusText;
|
||||||
private ImageView mStatusLed, mCallQuality, mEncryption;
|
private ImageView mStatusLed, mCallQuality, mEncryption;
|
||||||
private Runnable mCallQualityUpdater;
|
private Runnable mCallQualityUpdater;
|
||||||
|
@ -191,7 +190,7 @@ public class CallStatusBarFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mCallQualityUpdater != null) {
|
if (mCallQualityUpdater != null) {
|
||||||
mRefreshHandler.removeCallbacks(mCallQualityUpdater);
|
LinphoneUtils.removeFromUIThreadDispatcher(mCallQualityUpdater);
|
||||||
mCallQualityUpdater = null;
|
mCallQualityUpdater = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -245,7 +244,7 @@ public class CallStatusBarFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startCallQuality() {
|
private void startCallQuality() {
|
||||||
mRefreshHandler.postDelayed(
|
LinphoneUtils.dispatchOnUIThreadAfter(
|
||||||
mCallQualityUpdater =
|
mCallQualityUpdater =
|
||||||
new Runnable() {
|
new Runnable() {
|
||||||
final Call mCurrentCall = LinphoneManager.getCore().getCurrentCall();
|
final Call mCurrentCall = LinphoneManager.getCore().getCurrentCall();
|
||||||
|
@ -258,7 +257,7 @@ public class CallStatusBarFragment extends Fragment {
|
||||||
float newQuality = mCurrentCall.getCurrentQuality();
|
float newQuality = mCurrentCall.getCurrentQuality();
|
||||||
updateQualityOfSignalIcon(newQuality);
|
updateQualityOfSignalIcon(newQuality);
|
||||||
|
|
||||||
mRefreshHandler.postDelayed(this, 1000);
|
LinphoneUtils.dispatchOnUIThreadAfter(this, 1000);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
1000);
|
1000);
|
||||||
|
|
|
@ -32,8 +32,6 @@ import android.content.Intent;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.Looper;
|
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
|
@ -102,7 +100,6 @@ public class ChatMessagesFragment extends Fragment
|
||||||
private static final String INPUT_CONTENT_INFO_KEY = "COMMIT_CONTENT_INPUT_CONTENT_INFO";
|
private static final String INPUT_CONTENT_INFO_KEY = "COMMIT_CONTENT_INPUT_CONTENT_INFO";
|
||||||
private static final String COMMIT_CONTENT_FLAGS_KEY = "COMMIT_CONTENT_FLAGS";
|
private static final String COMMIT_CONTENT_FLAGS_KEY = "COMMIT_CONTENT_FLAGS";
|
||||||
|
|
||||||
private final Handler mHandler = new Handler(Looper.getMainLooper());
|
|
||||||
private ImageView mCallButton;
|
private ImageView mCallButton;
|
||||||
private ImageView mBackToCallButton;
|
private ImageView mBackToCallButton;
|
||||||
private ImageView mGroupInfosButton;
|
private ImageView mGroupInfosButton;
|
||||||
|
@ -607,7 +604,7 @@ public class ChatMessagesFragment extends Fragment
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadMoreData(final int totalItemsCount) {
|
private void loadMoreData(final int totalItemsCount) {
|
||||||
mHandler.post(
|
LinphoneUtils.dispatchOnUIThread(
|
||||||
new Runnable() {
|
new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
|
@ -21,7 +21,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Handler;
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
@ -32,6 +31,7 @@ import org.linphone.LinphoneManager;
|
||||||
import org.linphone.core.Player;
|
import org.linphone.core.Player;
|
||||||
import org.linphone.core.PlayerListener;
|
import org.linphone.core.PlayerListener;
|
||||||
import org.linphone.core.tools.Log;
|
import org.linphone.core.tools.Log;
|
||||||
|
import org.linphone.utils.LinphoneUtils;
|
||||||
|
|
||||||
class Recording implements PlayerListener, Comparable<Recording> {
|
class Recording implements PlayerListener, Comparable<Recording> {
|
||||||
public static final Pattern RECORD_PATTERN =
|
public static final Pattern RECORD_PATTERN =
|
||||||
|
@ -42,7 +42,6 @@ class Recording implements PlayerListener, Comparable<Recording> {
|
||||||
private Date mRecordDate;
|
private Date mRecordDate;
|
||||||
private final Player mPlayer;
|
private final Player mPlayer;
|
||||||
private RecordingListener mListener;
|
private RecordingListener mListener;
|
||||||
private final Handler mHandler;
|
|
||||||
private Runnable mUpdateCurrentPositionTimer;
|
private Runnable mUpdateCurrentPositionTimer;
|
||||||
|
|
||||||
@SuppressLint("SimpleDateFormat")
|
@SuppressLint("SimpleDateFormat")
|
||||||
|
@ -60,14 +59,14 @@ class Recording implements PlayerListener, Comparable<Recording> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mHandler = new Handler(context.getMainLooper());
|
|
||||||
mUpdateCurrentPositionTimer =
|
mUpdateCurrentPositionTimer =
|
||||||
new Runnable() {
|
new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (mListener != null)
|
if (mListener != null)
|
||||||
mListener.currentPositionChanged(getCurrentPosition());
|
mListener.currentPositionChanged(getCurrentPosition());
|
||||||
if (isPlaying()) mHandler.postDelayed(mUpdateCurrentPositionTimer, 20);
|
if (isPlaying())
|
||||||
|
LinphoneUtils.dispatchOnUIThreadAfter(mUpdateCurrentPositionTimer, 20);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -97,7 +96,7 @@ class Recording implements PlayerListener, Comparable<Recording> {
|
||||||
}
|
}
|
||||||
|
|
||||||
mPlayer.start();
|
mPlayer.start();
|
||||||
mHandler.post(mUpdateCurrentPositionTimer);
|
LinphoneUtils.dispatchOnUIThread(mUpdateCurrentPositionTimer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isPlaying() {
|
public boolean isPlaying() {
|
||||||
|
|
|
@ -84,9 +84,7 @@ public class ActivityMonitor implements Application.ActivityLifecycleCallbacks {
|
||||||
|
|
||||||
void startInactivityChecker() {
|
void startInactivityChecker() {
|
||||||
if (mLastChecker != null) mLastChecker.cancel();
|
if (mLastChecker != null) mLastChecker.cancel();
|
||||||
LinphoneService.instance()
|
LinphoneUtils.dispatchOnUIThreadAfter((mLastChecker = new InactivityChecker()), 2000);
|
||||||
.handler
|
|
||||||
.postDelayed((mLastChecker = new InactivityChecker()), 2000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void checkActivity() {
|
void checkActivity() {
|
||||||
|
|
|
@ -90,6 +90,14 @@ public final class LinphoneUtils {
|
||||||
sHandler.post(r);
|
sHandler.post(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void dispatchOnUIThreadAfter(Runnable r, long after) {
|
||||||
|
sHandler.postDelayed(r, after);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void removeFromUIThreadDispatcher(Runnable r) {
|
||||||
|
sHandler.removeCallbacks(r);
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean isSipAddress(String numberOrAddress) {
|
private static boolean isSipAddress(String numberOrAddress) {
|
||||||
Factory.instance().createAddress(numberOrAddress);
|
Factory.instance().createAddress(numberOrAddress);
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in a new issue