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

Commit a6c97e46 authored by Christofer Åkersten's avatar Christofer Åkersten
Browse files

Move View related methods to helper class

Test: Instantiate MediaControlView2
Change-Id: Ia958a97b38e67f236ee510978c379af9249d2887
parent a64df69b
Loading
Loading
Loading
Loading
+8 −88
Original line number Diff line number Diff line
@@ -22,13 +22,13 @@ import android.annotation.Nullable;
import android.content.Context;
import android.media.session.MediaController;
import android.media.update.ApiLoader;
import android.media.update.FrameLayoutHelper;
import android.media.update.MediaControlView2Provider;
import android.media.update.ViewProvider;
import android.util.AttributeSet;
import android.view.MotionEvent;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * A View that contains the controls for MediaPlayer2.
 * It provides a wide range of UI including buttons such as "Play/Pause", "Rewind", "Fast Forward",
@@ -61,7 +61,7 @@ import java.lang.annotation.RetentionPolicy;
 * TODO PUBLIC API
 * @hide
 */
public class MediaControlView2 extends FrameLayout {
public class MediaControlView2 extends FrameLayoutHelper<MediaControlView2Provider> {
    /** @hide */
    @IntDef({
            BUTTON_PLAY_PAUSE,
@@ -140,8 +140,6 @@ public class MediaControlView2 extends FrameLayout {
     */
    public static final String COMMAND_SET_FULLSCREEN = "setFullscreen";

    private final MediaControlView2Provider mProvider;

    public MediaControlView2(@NonNull Context context) {
        this(context, null);
    }
@@ -157,17 +155,10 @@ public class MediaControlView2 extends FrameLayout {

    public MediaControlView2(@NonNull Context context, @Nullable AttributeSet attrs,
            int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);

        mProvider = ApiLoader.getProvider(context)
                .createMediaControlView2(this, new SuperProvider());
    }

    /**
     * @hide
     */
    public MediaControlView2Provider getProvider() {
        return mProvider;
        super((instance, superProvider) ->
                ApiLoader.getProvider(context).createMediaControlView2(
                        (MediaControlView2) instance, superProvider),
                context, attrs, defStyleAttr, defStyleRes);
    }

    /**
@@ -232,80 +223,9 @@ public class MediaControlView2 extends FrameLayout {
    }

    @Override
    // TODO Move this method to ViewProvider
    public void onVisibilityAggregated(boolean isVisible) {

        mProvider.onVisibilityAggregated_impl(isVisible);
    }

    @Override
    protected void onAttachedToWindow() {
        mProvider.onAttachedToWindow_impl();
    }

    @Override
    protected void onDetachedFromWindow() {
        mProvider.onDetachedFromWindow_impl();
    }

    @Override
    public CharSequence getAccessibilityClassName() {
        return mProvider.getAccessibilityClassName_impl();
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return mProvider.onTouchEvent_impl(ev);
    }

    @Override
    public boolean onTrackballEvent(MotionEvent ev) {
        return mProvider.onTrackballEvent_impl(ev);
    }

    @Override
    public void onFinishInflate() {
        mProvider.onFinishInflate_impl();
    }

    @Override
    public void setEnabled(boolean enabled) {
        mProvider.setEnabled_impl(enabled);
    }

    private class SuperProvider implements ViewProvider {
        @Override
        public void onAttachedToWindow_impl() {
            MediaControlView2.super.onAttachedToWindow();
        }

        @Override
        public void onDetachedFromWindow_impl() {
            MediaControlView2.super.onDetachedFromWindow();
        }

        @Override
        public CharSequence getAccessibilityClassName_impl() {
            return MediaControlView2.super.getAccessibilityClassName();
        }

        @Override
        public boolean onTouchEvent_impl(MotionEvent ev) {
            return MediaControlView2.super.onTouchEvent(ev);
        }

        @Override
        public boolean onTrackballEvent_impl(MotionEvent ev) {
            return MediaControlView2.super.onTrackballEvent(ev);
        }

        @Override
        public void onFinishInflate_impl() {
            MediaControlView2.super.onFinishInflate();
        }

        @Override
        public void setEnabled_impl(boolean enabled) {
            MediaControlView2.super.setEnabled(enabled);
        }
    }
}
+6 −88
Original line number Diff line number Diff line
@@ -27,12 +27,11 @@ import android.media.session.MediaController;
import android.media.session.MediaSession;
import android.media.session.PlaybackState;
import android.media.update.ApiLoader;
import android.media.update.FrameLayoutHelper;
import android.media.update.VideoView2Provider;
import android.media.update.ViewProvider;
import android.net.Uri;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import java.lang.annotation.Retention;
@@ -102,7 +101,7 @@ import java.util.concurrent.Executor;
 *
 * @hide
 */
public class VideoView2 extends FrameLayout {
public class VideoView2 extends FrameLayoutHelper<VideoView2Provider> {
    /** @hide */
    @IntDef({
            VIEW_TYPE_TEXTUREVIEW,
@@ -125,8 +124,6 @@ public class VideoView2 extends FrameLayout {
     */
    public static final int VIEW_TYPE_TEXTUREVIEW = 2;

    private final VideoView2Provider mProvider;

    public VideoView2(@NonNull Context context) {
        this(context, null);
    }
@@ -142,17 +139,10 @@ public class VideoView2 extends FrameLayout {
    public VideoView2(
            @NonNull Context context, @Nullable AttributeSet attrs,
            int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);

        mProvider = ApiLoader.getProvider(context).createVideoView2(this, new SuperProvider(),
                attrs, defStyleAttr, defStyleRes);
    }

    /**
     * @hide
     */
    public VideoView2Provider getProvider() {
        return mProvider;
        super((instance, superProvider) ->
                ApiLoader.getProvider(context).createVideoView2(
                        (VideoView2) instance, superProvider, attrs, defStyleAttr, defStyleRes),
                context, attrs, defStyleAttr, defStyleRes);
    }

    /**
@@ -497,76 +487,4 @@ public class VideoView2 extends FrameLayout {
         */
        void onCustomAction(String action, Bundle extras);
    }

    @Override
    protected void onAttachedToWindow() {
        mProvider.onAttachedToWindow_impl();
    }

    @Override
    protected void onDetachedFromWindow() {
        mProvider.onDetachedFromWindow_impl();
    }

    @Override
    public CharSequence getAccessibilityClassName() {
        return mProvider.getAccessibilityClassName_impl();
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return mProvider.onTouchEvent_impl(ev);
    }

    @Override
    public boolean onTrackballEvent(MotionEvent ev) {
        return mProvider.onTrackballEvent_impl(ev);
    }

    @Override
    public void onFinishInflate() {
        mProvider.onFinishInflate_impl();
    }

    @Override
    public void setEnabled(boolean enabled) {
        mProvider.setEnabled_impl(enabled);
    }

    private class SuperProvider implements ViewProvider {
        @Override
        public void onAttachedToWindow_impl() {
            VideoView2.super.onAttachedToWindow();
        }

        @Override
        public void onDetachedFromWindow_impl() {
            VideoView2.super.onDetachedFromWindow();
        }

        @Override
        public CharSequence getAccessibilityClassName_impl() {
            return VideoView2.super.getAccessibilityClassName();
        }

        @Override
        public boolean onTouchEvent_impl(MotionEvent ev) {
            return VideoView2.super.onTouchEvent(ev);
        }

        @Override
        public boolean onTrackballEvent_impl(MotionEvent ev) {
            return VideoView2.super.onTrackballEvent(ev);
        }

        @Override
        public void onFinishInflate_impl() {
            VideoView2.super.onFinishInflate();
        }

        @Override
        public void setEnabled_impl(boolean enabled) {
            VideoView2.super.setEnabled(enabled);
        }
    }
}
+128 −0
Original line number Diff line number Diff line
/*
 * Copyright 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.media.update;

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.FrameLayout;

/**
 * Helper class for connecting the public API to an updatable implementation.
 *
 * @see ViewProvider
 *
 * @hide
 */
public abstract class FrameLayoutHelper<T extends ViewProvider> extends FrameLayout {
    /** @hide */
    final public T mProvider;

    /** @hide */
    public FrameLayoutHelper(ProviderCreator<T> creator,
            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);

        mProvider = creator.createProvider(this, new SuperProvider());
    }

    /** @hide */
    // TODO @SystemApi
    public T getProvider() {
        return mProvider;
    }

    @Override
    public CharSequence getAccessibilityClassName() {
        return mProvider.getAccessibilityClassName_impl();
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return mProvider.onTouchEvent_impl(ev);
    }

    @Override
    public boolean onTrackballEvent(MotionEvent ev) {
        return mProvider.onTrackballEvent_impl(ev);
    }

    @Override
    public void onFinishInflate() {
        mProvider.onFinishInflate_impl();
    }

    @Override
    public void setEnabled(boolean enabled) {
        mProvider.setEnabled_impl(enabled);
    }

    @Override
    protected void onAttachedToWindow() {
        mProvider.onAttachedToWindow_impl();
    }

    @Override
    protected void onDetachedFromWindow() {
        mProvider.onDetachedFromWindow_impl();
    }

    /** @hide */
    public class SuperProvider implements ViewProvider {
        @Override
        public CharSequence getAccessibilityClassName_impl() {
            return FrameLayoutHelper.super.getAccessibilityClassName();
        }

        @Override
        public boolean onTouchEvent_impl(MotionEvent ev) {
            return FrameLayoutHelper.super.onTouchEvent(ev);
        }

        @Override
        public boolean onTrackballEvent_impl(MotionEvent ev) {
            return FrameLayoutHelper.super.onTrackballEvent(ev);
        }

        @Override
        public void onFinishInflate_impl() {
            FrameLayoutHelper.super.onFinishInflate();
        }

        @Override
        public void setEnabled_impl(boolean enabled) {
            FrameLayoutHelper.super.setEnabled(enabled);
        }

        @Override
        public void onAttachedToWindow_impl() {
            FrameLayoutHelper.super.onAttachedToWindow();
        }

        @Override
        public void onDetachedFromWindow_impl() {
            FrameLayoutHelper.super.onDetachedFromWindow();
        }
    }

    /** @hide */
    @FunctionalInterface
    public interface ProviderCreator<U extends ViewProvider> {
        U createProvider(FrameLayoutHelper<U> instance, ViewProvider superProvider);
    }
}