mirror of
https://github.com/vanitasvitae/Smack.git
synced 2025-09-09 17:19:39 +02:00
Initial commit
This commit is contained in:
parent
9d626bf787
commit
0d90e6535e
16 changed files with 551 additions and 0 deletions
7
smack-messenger-android/build.gradle
Normal file
7
smack-messenger-android/build.gradle
Normal file
|
@ -0,0 +1,7 @@
|
|||
dependencies {
|
||||
implementation project(":smack-messenger")
|
||||
implementation project(":smack-android-extensions")
|
||||
|
||||
// Add the Android jar to the Eclipse .classpath.
|
||||
compileOnly files(androidBootClasspath)
|
||||
}
|
|
@ -0,0 +1,71 @@
|
|||
package org.jivesoftware.smacks.messenger.android;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import org.jivesoftware.smacks.messenger.android.csi.util.AbstractActivityLifecycleCallbacks;
|
||||
import org.jivesoftware.smackx.messenger.csi.ClientStateListener;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
|
||||
/**
|
||||
* Android Utility class that observes the current state of the application.
|
||||
* If the application currently displays at least one active Activity, then registered
|
||||
* {@link ClientStateListener ClientStateListeners} will be notified via {@link ClientStateListener#onClientInForeground()}.
|
||||
* If the application goes into the background, {@link ClientStateListener#onClientInBackground()} will be fired.
|
||||
*
|
||||
* Setup: During application startup, call {@link android.app.Application#registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks)}
|
||||
* and pass an instance of {@link AndroidCsiManager} as argument.
|
||||
*
|
||||
* Remember to also register a {@link ClientStateListener} implementation (eg. the Messenger class from smack-messenger).
|
||||
*/
|
||||
public final class AndroidCsiManager extends AbstractActivityLifecycleCallbacks {
|
||||
|
||||
private static AndroidCsiManager INSTANCE;
|
||||
|
||||
private AtomicInteger activityReferences = new AtomicInteger(0);
|
||||
private AtomicBoolean isActivityChangingConfiguration = new AtomicBoolean(false);
|
||||
|
||||
private final List<ClientStateListener> listeners = new ArrayList<>();
|
||||
|
||||
private AndroidCsiManager() {
|
||||
|
||||
}
|
||||
|
||||
public AndroidCsiManager getInstance() {
|
||||
if (INSTANCE == null) {
|
||||
INSTANCE = new AndroidCsiManager();
|
||||
}
|
||||
return INSTANCE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityStarted(Activity activity) {
|
||||
if (activityReferences.incrementAndGet() == 1 && !isActivityChangingConfiguration.get()) {
|
||||
for (ClientStateListener listener : listeners) {
|
||||
listener.onClientInForeground();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityStopped(Activity activity) {
|
||||
isActivityChangingConfiguration.set(activity.isChangingConfigurations());
|
||||
if (activityReferences.decrementAndGet() == 0 && !isActivityChangingConfiguration.get()) {
|
||||
for (ClientStateListener listener : listeners) {
|
||||
listener.onClientInBackground();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addClientStateListener(ClientStateListener listener) {
|
||||
this.listeners.add(listener);
|
||||
}
|
||||
|
||||
public void removeClientStateListener(ClientStateListener listener) {
|
||||
this.listeners.remove(listener);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
package org.jivesoftware.smacks.messenger.android.csi.util;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.os.Bundle;
|
||||
|
||||
/**
|
||||
* Abstract class providing empty implementations of {@link Application.ActivityLifecycleCallbacks}.
|
||||
*/
|
||||
public abstract class AbstractActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks {
|
||||
@Override
|
||||
public void onActivityCreated(Activity activity, Bundle bundle) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityStarted(Activity activity) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityResumed(Activity activity) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityPaused(Activity activity) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityStopped(Activity activity) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onActivityDestroyed(Activity activity) {
|
||||
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue