diff --git a/gallery/src/main/java/cc/winboll/studio/gallery/MainActivity.java b/gallery/src/main/java/cc/winboll/studio/gallery/MainActivity.java index b17acf7..bb1e352 100644 --- a/gallery/src/main/java/cc/winboll/studio/gallery/MainActivity.java +++ b/gallery/src/main/java/cc/winboll/studio/gallery/MainActivity.java @@ -26,11 +26,12 @@ import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; -import com.google.android.material.floatingactionbutton.FloatingActionButton; import cc.winboll.studio.gallery.AlbumAdapter.OnAlbumClickListener; import cc.winboll.studio.gallery.utils.BackgroundUtils; -import cc.winboll.studio.libappbase.LogUtils; import cc.winboll.studio.libappbase.LogActivity; +import cc.winboll.studio.libappbase.LogUtils; +import com.a4455jkjh.colorpicker.ColorPickerDialog; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; @@ -50,64 +51,60 @@ public class MainActivity extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); LogUtils.d(TAG, "onCreate"); - + + View content = findViewById(android.R.id.content); + if (content != null) { + content.setBackground(BackgroundUtils.getInstance().getDrawable()); + } + Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); - + prefs = new Preferences(this); - + recyclerView = findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new GridLayoutManager(this, 2)); adapter = new AlbumAdapter(); adapter.setContext(this); recyclerView.setAdapter(adapter); - + fabScrollTop = findViewById(R.id.fab_scroll_top); fabScrollTop.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - recyclerView.scrollToPosition(0); - } - }); - + @Override + public void onClick(View v) { + recyclerView.scrollToPosition(0); + } + }); + recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { - @Override - public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { - super.onScrolled(recyclerView, dx, dy); - GridLayoutManager layoutManager = (GridLayoutManager) recyclerView.getLayoutManager(); - if (layoutManager != null) { - int firstVisible = layoutManager.findFirstVisibleItemPosition(); - if (firstVisible > 0) { - fabScrollTop.setVisibility(View.VISIBLE); - } else { - fabScrollTop.setVisibility(View.GONE); - } - } - } - }); - + @Override + public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) { + super.onScrolled(recyclerView, dx, dy); + GridLayoutManager layoutManager = (GridLayoutManager) recyclerView.getLayoutManager(); + if (layoutManager != null) { + int firstVisible = layoutManager.findFirstVisibleItemPosition(); + if (firstVisible > 0) { + fabScrollTop.setVisibility(View.VISIBLE); + } else { + fabScrollTop.setVisibility(View.GONE); + } + } + } + }); + adapter.setOnAlbumClickListener(new OnAlbumClickListener() { - @Override - public void onAlbumClick(Album album) { - Intent intent = new Intent(MainActivity.this, AlbumActivity.class); - intent.putExtra(AlbumActivity.EXTRA_ALBUM_PATH, album.getPath()); - intent.putExtra(AlbumActivity.EXTRA_ALBUM_NAME, album.getName()); - startActivity(intent); - } - }); - + @Override + public void onAlbumClick(Album album) { + Intent intent = new Intent(MainActivity.this, AlbumActivity.class); + intent.putExtra(AlbumActivity.EXTRA_ALBUM_PATH, album.getPath()); + intent.putExtra(AlbumActivity.EXTRA_ALBUM_NAME, album.getName()); + startActivity(intent); + } + }); + checkAndRequestPermissions(); } - - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - View content = findViewById(android.R.id.content); - if (content != null) { - content.setBackground(BackgroundUtils.getInstance().getDrawable()); - } - } - + private void checkAndRequestPermissions() { LogUtils.i(TAG, "checkAndRequestPermissions"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { @@ -123,14 +120,14 @@ public class MainActivity extends AppCompatActivity { return; } } - + if (checkPermission()) { loadAlbums(); } else { requestPermission(); } } - + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); @@ -144,7 +141,7 @@ public class MainActivity extends AppCompatActivity { } } } - + private boolean checkPermission() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { return Environment.isExternalStorageManager(); @@ -155,13 +152,13 @@ public class MainActivity extends AppCompatActivity { private void requestPermission() { ActivityCompat.requestPermissions(this, - new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, - PERMISSION_REQUEST_CODE); + new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, + PERMISSION_REQUEST_CODE); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, - @NonNull int[] grantResults) { + @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == PERMISSION_REQUEST_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { @@ -172,12 +169,12 @@ public class MainActivity extends AppCompatActivity { } } -private void loadAlbums() { + private void loadAlbums() { LogUtils.d(TAG, "loadAlbums"); String folderPath = prefs.getFolderPath(); File baseFolder = new File(folderPath); LogUtils.d(TAG, "baseFolder: " + baseFolder.getAbsolutePath() + ", exists=" + baseFolder.exists()); - + if (!baseFolder.exists() || !baseFolder.isDirectory()) { folderPath = Preferences.getDefaultPath(); baseFolder = new File(folderPath); @@ -188,10 +185,10 @@ private void loadAlbums() { LogUtils.d(TAG, "try Pictures: " + baseFolder.getAbsolutePath() + ", exists=" + baseFolder.exists()); } } - + AlbumCoverDbHelper coverDbHelper = AlbumCoverDbHelper.getInstance(this); ArrayList albums = new ArrayList<>(); - + FileFilter directoryFilter = new FileFilter() { @Override public boolean accept(File file) { @@ -234,7 +231,7 @@ private void loadAlbums() { } } } - + if (albums.isEmpty()) { Toast.makeText(this, R.string.no_images_found, Toast.LENGTH_SHORT).show(); LogUtils.i(TAG, "No albums found"); @@ -242,14 +239,14 @@ private void loadAlbums() { adapter.setData(albums); LogUtils.d(TAG, "Loaded " + albums.size() + " albums"); } - + private Uri getUriFromPath(String path) { String[] projection = { MediaStore.Images.Media._ID }; String selection = MediaStore.Images.Media.DATA + " = ?"; String[] selectionArgs = { path }; try (Cursor cursor = getContentResolver().query( - MediaStore.Images.Media.EXTERNAL_CONTENT_URI, - projection, selection, selectionArgs, null)) { + MediaStore.Images.Media.EXTERNAL_CONTENT_URI, + projection, selection, selectionArgs, null)) { if (cursor != null) { if (cursor.moveToFirst()) { long id = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID)); @@ -259,18 +256,18 @@ private void loadAlbums() { } return null; } - + private ArrayList getImagesInFolder(String folderPath) { ArrayList imageUrls = new ArrayList<>(); ContentResolver contentResolver = getContentResolver(); Uri collection = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; - + String selection = MediaStore.Images.Media.DATA + " LIKE ?"; String[] selectionArgs = new String[]{folderPath + "/%"}; String sortOrder = MediaStore.Images.Media.DATE_ADDED + " DESC"; - + LogUtils.d(TAG, "getImagesInFolder: " + folderPath); - + try (Cursor cursor = contentResolver.query(collection, null, selection, selectionArgs, sortOrder)) { if (cursor != null) { LogUtils.d(TAG, "cursor count: " + cursor.getCount()); @@ -306,7 +303,31 @@ private void loadAlbums() { startActivity(intent); return true; } else if (id == R.id.action_change_bg_color) { - Toast.makeText(this, "修改背景颜色", Toast.LENGTH_SHORT).show(); + //Toast.makeText(this, "修改背景颜色", Toast.LENGTH_SHORT).show(); + if (BackgroundUtils.DrawableType.COLOR == BackgroundUtils.getInstance().getDrawableType()) { + + ColorPickerDialog dlg = new ColorPickerDialog(this, BackgroundUtils.getInstance().getColor()); + dlg.setOnColorChangedListener(new com.a4455jkjh.colorpicker.view.OnColorChangedListener() { + + @Override + public void beforeColorChanged() { + } + + @Override + public void onColorChanged(int color) { + BackgroundUtils.getInstance().initFromColor(MainActivity.this, color); + View content = findViewById(android.R.id.content); + if (content != null) { + content.setBackground(BackgroundUtils.getInstance().getDrawable()); + } + } + + @Override + public void afterColorChanged() { + } + }); + dlg.show(); + } return true; } else if (id == R.id.action_settings) { startActivity(new Intent(this, SettingsActivity.class)); @@ -323,7 +344,7 @@ private void loadAlbums() { } return super.onOptionsItemSelected(item); } - + private BroadcastReceiver coverUpdatedReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -332,7 +353,7 @@ private void loadAlbums() { } } }; - + @Override protected void onResume() { super.onResume(); @@ -347,35 +368,35 @@ private void loadAlbums() { adapter.refreshCover(); } } - + @Override protected void onPause() { super.onPause(); unregisterReceiver(coverUpdatedReceiver); } - + private void scanMediaStore() { String folderPath = prefs.getFolderPath(); File baseFolder = new File(folderPath); if (baseFolder.exists() && baseFolder.isDirectory()) { File[] subfolders = baseFolder.listFiles(new FileFilter() { - @Override - public boolean accept(File file) { - return file.isDirectory(); - } - }); + @Override + public boolean accept(File file) { + return file.isDirectory(); + } + }); if (subfolders != null) { ArrayList paths = new ArrayList<>(); for (File subfolder : subfolders) { File[] images = subfolder.listFiles(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - String lower = name.toLowerCase(); - return lower.endsWith(".jpg") || lower.endsWith(".jpeg") - || lower.endsWith(".png") || lower.endsWith(".gif") - || lower.endsWith(".webp") || lower.endsWith(".bmp"); - } - }); + @Override + public boolean accept(File dir, String name) { + String lower = name.toLowerCase(); + return lower.endsWith(".jpg") || lower.endsWith(".jpeg") + || lower.endsWith(".png") || lower.endsWith(".gif") + || lower.endsWith(".webp") || lower.endsWith(".bmp"); + } + }); if (images != null) { for (File img : images) { paths.add(img.getAbsolutePath()); @@ -386,11 +407,11 @@ private void loadAlbums() { LogUtils.d(TAG, "scanning " + paths.size() + " files to MediaStore"); String[] pathArray = paths.toArray(new String[0]); MediaScannerConnection.scanFile(this, pathArray, null, new MediaScannerConnection.OnScanCompletedListener() { - @Override - public void onScanCompleted(String path, Uri uri) { - LogUtils.d(TAG, "scanCompleted: " + path + " -> " + uri); - } - }); + @Override + public void onScanCompleted(String path, Uri uri) { + LogUtils.d(TAG, "scanCompleted: " + path + " -> " + uri); + } + }); } } }