diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 82165bbbb..666613f3c 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -26,11 +26,12 @@ - + - - + + diff --git a/app/src/main/java/com/hippo/beerbelly/DiskLruCache.java b/app/src/main/java/com/hippo/beerbelly/DiskLruCache.java index 8d1baec07..1d722273c 100644 --- a/app/src/main/java/com/hippo/beerbelly/DiskLruCache.java +++ b/app/src/main/java/com/hippo/beerbelly/DiskLruCache.java @@ -167,6 +167,7 @@ public final class DiskLruCache implements Closeable { * its sequence number is not equal to its entry's sequence number. */ private long nextSequenceNumber = 0; + private DiskLruCache(File directory, int appVersion, int valueCount, long maxSize) { this.directory = directory; this.appVersion = appVersion; @@ -175,21 +176,7 @@ public final class DiskLruCache implements Closeable { this.journalFileBackup = new File(directory, JOURNAL_FILE_BACKUP); this.valueCount = valueCount; this.maxSize = maxSize; - } private final Callable cleanupCallable = new Callable<>() { - public Void call() throws Exception { - synchronized (DiskLruCache.this) { - if (journalWriter == null) { - return null; // Closed. - } - trimToSize(); - if (journalRebuildRequired()) { - rebuildJournal(); - redundantOpCount = 0; - } - } - return null; - } - }; + } /** * Opens the cache in {@code directory}, creating a cache if none exists @@ -244,7 +231,21 @@ public final class DiskLruCache implements Closeable { cache = new DiskLruCache(directory, appVersion, valueCount, maxSize); cache.rebuildJournal(); return cache; - } + } private final Callable cleanupCallable = new Callable<>() { + public Void call() throws Exception { + synchronized (DiskLruCache.this) { + if (journalWriter == null) { + return null; // Closed. + } + trimToSize(); + if (journalRebuildRequired()) { + rebuildJournal(); + redundantOpCount = 0; + } + } + return null; + } + }; private static void deleteIfExists(File file) throws IOException { if (file.exists() && !file.delete()) { diff --git a/app/src/main/java/com/hippo/ehviewer/ImageBitmapHelper.java b/app/src/main/java/com/hippo/ehviewer/ImageBitmapHelper.java index 9c658b78b..2f837f9ea 100644 --- a/app/src/main/java/com/hippo/ehviewer/ImageBitmapHelper.java +++ b/app/src/main/java/com/hippo/ehviewer/ImageBitmapHelper.java @@ -16,8 +16,6 @@ package com.hippo.ehviewer; -import android.os.ParcelFileDescriptor; - import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -27,7 +25,6 @@ import com.hippo.streampipe.InputStreamPipe; import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; public class ImageBitmapHelper implements ValueHelper { diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/ArchiveGalleryProvider.java b/app/src/main/java/com/hippo/ehviewer/gallery/ArchiveGalleryProvider.java index 996512ca9..e0e4785f5 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/ArchiveGalleryProvider.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/ArchiveGalleryProvider.java @@ -34,10 +34,6 @@ import com.hippo.unifile.UniFile; import com.hippo.yorozuya.thread.PVLock; import com.hippo.yorozuya.thread.PriorityThread; -import java.io.FileDescriptor; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; diff --git a/app/src/main/java/com/hippo/ehviewer/gallery/DirGalleryProvider.java b/app/src/main/java/com/hippo/ehviewer/gallery/DirGalleryProvider.java index 416aa024b..ae5ae2efb 100644 --- a/app/src/main/java/com/hippo/ehviewer/gallery/DirGalleryProvider.java +++ b/app/src/main/java/com/hippo/ehviewer/gallery/DirGalleryProvider.java @@ -259,7 +259,7 @@ public class DirGalleryProvider extends GalleryProvider2 implements Runnable { InputStream is = null; try { is = files[index].openInputStream(); - Image image = Image.decode(((FileInputStream)is).getFD(), true); + Image image = Image.decode(((FileInputStream) is).getFD(), true); mDecodingIndex.lazySet(GalleryPageView.INVALID_INDEX); if (image != null) { notifyPageSucceed(index, image); diff --git a/app/src/main/java/com/hippo/ehviewer/preference/VersionPreference.kt b/app/src/main/java/com/hippo/ehviewer/preference/VersionPreference.kt index f2b0aeed3..b4ba0de6b 100644 --- a/app/src/main/java/com/hippo/ehviewer/preference/VersionPreference.kt +++ b/app/src/main/java/com/hippo/ehviewer/preference/VersionPreference.kt @@ -50,7 +50,7 @@ class VersionPreference @JvmOverloads constructor( inner class NativeLibInfo { private var message: String = "" - fun addLib(libname:String, libversion:String): NativeLibInfo { + fun addLib(libname: String, libversion: String): NativeLibInfo { message = "$message$libname $libversion\n" return this } diff --git a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java index e9a701d41..d3e0d8984 100644 --- a/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java +++ b/app/src/main/java/com/hippo/ehviewer/spider/SpiderQueen.java @@ -1678,7 +1678,7 @@ public final class SpiderQueen implements Runnable { if (is != null) { try { - image = Image.decode(((FileInputStream)is).getFD(), true); + image = Image.decode(((FileInputStream) is).getFD(), true); } catch (IOException e) { e.printStackTrace(); image = null; diff --git a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java index 6c41abd9b..cb0d15f38 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/GalleryActivity.java @@ -226,6 +226,9 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan private int mSize; private int mCurrentIndex; private int mSavingPage = -1; + private EditTextDialogBuilder builder; + private boolean dialogShown = false; + private AlertDialog dialog; private void buildProvider() { if (mGalleryProvider != null) { @@ -287,7 +290,16 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan } outState.putInt(KEY_PAGE, mPage); outState.putInt(KEY_CURRENT_INDEX, mCurrentIndex); - } + } ActivityResultLauncher requestStoragePermissionLauncher = registerForActivityResult( + new ActivityResultContracts.RequestPermission(), + result -> { + if (result && mSavingPage != -1) { + saveImage(mSavingPage); + } else { + Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show(); + } + mSavingPage = -1; + }); @Override protected void attachBaseContext(@NonNull Context newBase) { @@ -477,16 +489,7 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan FrameLayout mainLayout = (FrameLayout) ViewUtils.$$(this, R.id.main); mainLayout.addView(new GalleryGuideView(this)); } - } ActivityResultLauncher requestStoragePermissionLauncher = registerForActivityResult( - new ActivityResultContracts.RequestPermission(), - result -> { - if (result && mSavingPage != -1) { - saveImage(mSavingPage); - } else { - Toast.makeText(this, R.string.error_cant_save_image, Toast.LENGTH_SHORT).show(); - } - mSavingPage = -1; - }); + } @Override protected void onDestroy() { @@ -1046,6 +1049,66 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan } } + private void showPasswdDialog() { + if (!dialogShown) { + dialogShown = true; + dialog.show(); + if (dialog.getButton(AlertDialog.BUTTON_POSITIVE) != null) { + dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> { + GalleryActivity.this.onProvidePasswd(); + }); + } + dialog.setOnCancelListener(v -> finish()); + } + } + + private void onProvidePasswd() { + String passwd = builder.getText(); + if (passwd.isEmpty()) + builder.setError(getString(R.string.passwd_cannot_be_empty)); + else { + ArchiveGalleryProvider.passwd = passwd; + ArchiveGalleryProvider.pv.v(); + } + } + + private void onPasswdWrong() { + builder.setError(getString(R.string.passwd_wrong)); + } + + private void onPasswdCorrect() { + dialog.dismiss(); + } + + private static class ShowPasswdDialogHandler extends Handler { + + //弱引用持有HandlerActivity , GC 回收时会被回收掉 + private final WeakReference weakReference; + + public ShowPasswdDialogHandler(GalleryActivity activity) { + this.weakReference = new WeakReference(activity); + } + + @Override + public void handleMessage(Message msg) { + GalleryActivity activity = weakReference.get(); + super.handleMessage(msg); + if (null != activity) { + switch (msg.what) { + case 0: + activity.showPasswdDialog(); + break; + case 1: + activity.onPasswdWrong(); + break; + case 2: + activity.onPasswdCorrect(); + break; + } + } + } + } + private class GalleryMenuHelper implements DialogInterface.OnClickListener { private final View mView; @@ -1306,69 +1369,5 @@ public class GalleryActivity extends EhActivity implements SeekBar.OnSeekBarChan } } - private EditTextDialogBuilder builder; - private boolean dialogShown = false; - - private AlertDialog dialog; - - private void showPasswdDialog() { - if (!dialogShown) { - dialogShown = true; - dialog.show(); - if (dialog.getButton(AlertDialog.BUTTON_POSITIVE) != null) { - dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(v -> { - GalleryActivity.this.onProvidePasswd(); - }); - } - dialog.setOnCancelListener(v -> finish()); - } - } - - private void onProvidePasswd() { - String passwd = builder.getText(); - if (passwd.isEmpty()) - builder.setError(getString(R.string.passwd_cannot_be_empty)); - else { - ArchiveGalleryProvider.passwd = passwd; - ArchiveGalleryProvider.pv.v(); - } - } - - private void onPasswdWrong() { - builder.setError(getString(R.string.passwd_wrong)); - } - - private void onPasswdCorrect() { - dialog.dismiss(); - } - - private static class ShowPasswdDialogHandler extends Handler { - - //弱引用持有HandlerActivity , GC 回收时会被回收掉 - private final WeakReference weakReference; - - public ShowPasswdDialogHandler(GalleryActivity activity) { - this.weakReference = new WeakReference(activity); - } - - @Override - public void handleMessage(Message msg) { - GalleryActivity activity = weakReference.get(); - super.handleMessage(msg); - if (null != activity) { - switch (msg.what) { - case 0: - activity.showPasswdDialog(); - break; - case 1: - activity.onPasswdWrong(); - break; - case 2: - activity.onPasswdCorrect(); - break; - } - } - } - } } diff --git a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java index 627bb38ff..e69e8910b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java +++ b/app/src/main/java/com/hippo/ehviewer/ui/fragment/AdvancedFragment.java @@ -22,7 +22,6 @@ import android.content.res.Resources; import android.net.Uri; import android.os.Build; import android.os.Bundle; -import android.provider.Settings; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; diff --git a/app/src/main/java/com/hippo/unifile/DocumentsContractApi21.java b/app/src/main/java/com/hippo/unifile/DocumentsContractApi21.java index 0a351fe45..a0c805183 100644 --- a/app/src/main/java/com/hippo/unifile/DocumentsContractApi21.java +++ b/app/src/main/java/com/hippo/unifile/DocumentsContractApi21.java @@ -33,6 +33,7 @@ final class DocumentsContractApi21 { private static final String TAG = DocumentsContractApi21.class.getSimpleName(); private static final String PATH_DOCUMENT = "document"; private static final String PATH_TREE = "tree"; + private DocumentsContractApi21() { } diff --git a/app/src/main/java/com/hippo/unifile/FileDescriptorRandomAccessFile.java b/app/src/main/java/com/hippo/unifile/FileDescriptorRandomAccessFile.java index 12f983a6d..7c0e218ab 100644 --- a/app/src/main/java/com/hippo/unifile/FileDescriptorRandomAccessFile.java +++ b/app/src/main/java/com/hippo/unifile/FileDescriptorRandomAccessFile.java @@ -41,6 +41,7 @@ class FileDescriptorRandomAccessFile implements UniRandomAccessFile { private final int flushAfterWrite; private final Object closeLock = new Object(); private volatile boolean closed = false; + private FileDescriptorRandomAccessFile(ParcelFileDescriptor pfd, FileDescriptor fd, String mode) { this.pfd = pfd; this.fd = fd; diff --git a/app/src/main/java/com/hippo/widget/BatteryView.java b/app/src/main/java/com/hippo/widget/BatteryView.java index e379f41ae..bd06395a3 100644 --- a/app/src/main/java/com/hippo/widget/BatteryView.java +++ b/app/src/main/java/com/hippo/widget/BatteryView.java @@ -82,6 +82,13 @@ public class BatteryView extends AppCompatTextView { } mCurrentColor = color; super.setTextColor(color); + } + + private void startCharger() { + if (!mIsChargerWorking) { + getHandler().post(mCharger); + mIsChargerWorking = true; + } } private final Runnable mCharger = new Runnable() { private int level = 0; @@ -97,13 +104,6 @@ public class BatteryView extends AppCompatTextView { } }; - private void startCharger() { - if (!mIsChargerWorking) { - getHandler().post(mCharger); - mIsChargerWorking = true; - } - } - private void stopCharger() { if (mIsChargerWorking) { getHandler().removeCallbacks(mCharger); @@ -145,6 +145,7 @@ public class BatteryView extends AppCompatTextView { + private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { @Override diff --git a/app/src/main/java/com/hippo/widget/TextClock.java b/app/src/main/java/com/hippo/widget/TextClock.java index 806734695..02c152b58 100644 --- a/app/src/main/java/com/hippo/widget/TextClock.java +++ b/app/src/main/java/com/hippo/widget/TextClock.java @@ -97,6 +97,10 @@ public class TextClock extends AppCompatTextView { } else { mTime = Calendar.getInstance(); } + } + + public CharSequence getFormat12Hour() { + return mFormat12; } private final Runnable mTicker = new Runnable() { @Override public void run() { @@ -109,10 +113,6 @@ public class TextClock extends AppCompatTextView { } }; - public CharSequence getFormat12Hour() { - return mFormat12; - } - public void setFormat12Hour(CharSequence format) { mFormat12 = format; @@ -144,19 +144,7 @@ public class TextClock extends AppCompatTextView { createTime(timeZone); onTimeChanged(); - } private final ContentObserver mFormatChangeObserver = new ContentObserver(new Handler()) { - @Override - public void onChange(boolean selfChange) { - chooseFormat(); - onTimeChanged(); - } - - @Override - public void onChange(boolean selfChange, Uri uri) { - chooseFormat(); - onTimeChanged(); - } - }; + } /** * Selects either one of {@link #getFormat12Hour()} or {@link #getFormat24Hour()} @@ -170,7 +158,19 @@ public class TextClock extends AppCompatTextView { public CharSequence getFormat() { return mFormat; - } + } private final ContentObserver mFormatChangeObserver = new ContentObserver(new Handler()) { + @Override + public void onChange(boolean selfChange) { + chooseFormat(); + onTimeChanged(); + } + + @Override + public void onChange(boolean selfChange, Uri uri) { + chooseFormat(); + onTimeChanged(); + } + }; /** * Selects either one of {@link #getFormat12Hour()} or {@link #getFormat24Hour()} diff --git a/app/src/main/res/layout-television/gallery_detail_actions.xml b/app/src/main/res/layout-television/gallery_detail_actions.xml index f106b70ea..92a897b73 100644 --- a/app/src/main/res/layout-television/gallery_detail_actions.xml +++ b/app/src/main/res/layout-television/gallery_detail_actions.xml @@ -84,10 +84,10 @@ @@ -244,11 +244,11 @@ android:layout_height="wrap_content" android:layout_weight="1" android:clickable="true" - android:nextFocusDown="@+id/torrent" android:focusable="true" android:insetLeft="40dp" android:insetTop="16dp" - android:insetRight="40dp" /> + android:insetRight="40dp" + android:nextFocusDown="@+id/torrent" />