com.publicradionative.MainActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.publicradionative.MainActivity.java

Source

/*
 * Copyright (C) 2014 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 com.publicradionative;

import android.content.ComponentName;
import android.media.MediaMetadata;
import android.media.browse.MediaBrowser;
import android.media.session.MediaController;
import android.media.session.PlaybackState;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.KeyEvent;

import com.facebook.react.LifecycleState;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactRootView;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.react.shell.MainReactPackage;
import com.oblador.vectoricons.VectorIconsPackage;
import com.publicradionative.player.BackgroundPlayer;
import com.publicradionative.player.MusicService;

import java.util.List;

/**
 * An Activity to browse and play media.
 */
public class MainActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler {
    // Receive callbacks from the MediaController. Here we update our state such as which queue
    // is being shown, the current title and description and the PlaybackState.
    private final MediaController.Callback mMediaControllerCallback = new MediaController.Callback() {
        @Override
        public void onMetadataChanged(MediaMetadata metadata) {
            updateMetadata(metadata);
        }

        @Override
        public void onPlaybackStateChanged(PlaybackState state) {
            BackgroundPlayer.backgroundPlayer.updatePlaybackState(state);
        }

        @Override
        public void onSessionDestroyed() {
            BackgroundPlayer.backgroundPlayer.updatePlaybackState(null);
        }
    };

    private ReactInstanceManager mReactInstanceManager;
    private ReactRootView mReactRootView;
    private MediaBrowser mMediaBrowser;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mReactRootView = new ReactRootView(this);

        mReactInstanceManager = ReactInstanceManager.builder().setApplication(getApplication())
                .setBundleAssetName("index.android.bundle").setJSMainModuleName("index.android")
                .addPackage(new MainReactPackage()).addPackage(new VectorIconsPackage())
                .addPackage(new ProjectModulesPackage(this)).setUseDeveloperSupport(BuildConfig.DEBUG)
                .setInitialLifecycleState(LifecycleState.RESUMED).build();

        mReactRootView.startReactApplication(mReactInstanceManager, "PublicRadioNative", null);

        setContentView(mReactRootView);
    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_MENU && mReactInstanceManager != null) {
            mReactInstanceManager.showDevOptionsDialog();
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }

    @Override
    public void onBackPressed() {
        if (mReactInstanceManager != null) {
            mReactInstanceManager.onBackPressed();
        } else {
            super.onBackPressed();
        }
    }

    @Override
    public void invokeDefaultOnBackPressed() {
        super.onBackPressed();
    }

    @Override
    protected void onPause() {
        super.onPause();

        if (mReactInstanceManager != null) {
            mReactInstanceManager.onPause();
        }
    }

    @Override
    protected void onResume() {
        super.onResume();

        if (mReactInstanceManager != null) {
            mReactInstanceManager.onResume(this);
        }
    }

    @Override
    public void onStart() {
        super.onStart();

        mMediaBrowser = new MediaBrowser(this, new ComponentName(this, MusicService.class),
                new MediaBrowser.ConnectionCallback() {
                    @Override
                    public void onConnected() {
                        mMediaBrowser.subscribe(mMediaBrowser.getRoot(), new MediaBrowser.SubscriptionCallback() {
                            @Override
                            public void onChildrenLoaded(String parentId, List<MediaBrowser.MediaItem> children) {
                            }
                        });
                        MediaController mediaController = new MediaController(MainActivity.this,
                                mMediaBrowser.getSessionToken());

                        updateMetadata(mediaController.getMetadata());
                        mediaController.registerCallback(mMediaControllerCallback);
                        setMediaController(mediaController);
                    }
                }, null);
        mMediaBrowser.connect();
    }

    @Override
    public void onStop() {
        super.onStop();
        try {
            getMediaController().unregisterCallback(mMediaControllerCallback);
            mMediaBrowser.unsubscribe(mMediaBrowser.getRoot());
        } catch (Exception ex) {
            Log.e("MainActivity", ex.toString());
        } finally {
            mMediaBrowser.disconnect();
        }
    }

    private void updateMetadata(MediaMetadata metadata) {
        if (metadata == null) {
            return;
        }
        //        Log.d("####", metadata.getDescription().getMediaId());
        //        mTitle.setText(metadata == null ? "" : metadata.getDescription().getTitle());
        //        mSubtitle.setText(metadata == null ? "" : metadata.getDescription().getSubtitle());
        //        mAlbumArt.setImageBitmap(metadata == null ? null : MusicLibrary.getAlbumBitmap(this,
        //                metadata.getDescription().getMediaId()));
    }
}