Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Unverified Commit e0546199 authored by gokul swaminathan's avatar gokul swaminathan Committed by GitHub
Browse files

Merge pull request #105 from Fs00/saved-state

Save activity state the Android way (and ditch AndroidAnnotations)
parents 2974caa2 312c08a1
Loading
Loading
Loading
Loading
+0 −14
Original line number Diff line number Diff line
@@ -40,15 +40,6 @@ android {
        versionCode 27
        versionName "3.6"
        vectorDrawables.useSupportLibrary = true

        javaCompileOptions {
            annotationProcessorOptions {
                includeCompileClasspath = true
                arguments = [
                        "androidManifestFile": "$projectDir/src/main/AndroidManifest.xml".toString()
                ]
            }
        }
    }

    buildFeatures {
@@ -87,11 +78,6 @@ dependencies {
    //Pdf Viewer Library (Proguard config done)
    implementation 'com.github.barteksc:android-pdf-viewer:3.2.0-beta.1'

    //Android Annotations Library (Proguard config not needed)
    //compileOnly
    annotationProcessor 'org.androidannotations:androidannotations:4.6.0'
    implementation 'org.androidannotations:androidannotations-api:4.6.0'

    //License Presenter Library (Proguard config not needed)
    implementation 'com.github.franmontiel:AttributionPresenter:1.0.1'

+4 −4
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
        android:theme="@style/Theme.Cyanea.Light.DarkActionBar">

        <activity
            android:name=".MainActivity_"
            android:name=".MainActivity"
            android:documentLaunchMode="intoExisting">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
@@ -74,7 +74,7 @@
        <activity-alias
            android:name=".LauncherAlias"
            android:enabled="true"
            android:targetActivity=".MainActivity_">
            android:targetActivity=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

@@ -85,7 +85,7 @@
        <activity
            android:name=".AboutActivity"
            android:label="@string/action_about"
            android:parentActivityName=".MainActivity_" />
            android:parentActivityName=".MainActivity" />

        <activity
            android:name=".MainIntroActivity"
@@ -95,7 +95,7 @@
        <activity
            android:name=".SettingsActivity"
            android:label="@string/settings"
            android:parentActivityName=".MainActivity_" />
            android:parentActivityName=".MainActivity" />
    </application>

</manifest>
 No newline at end of file
+52 −27
Original line number Diff line number Diff line
@@ -69,8 +69,6 @@ import com.jaredrummler.cyanea.prefs.CyaneaSettingsActivity;
import com.shockwave.pdfium.PdfDocument;
import com.shockwave.pdfium.PdfPasswordException;

import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.NonConfigurationInstance;
import org.jetbrains.annotations.NotNull;

import java.io.File;
@@ -78,7 +76,6 @@ import java.io.IOException;

import static android.content.pm.PackageManager.PERMISSION_DENIED;

@EActivity
public class MainActivity extends CyaneaAppCompatActivity {

    private static final String TAG = MainActivity.class.getSimpleName();
@@ -86,6 +83,13 @@ public class MainActivity extends CyaneaAppCompatActivity {
    private PrintManager mgr;
    private SharedPreferences prefManager;

    private Uri uri;
    private int pageNumber = 0;
    private String pdfPassword;
    private String pdfFileName = "";

    private byte[] downloadedPdfFileContent;

    private boolean isBottomNavigationHidden = false;

    private ActivityMainBinding viewBinding;
@@ -100,6 +104,14 @@ public class MainActivity extends CyaneaAppCompatActivity {
        this::saveDownloadedFileAfterPermissionRequest
    );

    private final ActivityResultLauncher<Intent> settingsLauncher = registerForActivityResult(
        new StartActivityForResult(),
        result -> {
            if (uri != null)
                displayFromUri(uri);
        }
    );

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
@@ -119,7 +131,11 @@ public class MainActivity extends CyaneaAppCompatActivity {
        onFirstInstall();
        onFirstUpdate();

        if (savedInstanceState != null) {
            restoreInstanceState(savedInstanceState);
        } else {
            readUriFromIntent(getIntent());
        }
        if (uri == null) {
            pickFile();
            setTitle("");
@@ -155,6 +171,20 @@ public class MainActivity extends CyaneaAppCompatActivity {
        }
    }

    @Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        outState.putParcelable("uri", uri);
        outState.putInt("pageNumber", pageNumber);
        outState.putString("pdfPassword", pdfPassword);
        super.onSaveInstanceState(outState);
    }

    private void restoreInstanceState(Bundle savedState) {
        uri = savedState.getParcelable("uri");
        pageNumber = savedState.getInt("pageNumber");
        pdfPassword = savedState.getString("pdfPassword");
    }

    private void readUriFromIntent(Intent intent) {
        Uri intentUri = intent.getData();
        if (intentUri == null) {
@@ -172,27 +202,6 @@ public class MainActivity extends CyaneaAppCompatActivity {
        uri = intentUri;
    }

    @NonConfigurationInstance
    Uri uri;

    @NonConfigurationInstance
    Integer pageNumber = 0;

    @NonConfigurationInstance
    String pdfPassword;

    private String pdfFileName = "";

    private byte[] downloadedPdfFileContent;

    private final ActivityResultLauncher<Intent> settingsLauncher = registerForActivityResult(
            new StartActivityForResult(),
            result -> {
                if (uri != null)
                    displayFromUri(uri);
            }
    );

    void shareFile() {
        startActivity(Utils.emailIntent(pdfFileName, "", getResources().getString(R.string.share), uri));
    }
@@ -328,15 +337,31 @@ public class MainActivity extends CyaneaAppCompatActivity {

        String scheme = uri.getScheme();
        if (scheme != null && scheme.contains("http")) {
            downloadOrShowDownloadedFile(uri);
        } else {
            configurePdfViewAndLoad(viewBinding.pdfView.fromUri(uri));
        }
    }

    private void downloadOrShowDownloadedFile(Uri uri) {
        if (downloadedPdfFileContent == null) {
            downloadedPdfFileContent = (byte[]) getLastCustomNonConfigurationInstance();
        }
        if (downloadedPdfFileContent != null) {
            configurePdfViewAndLoad(viewBinding.pdfView.fromBytes(downloadedPdfFileContent));
        } else {
            // we will get the pdf asynchronously with the DownloadPDFFile object
            viewBinding.progressBar.setVisibility(View.VISIBLE);
            DownloadPDFFile downloadPDFFile = new DownloadPDFFile(this);
            downloadPDFFile.execute(uri.toString());
        } else {
            configurePdfViewAndLoad(viewBinding.pdfView.fromUri(uri));
        }
    }

    @Override
    public Object onRetainCustomNonConfigurationInstance() {
        return downloadedPdfFileContent;
    }

    public void hideProgressBar() {
        viewBinding.progressBar.setVisibility(View.GONE);
    }