291 lines
9.1 KiB
Java
291 lines
9.1 KiB
Java
/*
|
|
* 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 com.android.pump.activity;
|
|
|
|
import android.Manifest;
|
|
import android.content.pm.PackageManager;
|
|
import android.os.Bundle;
|
|
import android.view.Menu;
|
|
import android.view.MenuItem;
|
|
import android.view.View;
|
|
|
|
import androidx.annotation.IdRes;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.UiThread;
|
|
import androidx.appcompat.app.ActionBar;
|
|
import androidx.appcompat.app.AppCompatActivity;
|
|
import androidx.core.content.ContextCompat;
|
|
import androidx.core.view.GravityCompat;
|
|
import androidx.drawerlayout.widget.DrawerLayout;
|
|
import androidx.fragment.app.Fragment;
|
|
import androidx.fragment.app.FragmentManager;
|
|
import androidx.fragment.app.FragmentPagerAdapter;
|
|
import androidx.viewpager.widget.ViewPager;
|
|
|
|
import com.android.pump.R;
|
|
import com.android.pump.fragment.AlbumFragment;
|
|
import com.android.pump.fragment.ArtistFragment;
|
|
import com.android.pump.fragment.AudioFragment;
|
|
import com.android.pump.fragment.GenreFragment;
|
|
import com.android.pump.fragment.HomeFragment;
|
|
import com.android.pump.fragment.MovieFragment;
|
|
import com.android.pump.fragment.OtherFragment;
|
|
import com.android.pump.fragment.PermissionFragment;
|
|
import com.android.pump.fragment.PlaylistFragment;
|
|
import com.android.pump.fragment.SeriesFragment;
|
|
import com.android.pump.util.Globals;
|
|
import com.google.android.material.bottomnavigation.BottomNavigationView;
|
|
import com.google.android.material.bottomnavigation.BottomNavigationView.OnNavigationItemSelectedListener;
|
|
import com.google.android.material.tabs.TabLayout;
|
|
|
|
@UiThread
|
|
public class PumpActivity extends AppCompatActivity implements OnNavigationItemSelectedListener {
|
|
// TODO The following should be a non-static member
|
|
private static boolean sIsMissingPermissions = true;
|
|
|
|
private static final Pages[] PAGES_LIST = {
|
|
new Pages(R.id.menu_home, new Page[] {
|
|
new Page(HomeFragment::newInstance, "Home")
|
|
}),
|
|
new Pages(R.id.menu_video, new Page[] {
|
|
new Page(MovieFragment::newInstance, "Movies"),
|
|
new Page(SeriesFragment::newInstance, "TV Shows"),
|
|
new Page(OtherFragment::newInstance, "Personal"),
|
|
new Page(HomeFragment::newInstance, "All videos")
|
|
}),
|
|
new Pages(R.id.menu_audio, new Page[] {
|
|
new Page(AudioFragment::newInstance, "All audios"),
|
|
new Page(PlaylistFragment::newInstance, "Playlists"),
|
|
new Page(AlbumFragment::newInstance, "Albums"),
|
|
new Page(GenreFragment::newInstance, "Genres"),
|
|
new Page(ArtistFragment::newInstance, "Artists")
|
|
}),
|
|
new Pages(R.id.menu_favorite, new Page[] {
|
|
new Page(HomeFragment::newInstance, "Videos"),
|
|
new Page(HomeFragment::newInstance, "Audios")
|
|
})
|
|
};
|
|
|
|
private boolean mInitialized = false;
|
|
|
|
private ActivityPagerAdapter mActivityPagerAdapter;
|
|
|
|
private DrawerLayout mDrawerLayout;
|
|
private ViewPager mViewPager;
|
|
private TabLayout mTabLayout;
|
|
private BottomNavigationView mBottomNavigationView;
|
|
|
|
@Override
|
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
// NOTE: If you are facing StrictMode violation by setContentView please disable instant run
|
|
setContentView(R.layout.activity_pump);
|
|
|
|
setSupportActionBar(findViewById(R.id.activity_pump_toolbar));
|
|
|
|
mActivityPagerAdapter = new ActivityPagerAdapter(getSupportFragmentManager());
|
|
|
|
mDrawerLayout = findViewById(R.id.activity_pump_drawer_layout);
|
|
mViewPager = findViewById(R.id.activity_pump_view_pager);
|
|
mTabLayout = findViewById(R.id.activity_pump_tab_layout);
|
|
mBottomNavigationView = findViewById(R.id.activity_pump_bottom_navigation_view);
|
|
|
|
mBottomNavigationView.setOnNavigationItemSelectedListener(this);
|
|
mBottomNavigationView.setSelectedItemId(R.id.menu_home);
|
|
mViewPager.setAdapter(mActivityPagerAdapter);
|
|
mTabLayout.setupWithViewPager(mViewPager);
|
|
}
|
|
|
|
@Override
|
|
public void onResume() {
|
|
super.onResume();
|
|
|
|
initialize();
|
|
}
|
|
|
|
@Override
|
|
public boolean onCreateOptionsMenu(@NonNull Menu menu) {
|
|
getMenuInflater().inflate(R.menu.activity_pump, menu);
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
|
|
if (item.getItemId() == android.R.id.home) {
|
|
mDrawerLayout.openDrawer(GravityCompat.START);
|
|
return true;
|
|
}
|
|
return super.onOptionsItemSelected(item);
|
|
}
|
|
|
|
@Override
|
|
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
|
|
for (Pages pages : PAGES_LIST) {
|
|
if (pages.getId() == item.getItemId()) {
|
|
selectPages(item.getTitle(), pages);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// TODO This should not be public
|
|
public void initialize() {
|
|
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
|
|
== PackageManager.PERMISSION_GRANTED) {
|
|
if (!mInitialized) {
|
|
mInitialized = true;
|
|
|
|
sIsMissingPermissions = false;
|
|
mActivityPagerAdapter.notifyDataSetChanged();
|
|
|
|
Globals.getMediaDb(this).load();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void selectPages(@NonNull CharSequence title, @NonNull Pages pages) {
|
|
ActionBar actionBar = getSupportActionBar();
|
|
if (actionBar != null) {
|
|
actionBar.setTitle(title);
|
|
}
|
|
|
|
Pages current = mActivityPagerAdapter.getPages();
|
|
if (current != null) {
|
|
current.setCurrent(mViewPager.getCurrentItem());
|
|
}
|
|
|
|
mActivityPagerAdapter.setPages(pages);
|
|
int count = mActivityPagerAdapter.getCount();
|
|
mTabLayout.setVisibility(count <= 1 ? View.GONE : View.VISIBLE);
|
|
mTabLayout.setTabMode(count <= 4 ? TabLayout.MODE_FIXED : TabLayout.MODE_SCROLLABLE);
|
|
mViewPager.setCurrentItem(pages.getCurrent());
|
|
}
|
|
|
|
private static class ActivityPagerAdapter extends FragmentPagerAdapter {
|
|
private Pages mPages;
|
|
|
|
ActivityPagerAdapter(@NonNull FragmentManager fm) {
|
|
super(fm);
|
|
}
|
|
|
|
void setPages(@NonNull Pages pages) {
|
|
mPages = pages;
|
|
notifyDataSetChanged();
|
|
}
|
|
|
|
@Nullable Pages getPages() {
|
|
return mPages;
|
|
}
|
|
|
|
@Override
|
|
public int getCount() {
|
|
return mPages.getPages().length;
|
|
}
|
|
|
|
@Override
|
|
public @NonNull Fragment getItem(int position) {
|
|
return mPages.getPages()[position].createFragment();
|
|
}
|
|
|
|
@Override
|
|
public long getItemId(int position) {
|
|
return mPages.getPages()[position].getId();
|
|
}
|
|
|
|
@Override
|
|
public int getItemPosition(@NonNull Object object) {
|
|
return POSITION_NONE;
|
|
}
|
|
|
|
@Override
|
|
public @NonNull CharSequence getPageTitle(int position) {
|
|
return mPages.getPages()[position].getTitle();
|
|
}
|
|
}
|
|
|
|
private static class Page {
|
|
private static int sId = 0;
|
|
|
|
private final int mId;
|
|
private final PageCreator mPageCreator;
|
|
private final String mTitle;
|
|
|
|
Page(@NonNull PageCreator pageCreator, @NonNull String title) {
|
|
mId = sId++;
|
|
mPageCreator = pageCreator;
|
|
mTitle = title;
|
|
}
|
|
|
|
int getId() {
|
|
if (isMissingPermissions()) {
|
|
return ~mId;
|
|
}
|
|
return mId;
|
|
}
|
|
|
|
@NonNull Fragment createFragment() {
|
|
if (isMissingPermissions()) {
|
|
return PermissionFragment.newInstance();
|
|
}
|
|
return mPageCreator.newInstance();
|
|
}
|
|
|
|
@NonNull String getTitle() {
|
|
return mTitle;
|
|
}
|
|
|
|
private boolean isMissingPermissions() {
|
|
return sIsMissingPermissions;
|
|
}
|
|
}
|
|
|
|
private static class Pages {
|
|
private final int mId;
|
|
private final Page[] mPages;
|
|
|
|
private int mCurrent;
|
|
|
|
Pages(@IdRes int id, @NonNull Page[] pages) {
|
|
mId = id;
|
|
mPages = pages;
|
|
}
|
|
|
|
int getId() {
|
|
return mId;
|
|
}
|
|
|
|
@NonNull Page[] getPages() {
|
|
return mPages;
|
|
}
|
|
|
|
void setCurrent(int current) {
|
|
mCurrent = current;
|
|
}
|
|
|
|
int getCurrent() {
|
|
return mCurrent;
|
|
}
|
|
}
|
|
|
|
@FunctionalInterface
|
|
private interface PageCreator {
|
|
@NonNull Fragment newInstance();
|
|
}
|
|
}
|