Finished AppIntro
The minSdk bump in the libs come from the try to use lambdas, but JACK does not work with lambdas in libraries yet, but who still uses gingerbread anyway.
This commit is contained in:
parent
43dd39951c
commit
f2a8a24e28
|
@ -27,7 +27,7 @@ android {
|
|||
buildToolsVersion "25.0.2"
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 9
|
||||
minSdkVersion 11
|
||||
targetSdkVersion 25
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
|
|
|
@ -63,13 +63,6 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
|
@ -77,6 +70,13 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
|
||||
package de.arcus.framework.superuser;
|
||||
|
||||
import android.os.AsyncTask;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import de.arcus.framework.logger.Logger;
|
||||
|
@ -130,4 +132,20 @@ public class SuperUser {
|
|||
sessionStop();
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void askForPermissionInBackground(final SuperUserPermissionRequestListener listener) {
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
boolean hasPermissions;
|
||||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
hasPermissions = askForPermissions();
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostExecute(Void result) {
|
||||
listener.superUserGranted(hasPermissions);
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
package de.arcus.framework.superuser;
|
||||
|
||||
/**
|
||||
* Created by jcgruenhage on 1/18/17.
|
||||
*/
|
||||
|
||||
public interface SuperUserPermissionRequestListener {
|
||||
void superUserGranted(boolean granted);
|
||||
}
|
|
@ -32,7 +32,7 @@
|
|||
# Specifies the JVM arguments used for the daemon process.
|
||||
# The setting is particularly useful for tweaking memory settings.
|
||||
# Default value: -Xmx10248m -XX:MaxPermSize=256m
|
||||
# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
||||
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
||||
|
||||
# When configured, Gradle will run in incubating parallel mode.
|
||||
# This option should only be used with decoupled projects. More details, visit
|
||||
|
|
|
@ -62,13 +62,6 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
|
@ -76,6 +69,13 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
|
||||
|
|
|
@ -2,11 +2,15 @@ package re.jcg.playmusicexporter.activities;
|
|||
|
||||
import android.Manifest;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.graphics.Color;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.util.Log;
|
||||
|
||||
|
@ -21,10 +25,10 @@ import re.jcg.playmusicexporter.settings.PlayMusicExporterPreferences;
|
|||
|
||||
public class Intro extends AppIntro {
|
||||
private static final String TAG = "PME_Intro";
|
||||
private static final int PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 1;
|
||||
Fragment welcome;
|
||||
Fragment warning;
|
||||
Fragment storage;
|
||||
Fragment internet;
|
||||
Fragment superuser;
|
||||
Fragment finish;
|
||||
|
||||
|
@ -55,19 +59,6 @@ public class Intro extends AppIntro {
|
|||
"to decrypted with ID3 tags, before we save them to your export path.",
|
||||
R.drawable.ic_folder_white,
|
||||
Color.parseColor("#ef6c00"));
|
||||
|
||||
//Internet Access is granted automatically, asking for it is automatically granted,
|
||||
//which is unacceptable in my opinion, but why should Google care.
|
||||
internet = AppIntroFragment.newInstance(
|
||||
"We might need internet access.",
|
||||
"It happens that we can not find the cover of a song locally. " +
|
||||
"In these cases, we can, if you grant us permission to use the internet, " +
|
||||
"download the cover from online. " +
|
||||
"If you don't grant us permission to use the internet, " +
|
||||
"we can still export songs, but the cover will be " +
|
||||
"missing on some songs.",
|
||||
R.drawable.ic_cloud_download_white,
|
||||
Color.parseColor("#ef6c00"));
|
||||
superuser = AppIntroFragment.newInstance(
|
||||
"We need root access.",
|
||||
"Some of the files we need to access are in the private folders of Play Music. " +
|
||||
|
@ -99,8 +90,6 @@ public class Intro extends AppIntro {
|
|||
addSlide(superuser);
|
||||
addSlide(finish);
|
||||
|
||||
askForPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 3);
|
||||
|
||||
pager.setPagingEnabled(true);
|
||||
}
|
||||
|
||||
|
@ -110,8 +99,54 @@ public class Intro extends AppIntro {
|
|||
logSlideChanged(oldFragment, newFragment);
|
||||
if (warning.equals(oldFragment) && storage.equals(newFragment)) {
|
||||
promptAcceptWarning();
|
||||
} else if (storage.equals(oldFragment) && superuser.equals(newFragment)) {
|
||||
requestStoragePermission();
|
||||
} else if (superuser.equals(oldFragment) && finish.equals(newFragment)) {
|
||||
SuperUser.askForPermissions();
|
||||
SuperUser.askForPermissionInBackground(granted -> {
|
||||
if (!granted) {
|
||||
AlertDialog.Builder builder =
|
||||
new AlertDialog.Builder(this);
|
||||
builder.setTitle(R.string.dialog_superuser_access_denied_title);
|
||||
builder.setMessage(R.string.dialog_superuser_access_denied);
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton(R.string.text_okay, (dialog, which)
|
||||
-> pager.setCurrentItem(pager.getCurrentItem() - 1));
|
||||
builder.show();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void requestStoragePermission() {
|
||||
if (ContextCompat.checkSelfPermission(this,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
|
||||
ActivityCompat.requestPermissions(this,
|
||||
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||
PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
|
||||
switch (requestCode) {
|
||||
case PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: {
|
||||
// If request is cancelled, the result arrays are empty.
|
||||
if (!(grantResults.length > 0
|
||||
&& grantResults[0] == PackageManager.PERMISSION_GRANTED)) {
|
||||
// Shows a warning and close the app
|
||||
AlertDialog.Builder builder =
|
||||
new AlertDialog.Builder(this);
|
||||
builder.setTitle(R.string.dialog_storage_access_denied_title);
|
||||
builder.setMessage(R.string.dialog_storage_access_denied);
|
||||
builder.setCancelable(false);
|
||||
builder.setPositiveButton(R.string.text_okay, (dialog, which)
|
||||
-> pager.setCurrentItem(pager.getCurrentItem() - 1));
|
||||
builder.show();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -50,7 +50,11 @@
|
|||
<string name="notification_export_finished_single_summery">%1$s was exported successfully!</string>
|
||||
|
||||
<string name="dialog_storage_access_denied_title">Storage access denied</string>
|
||||
<string name="dialog_storage_access_denied">The PlayMusicExporter always needs to write to the external storage. This is part of the Marshmallow fix.\n\nPlease restart the app and grant the permission.</string>
|
||||
<string name="dialog_storage_access_denied">The PlayMusicExporter does not work without write access to the external storage. You can not use this app without granting it write access.</string>
|
||||
|
||||
<string name="dialog_superuser_access_denied_title">Superuser access denied</string>
|
||||
<string name="dialog_superuser_access_denied">The PlayMusicExporter does not work without superuser access. You can not use this app without granting it superuser access.</string>
|
||||
|
||||
|
||||
<string name="toast_error_track_not_offline">You can only export offline tracks. Try to download the album offline in Play Music.</string>
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ android {
|
|||
buildToolsVersion "25.0.2"
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 9
|
||||
minSdkVersion 11
|
||||
targetSdkVersion 25
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
|
|
|
@ -63,13 +63,6 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/shaders" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||
|
@ -77,6 +70,13 @@
|
|||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/shaders" isTestSource="true" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/annotations" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
|
||||
|
|
Loading…
Reference in New Issue