Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ece840b1 authored by Tony Mantler's avatar Tony Mantler
Browse files

Convert SettingsLib Lifecycle to Flatfoot

Bug: 69257739
Test: m -j RunSettingsLibRoboTests
Change-Id: Iaf14f6f26689a54248bd27cffce0423e857181b9
parent d3fe8f09
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -13,6 +13,10 @@ LOCAL_SHARED_ANDROID_LIBRARIES := \
    android-support-v7-appcompat \
    android-support-v14-preference

LOCAL_SHARED_JAVA_LIBRARIES := \
    apptoolkit-lifecycle-common \
    apptoolkit-lifecycle-runtime

LOCAL_STATIC_JAVA_LIBRARY := legacy-android-test

LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+77 −10
Original line number Diff line number Diff line
@@ -15,11 +15,18 @@
 */
package com.android.settingslib.core.lifecycle;

import static android.arch.lifecycle.Lifecycle.Event.ON_ANY;

import android.annotation.UiThread;
import android.arch.lifecycle.LifecycleOwner;
import android.arch.lifecycle.LifecycleRegistry;
import android.arch.lifecycle.OnLifecycleEvent;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.preference.PreferenceScreen;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -44,18 +51,46 @@ import java.util.List;
/**
 * Dispatcher for lifecycle events.
 */
public class Lifecycle {
public class Lifecycle extends LifecycleRegistry {
    private static final String TAG = "LifecycleObserver";

    private final List<LifecycleObserver> mObservers = new ArrayList<>();
    private final LifecycleProxy mProxy = new LifecycleProxy();

    protected final List<LifecycleObserver> mObservers = new ArrayList<>();
    /**
     * Creates a new LifecycleRegistry for the given provider.
     * <p>
     * You should usually create this inside your LifecycleOwner class's constructor and hold
     * onto the same instance.
     *
     * @param provider The owner LifecycleOwner
     */
    public Lifecycle(@NonNull LifecycleOwner provider) {
        super(provider);
        addObserver(mProxy);
    }

