VLC for Android 메인 화면 분석

소개



VLC for Android 메인 화면을 분석합니다. 골은 메인 화면에서 등장하는 클래스의 씻어 내기와 관련성의 묵직한 파악.

다양한 링크




GitHub
공식 사이트

MainActivity 스크린샷





메인 화면이 표현하는 클래스


  • MainActivity:활성
  • Navigator:아래의 탭의 처리 부분
  • AudioBrowserFragment : 음악 관계 찾아보기 화면
  • MainBrowserFragment : 파일 기반 탐색 화면
  • PlaylistFragment : 재생 목록 찾아보기 화면
  • MoreFragment : 기타 찾아보기 화면
  • VideoGridFragment : 비디오 관계 탐색 화면

  • MainActivity 레이아웃 구성


    <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/coordinator"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
      // 上のツールバー
        <include
                layout="@layout/toolbar"
                ...
                android:nextFocusForward="@+id/ml_menu_search" />
    
        // フラグメントを入れる所(ビデオ、プレイリスト、アルバム、ブラウズ)
        <androidx.fragment.app.FragmentContainerView
                ...
                tools:targetApi="o" />
    
      // 進捗バー?
        <androidx.appcompat.widget.ViewStubCompat
                ...
                android:layout="@layout/scan_progress" />
    
        <include layout="@layout/audioplayercontainer" />
    
      // シャッフルボタン
        <com.google.android.material.floatingactionbutton.FloatingActionButton
                ...
                app:rippleColor="@color/orange50" />
    
        // 下タブ
        <com.google.android.material.bottomnavigation.BottomNavigationView
                ...
                app:menu="@menu/bottom_navigation" />
    
    
        <androidx.appcompat.widget.ViewStubCompat
                ...
                android:layout_width="match_parent" />
    </androidx.coordinatorlayout.widget.CoordinatorLayout>
    

    MainActivity 해설



    상속 주위



    ↓. 탭 바 관계의 처리는 Navigator 클래스에 위양하고 있다. 그 덕분에 클래스의 행수는 170스텝 정도에 들어가 있는 모양.
    class MainActivity : ContentActivity(),
            ExtensionManagerService.ExtensionManagerActivity,
            INavigator by Navigator()
    {
    

    ContentActivity 주위가 신경이 쓰이므로 조사해 보면 이하의 계승 구조가 되어 있는 모양.



    어째서 이런 계층이 되어 있는지는 신경이 쓰이지만 이번은 할애. AudioPlayerContainerActivity는 재생 주변의 무언가를 공통화하는 것처럼 보이지만.

    인스턴스 변수



    아래의 3개만. 라이브러리 갱신 관계의 제어를 실시하고 있는 모양.
       var refreshing: Boolean = false
            set(value) {
                field = value
            }
        private lateinit var mediaLibrary: Medialibrary
        private var scanNeeded = false
    

    Navigator 정보



    상속 관계와 인스턴스 변수는 ↓. 프래그먼트 주위는 여러가지 엉망으로 하고 있지만 자세한 것은 할애. 설계적으로 MainActivity와 순환 참조하고 있는 것이 신경이 쓰이지만.
    class Navigator : BottomNavigationView.OnNavigationItemSelectedListener, LifecycleObserver, INavigator {
    
        private val defaultFragmentId= R.id.nav_video
        override var currentFragmentId : Int = 0
        private var currentFragment: Fragment? = null
            private set
        private lateinit var activity: MainActivity
        private lateinit var settings: SharedPreferences
        private var extensionsService: ExtensionManagerService? = null
        override lateinit var navigationView: BottomNavigationView
        override lateinit var appbarLayout: AppBarLayout
    
        override lateinit var extensionsManager: ExtensionsManager
        override var extensionServiceConnection: ServiceConnection? = null
        override var extensionManagerService: ExtensionManagerService? = null
        private val isExtensionServiceBinded: Boolean
            get() = extensionServiceConnection != null
    

     정리


  • Navigator 클래스에 성공적으로 위양함으로써 MainActivity의 비대화를 피하고 있습니까?
  • 라고는 해도 Navigator와 MainActivity는 순환 의존하고 있지만.
  • 좋은 웹페이지 즐겨찾기