diff --git a/app/build.gradle b/app/build.gradle index 14b95ec..d6d3cba 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -16,7 +16,7 @@ android { multiDexEnabled true ndk { // add support lib - abiFilters 'armeabi-v7a' //, 'arm64-v8a'//, "mips" //,'armeabi''x86',, 'x86_64', + abiFilters /*"armeabi",*/ "armeabi-v7a", "arm64-v8a", "x86"/*, "x86_64", "mips", "mips64"*/ } lintOptions { @@ -71,6 +71,7 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' implementation 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' @@ -87,11 +88,12 @@ dependencies { implementation 'com.danikula:videocache:2.7.0' implementation 'com.aliyun.sdk.android:AliyunPlayer:4.5.0-full' implementation 'com.alivc.conan:AlivcConan:0.9.5' - implementation 'com.scwang.smart:refresh-layout-kernel:2.0.1' - implementation 'com.scwang.smart:refresh-header-material:2.0.1' - implementation 'com.scwang.smart:refresh-footer-classics:2.0.1' +// implementation 'com.scwang.smart:menu_refresh-layout-kernel:2.0.1' +// implementation 'com.scwang.smart:menu_refresh-header-material:2.0.1' +// implementation 'com.scwang.smart:menu_refresh-footer-classics:2.0.1' implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8' implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.4' debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.3' + implementation 'com.github.SheHuan:NiceImageView:1.0.5' implementation project(path: ':library') } diff --git a/app/src/main/java/com/uiui/videoplayer/activity/MainActivity.java b/app/src/main/java/com/uiui/videoplayer/activity/MainActivity.java index 246acb4..b0a8f31 100644 --- a/app/src/main/java/com/uiui/videoplayer/activity/MainActivity.java +++ b/app/src/main/java/com/uiui/videoplayer/activity/MainActivity.java @@ -1,26 +1,42 @@ package com.uiui.videoplayer.activity; import androidx.annotation.NonNull; +import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.DefaultItemAnimator; import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.SimpleItemAnimator; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; import android.Manifest; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.res.Configuration; +import android.content.res.Resources; +import android.graphics.Color; +import android.graphics.PorterDuff; +import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.Environment; +import android.text.SpannableString; +import android.text.Spanned; +import android.text.style.ForegroundColorSpan; import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.WindowManager; +import android.widget.TextView; import com.uiui.videoplayer.R; import com.uiui.videoplayer.base.RecycleGridLayoutManager; import com.uiui.videoplayer.base.SpacesItemDecoration; import com.uiui.videoplayer.adapter.VideoAdapter; +import com.uiui.videoplayer.utils.ToastUtil; import java.io.File; import java.util.ArrayList; @@ -32,9 +48,12 @@ public class MainActivity extends AppCompatActivity { String[] permissions = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}; private RecyclerView recyclerView; + private TextView tips; + private SwipeRefreshLayout refreshLayout; private VideoAdapter adapter; private RecycleGridLayoutManager mManager; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -68,7 +87,19 @@ public class MainActivity extends AppCompatActivity { } private void initView() { + initActionBar(); + tips = findViewById(R.id.tips); + refreshLayout = findViewById(R.id.swipeRefreshLayout); + refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { + @Override + public void onRefresh() { + ScanTask scanTask = new ScanTask(); + scanTask.execute(); + } + }); + refreshLayout.setRefreshing(true); recyclerView = findViewById(R.id.recyclerView); + ((SimpleItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false); int orientation = getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_LANDSCAPE) { mManager = new RecycleGridLayoutManager(MainActivity.this, 3); @@ -82,6 +113,34 @@ public class MainActivity extends AppCompatActivity { ((DefaultItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false); } + private void initActionBar() { + setToolbarCustomTheme(); + //显示返回按钮 + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setHomeButtonEnabled(true); + actionBar.setDisplayHomeAsUpEnabled(true); + SpannableString spannableString = new SpannableString(getString(R.string.app_name)); + ForegroundColorSpan colorSpan = new ForegroundColorSpan(getResources().getColor(R.color.defaultColor)); + spannableString.setSpan(colorSpan, 0, spannableString.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); + actionBar.setTitle(spannableString); + } + // 系统 6.0 以上 状态栏白底黑字的实现方法 + getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + + //自定义颜色返回按钮 + protected void setToolbarCustomTheme() { + Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_material); + if (upArrow != null) { + upArrow.setColorFilter(ContextCompat.getColor(this, R.color.defaultColor), PorterDuff.Mode.SRC_ATOP); + if (getSupportActionBar() != null) { + getSupportActionBar().setHomeAsUpIndicator(upArrow); + } + } + } + + // private String[] getFolder(String folderPath) { // // } @@ -123,7 +182,7 @@ public class MainActivity extends AppCompatActivity { } private static final String[] extension = new String[]{ - ".3gp", ".avi", ".flv", ".mkv", ".mov", ".mp4", ".webm" + ".3gp", ".avi", ".flv", ".mkv", ".mov", ".mp4", ".webm" }; private static boolean isVideoFormat(String filePath) { @@ -186,9 +245,17 @@ public class MainActivity extends AppCompatActivity { protected void onPostExecute(List strings) { super.onPostExecute(strings); Log.e("ScanTask", "onPostExecute: " + strings); - adapter = new VideoAdapter(MainActivity.this, strings); + if (strings.size() == 0) { + tips.setVisibility(View.VISIBLE); + recyclerView.setVisibility(View.GONE); + } else { + tips.setVisibility(View.GONE); + recyclerView.setVisibility(View.VISIBLE); + adapter = new VideoAdapter(MainActivity.this, strings); // recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this)); - recyclerView.setAdapter(adapter); + recyclerView.setAdapter(adapter); + } + refreshLayout.setRefreshing(false); } } @@ -219,4 +286,42 @@ public class MainActivity extends AppCompatActivity { } } + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.main, menu); + return super.onCreateOptionsMenu(menu); + } + + + /** + * 监听标题栏按钮点击事件. + * + * @param item 按钮 + * @return 结果 + */ + @Override + public boolean onOptionsItemSelected(MenuItem item) { + //返回按钮点击事件 + switch (item.getItemId()) { + case android.R.id.home: + if (System.currentTimeMillis() - mPreClickTime > 1000) { + ToastUtil.show("再按一次,退出"); + mPreClickTime = System.currentTimeMillis(); + } else { + finish(); + } + break; + case R.id.refresh: + refreshLayout.setRefreshing(true); + ScanTask scanTask = new ScanTask(); + scanTask.execute(); + break; + } + + return super.onOptionsItemSelected(item); + } + + private long mPreClickTime; + + } diff --git a/app/src/main/java/com/uiui/videoplayer/adapter/VideoAdapter.java b/app/src/main/java/com/uiui/videoplayer/adapter/VideoAdapter.java index af7a875..dd4e421 100644 --- a/app/src/main/java/com/uiui/videoplayer/adapter/VideoAdapter.java +++ b/app/src/main/java/com/uiui/videoplayer/adapter/VideoAdapter.java @@ -21,6 +21,7 @@ import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.RecyclerView; import com.bumptech.glide.Glide; +import com.shehuan.niv.NiceImageView; import com.uiui.videoplayer.R; import com.uiui.videoplayer.activity.ActivityTikTok; import com.uiui.videoplayer.utils.ToastUtil; @@ -153,6 +154,11 @@ public class VideoAdapter extends RecyclerView.Adapter return name; } + @Override + public int getItemViewType(int position) { + return position; + } + /** * 判断Activity是否Destroy * @@ -168,7 +174,7 @@ public class VideoAdapter extends RecyclerView.Adapter } static class VideoHolder extends RecyclerView.ViewHolder { - ImageView video_image; + NiceImageView video_image; TextView title, duration; ConstraintLayout root; diff --git a/app/src/main/res/drawable-hdpi/menu_back.png b/app/src/main/res/drawable-hdpi/menu_back.png new file mode 100644 index 0000000..b684d57 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_back.png differ diff --git a/app/src/main/res/drawable-hdpi/menu_refresh.png b/app/src/main/res/drawable-hdpi/menu_refresh.png new file mode 100644 index 0000000..5c3fab2 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/menu_refresh.png differ diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 4e82778..3ed8fc4 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -1,16 +1,33 @@ - + android:layout_height="match_parent" + > + + + + + + + - \ No newline at end of file diff --git a/app/src/main/res/layout-port/activity_main.xml b/app/src/main/res/layout-port/activity_main.xml index 4e82778..52d8146 100644 --- a/app/src/main/res/layout-port/activity_main.xml +++ b/app/src/main/res/layout-port/activity_main.xml @@ -1,16 +1,34 @@ - + android:layout_height="match_parent" + android:background="@color/white" + > + + + + + + + - \ No newline at end of file diff --git a/app/src/main/res/layout/item_videofile.xml b/app/src/main/res/layout/item_videofile.xml index 3cf68d7..4d85f5b 100644 --- a/app/src/main/res/layout/item_videofile.xml +++ b/app/src/main/res/layout/item_videofile.xml @@ -6,15 +6,18 @@ android:layout_height="wrap_content" android:gravity="center"> - diff --git a/app/src/main/res/menu/main.xml b/app/src/main/res/menu/main.xml new file mode 100644 index 0000000..743c749 --- /dev/null +++ b/app/src/main/res/menu/main.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 379e3ae..4882ca7 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,5 +5,5 @@ #03DAC5 #FFFFFF #000000 - + #333333 diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 5885930..fb9dd74 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -3,9 +3,11 @@ + +