    /**
     * Registers a new observer of lifecycle events.
     */
    @UiThread
    public <T extends LifecycleObserver> T addObserver(T observer) {
    @Override
    public void addObserver(android.arch.lifecycle.LifecycleObserver observer) {
        ThreadUtils.ensureMainThread();
        super.addObserver(observer);
        if (observer instanceof LifecycleObserver) {
            mObservers.add((LifecycleObserver) observer);
        }
    }

    @UiThread
    @Override
    public void removeObserver(android.arch.lifecycle.LifecycleObserver observer) {
        ThreadUtils.ensureMainThread();
        mObservers.add(observer);
        return observer;
        super.removeObserver(observer);
        if (observer instanceof LifecycleObserver) {
            mObservers.remove(observer);
        }
    }

    public void onAttach(Context context) {
@@ -67,6 +102,8 @@ public class Lifecycle {
        }
    }

    // This method is not called from the proxy because it does not have access to the
    // savedInstanceState
    public void onCreate(Bundle savedInstanceState) {
        for (int i = 0, size = mObservers.size(); i < size; i++) {
            final LifecycleObserver observer = mObservers.get(i);
@@ -76,7 +113,7 @@ public class Lifecycle {
        }
    }

    public void onStart() {
    private void onStart() {
        for (int i = 0, size = mObservers.size(); i < size; i++) {
            final LifecycleObserver observer = mObservers.get(i);
            if (observer instanceof OnStart) {
@@ -94,7 +131,7 @@ public class Lifecycle {
        }
    }

    public void onResume() {
    private void onResume() {
        for (int i = 0, size = mObservers.size(); i < size; i++) {
            final LifecycleObserver observer = mObservers.get(i);
            if (observer instanceof OnResume) {
@@ -103,7 +140,7 @@ public class Lifecycle {
        }
    }

    public void onPause() {
    private void onPause() {
        for (int i = 0, size = mObservers.size(); i < size; i++) {
            final LifecycleObserver observer = mObservers.get(i);
            if (observer instanceof OnPause) {
@@ -121,7 +158,7 @@ public class Lifecycle {
        }
    }

    public void onStop() {
    private void onStop() {
        for (int i = 0, size = mObservers.size(); i < size; i++) {
            final LifecycleObserver observer = mObservers.get(i);
            if (observer instanceof OnStop) {
@@ -130,7 +167,7 @@ public class Lifecycle {
        }
    }

    public void onDestroy() {
    private void onDestroy() {
        for (int i = 0, size = mObservers.size(); i < size; i++) {
            final LifecycleObserver observer = mObservers.get(i);
            if (observer instanceof OnDestroy) {
@@ -168,4 +205,34 @@ public class Lifecycle {
        }
        return false;
    }

    private class LifecycleProxy
            implements android.arch.lifecycle.LifecycleObserver {
        @OnLifecycleEvent(ON_ANY)
        public void onLifecycleEvent(LifecycleOwner owner, Event event) {
            switch (event) {
                case ON_CREATE:
                    // onCreate is called directly since we don't have savedInstanceState here
                    break;
                case ON_START:
                    onStart();
                    break;
                case ON_RESUME:
                    onResume();
                    break;
                case ON_PAUSE:
                    onPause();
                    break;
                case ON_STOP:
                    onStop();
                    break;
                case ON_DESTROY:
                    onDestroy();
                    break;
                case ON_ANY:
                    Log.wtf(TAG, "Should not receive an 'ANY' event!");
                    break;
            }
        }
    }
}
+4 −1
Original line number Diff line number Diff line
@@ -17,6 +17,9 @@ package com.android.settingslib.core.lifecycle;

/**
 * Observer of lifecycle events.
 * @deprecated use {@link android.arch.lifecycle.LifecycleObserver} instead
 */
public interface LifecycleObserver {
@Deprecated
public interface LifecycleObserver extends
        android.arch.lifecycle.LifecycleObserver {
}
+20 −8
Original line number Diff line number Diff line
@@ -15,8 +15,16 @@
 */
package com.android.settingslib.core.lifecycle;

import static android.arch.lifecycle.Lifecycle.Event.ON_CREATE;
import static android.arch.lifecycle.Lifecycle.Event.ON_DESTROY;
import static android.arch.lifecycle.Lifecycle.Event.ON_PAUSE;
import static android.arch.lifecycle.Lifecycle.Event.ON_RESUME;
import static android.arch.lifecycle.Lifecycle.Event.ON_START;
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;

import android.annotation.Nullable;
import android.app.Activity;
import android.arch.lifecycle.LifecycleOwner;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.view.Menu;
@@ -25,17 +33,19 @@ import android.view.MenuItem;
/**
 * {@link Activity} that has hooks to observe activity lifecycle events.
 */
public class ObservableActivity extends Activity {
public class ObservableActivity extends Activity implements LifecycleOwner {

    private final Lifecycle mLifecycle = new Lifecycle();
    private final Lifecycle mLifecycle = new Lifecycle(this);

    protected Lifecycle getLifecycle() {
    public Lifecycle getLifecycle() {
        return mLifecycle;
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        mLifecycle.onAttach(this);
        mLifecycle.onCreate(savedInstanceState);
        mLifecycle.handleLifecycleEvent(ON_CREATE);
        super.onCreate(savedInstanceState);
    }

@@ -43,36 +53,38 @@ public class ObservableActivity extends Activity {
    public void onCreate(@Nullable Bundle savedInstanceState,
            @Nullable PersistableBundle persistentState) {
        mLifecycle.onAttach(this);
        mLifecycle.onCreate(savedInstanceState);
        mLifecycle.handleLifecycleEvent(ON_CREATE);
        super.onCreate(savedInstanceState, persistentState);
    }

    @Override
    protected void onStart() {
        mLifecycle.onStart();
        mLifecycle.handleLifecycleEvent(ON_START);
        super.onStart();
    }

    @Override
    protected void onResume() {
        mLifecycle.onResume();
        mLifecycle.handleLifecycleEvent(ON_RESUME);
        super.onResume();
    }

    @Override
    protected void onPause() {
        mLifecycle.onPause();
        mLifecycle.handleLifecycleEvent(ON_PAUSE);
        super.onPause();
    }

    @Override
    protected void onStop() {
        mLifecycle.onStop();
        mLifecycle.handleLifecycleEvent(ON_STOP);
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        mLifecycle.onDestroy();
        mLifecycle.handleLifecycleEvent(ON_DESTROY);
        super.onDestroy();
    }

+26 −12
Original line number Diff line number Diff line
@@ -15,9 +15,17 @@
 */
package com.android.settingslib.core.lifecycle;

import static android.arch.lifecycle.Lifecycle.Event.ON_CREATE;
import static android.arch.lifecycle.Lifecycle.Event.ON_DESTROY;
import static android.arch.lifecycle.Lifecycle.Event.ON_PAUSE;
import static android.arch.lifecycle.Lifecycle.Event.ON_RESUME;
import static android.arch.lifecycle.Lifecycle.Event.ON_START;
import static android.arch.lifecycle.Lifecycle.Event.ON_STOP;

import android.app.DialogFragment;
import android.arch.lifecycle.LifecycleOwner;
import android.content.Context;
import android.support.annotation.VisibleForTesting;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
@@ -25,9 +33,9 @@ import android.view.MenuItem;
/**
 * {@link DialogFragment} that has hooks to observe fragment lifecycle events.
 */
public class ObservableDialogFragment extends DialogFragment {
public class ObservableDialogFragment extends DialogFragment implements LifecycleOwner {

    protected final Lifecycle mLifecycle = createLifecycle();
    protected final Lifecycle mLifecycle = new Lifecycle(this);

    @Override
    public void onAttach(Context context) {
@@ -35,33 +43,40 @@ public class ObservableDialogFragment extends DialogFragment {
        mLifecycle.onAttach(context);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        mLifecycle.onCreate(savedInstanceState);
        mLifecycle.handleLifecycleEvent(ON_CREATE);
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onStart() {
        mLifecycle.onStart();
        mLifecycle.handleLifecycleEvent(ON_START);
        super.onStart();
    }

    @Override
    public void onResume() {
        mLifecycle.onResume();
        mLifecycle.handleLifecycleEvent(ON_RESUME);
        super.onResume();
    }

    @Override
    public void onPause() {
        mLifecycle.onPause();
        mLifecycle.handleLifecycleEvent(ON_PAUSE);
        super.onPause();
    }

    @Override
    public void onStop() {
        mLifecycle.onStop();
        mLifecycle.handleLifecycleEvent(ON_STOP);
        super.onStop();
    }

    @Override
    public void onDestroy() {
        mLifecycle.onDestroy();
        mLifecycle.handleLifecycleEvent(ON_DESTROY);
        super.onDestroy();
    }

@@ -86,9 +101,8 @@ public class ObservableDialogFragment extends DialogFragment {
        return lifecycleHandled;
    }

    @VisibleForTesting(otherwise = VisibleForTesting.NONE)
    /** @return a new lifecycle. */
    public static Lifecycle createLifecycle() {
        return new Lifecycle();
    @Override
    public Lifecycle getLifecycle() {
        return mLifecycle;
    }
}
Loading