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

Commit 8f1dd826 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Convert SettingsLib Lifecycle to Flatfoot"

parents 32866527 ece840b1
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