A bunch of fixes for old android and storage

This commit is contained in:
artdeell 2023-01-23 20:30:25 +03:00
parent f0c4fef803
commit 530a73e5c7
6 changed files with 90 additions and 22 deletions

View File

@ -29,18 +29,23 @@
android:name="android.max_aspect" android:name="android.max_aspect"
android:value="ratio_float"/> android:value="ratio_float"/>
<activity <activity android:name=".TestStorageActivity"
android:exported="true" android:exported="true"
android:launchMode="singleTop" android:launchMode="singleTop"
android:label="@string/app_short_name" android:label="@string/app_short_name">
android:name=".LauncherActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".ImportControlActivity" <activity
android:label="@string/app_short_name"
android:name=".LauncherActivity">
</activity>
<activity
android:name=".ImportControlActivity"
android:exported="true" android:exported="true"
android:windowSoftInputMode="stateVisible" android:windowSoftInputMode="stateVisible"
android:launchMode="singleInstance" android:launchMode="singleInstance"

View File

@ -36,6 +36,8 @@ public class ProgressLayout extends ConstraintLayout implements View.OnClickList
public static final String DOWNLOAD_VERSION_LIST = "download_verlist"; public static final String DOWNLOAD_VERSION_LIST = "download_verlist";
public static final String AUTHENTICATE_MICROSOFT = "authenticate_microsoft"; public static final String AUTHENTICATE_MICROSOFT = "authenticate_microsoft";
public static final String INSTALL_MODPACK = "install_modpack"; public static final String INSTALL_MODPACK = "install_modpack";
public static final String EXTRACT_COMPONENTS = "extract_components";
public static final String EXTRACT_SINGLE_FILES = "extract_single_files";
public ProgressLayout(@NonNull Context context) { public ProgressLayout(@NonNull Context context) {
super(context); super(context);

View File

@ -191,8 +191,11 @@ public class ImportControlActivity extends Activity {
public String getNameFromURI(Uri uri) { public String getNameFromURI(Uri uri) {
Cursor c = getContentResolver().query(uri, null, null, null, null); Cursor c = getContentResolver().query(uri, null, null, null, null);
if(c == null) return uri.getLastPathSegment(); // idk myself but it happens on asus file manager
c.moveToFirst(); c.moveToFirst();
String fileName = c.getString(c.getColumnIndex(OpenableColumns.DISPLAY_NAME)); int columnIndex = c.getColumnIndex(OpenableColumns.DISPLAY_NAME);
if(columnIndex == -1) return uri.getLastPathSegment();
String fileName = c.getString(columnIndex);
c.close(); c.close();
return trimFileName(fileName); return trimFileName(fileName);
} }

View File

@ -21,7 +21,7 @@ import net.kdt.pojavlaunch.utils.*;
public class PojavApplication extends Application { public class PojavApplication extends Application {
public static String CRASH_REPORT_TAG = "PojavCrashReport"; public static String CRASH_REPORT_TAG = "PojavCrashReport";
public static ExecutorService sExecutorService = new ThreadPoolExecutor(0, 4, 500, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>()); public static ExecutorService sExecutorService = new ThreadPoolExecutor(4, 4, 500, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>());
@Override @Override
public void onCreate() { public void onCreate() {
@ -73,8 +73,6 @@ public class PojavApplication extends Application {
.concat("/x86"); .concat("/x86");
} }
AsyncAssetManager.unpackRuntime(getAssets(), false); AsyncAssetManager.unpackRuntime(getAssets(), false);
AsyncAssetManager.unpackComponents(this);
AsyncAssetManager.unpackSingleFiles(this);
} catch (Throwable throwable) { } catch (Throwable throwable) {
Intent ferrorIntent = new Intent(this, FatalErrorActivity.class); Intent ferrorIntent = new Intent(this, FatalErrorActivity.class);
ferrorIntent.putExtra("throwable", throwable); ferrorIntent.putExtra("throwable", throwable);

View File

@ -0,0 +1,67 @@
package net.kdt.pojavlaunch;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import net.kdt.pojavlaunch.tasks.AsyncAssetManager;
public class TestStorageActivity extends Activity {
private final int REQUEST_STORAGE_REQUEST_CODE = 1;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(Build.VERSION.SDK_INT >= 23 && Build.VERSION.SDK_INT < 29 && !isStorageAllowed(this)) requestStoragePermission();
else exit();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode == REQUEST_STORAGE_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
exit();
} else {
Toast.makeText(this, R.string.toast_permission_denied, Toast.LENGTH_LONG).show();
requestStoragePermission();
}
}
}
public static boolean isStorageAllowed(Context context) {
//Getting the permission status
int result1 = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
int result2 = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE);
//If permission is granted returning true
return result1 == PackageManager.PERMISSION_GRANTED &&
result2 == PackageManager.PERMISSION_GRANTED;
}
private void requestStoragePermission() {
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_STORAGE_REQUEST_CODE);
}
private void exit() {
//Only run them once we get a definitive green light to use storage
AsyncAssetManager.unpackComponents(this);
AsyncAssetManager.unpackSingleFiles(this);
Intent intent = new Intent(this, LauncherActivity.class);
startActivity(intent);
finish();
}
}

View File

@ -4,22 +4,12 @@ package net.kdt.pojavlaunch.tasks;
import static net.kdt.pojavlaunch.Architecture.archAsString; import static net.kdt.pojavlaunch.Architecture.archAsString;
import static net.kdt.pojavlaunch.PojavApplication.sExecutorService; import static net.kdt.pojavlaunch.PojavApplication.sExecutorService;
import android.app.Notification;
import android.app.Service;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.content.res.AssetManager; import android.content.res.AssetManager;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.util.Log; import android.util.Log;
import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import com.kdt.mcgui.ProgressLayout; import com.kdt.mcgui.ProgressLayout;
import net.kdt.pojavlaunch.R;
import net.kdt.pojavlaunch.Tools; import net.kdt.pojavlaunch.Tools;
import net.kdt.pojavlaunch.multirt.MultiRTUtils; import net.kdt.pojavlaunch.multirt.MultiRTUtils;
@ -49,7 +39,8 @@ public class AsyncAssetManager {
} catch (IOException e) { } catch (IOException e) {
Log.e("JREAuto", "JRE was not included on this APK.", e); Log.e("JREAuto", "JRE was not included on this APK.", e);
} }
if(current_rt_version == null && MultiRTUtils.getExactJreName(8) != null) return true; //Assume user maintains his own runtime String exactJREName = MultiRTUtils.getExactJreName(8);
if(current_rt_version == null && exactJREName != null && !exactJREName.equals("Internal")/*this clause is for when the internal runtime is goofed*/) return true; //Assume user maintains his own runtime
if(rt_version == null) return otherRuntimesAvailable; // On noruntime builds, skip if there is at least 1 runtime installed (no matter if it is 8 or not) if(rt_version == null) return otherRuntimesAvailable; // On noruntime builds, skip if there is at least 1 runtime installed (no matter if it is 8 or not)
if(rt_version.equals(current_rt_version)) return true; //If we already have an integrated one installed, check if it's up-to-date if(rt_version.equals(current_rt_version)) return true; //If we already have an integrated one installed, check if it's up-to-date
@ -73,8 +64,8 @@ public class AsyncAssetManager {
/** Unpack single files, with no regard to version tracking */ /** Unpack single files, with no regard to version tracking */
public static void unpackSingleFiles(Context ctx){ public static void unpackSingleFiles(Context ctx){
ProgressLayout.setProgress(ProgressLayout.EXTRACT_SINGLE_FILES, 0);
sExecutorService.execute(() -> { sExecutorService.execute(() -> {
try { try {
Tools.copyAssetFile(ctx, "options.txt", Tools.DIR_GAME_NEW, false); Tools.copyAssetFile(ctx, "options.txt", Tools.DIR_GAME_NEW, false);
Tools.copyAssetFile(ctx, "default.json", Tools.CTRLMAP_PATH, false); Tools.copyAssetFile(ctx, "default.json", Tools.CTRLMAP_PATH, false);
@ -85,11 +76,12 @@ public class AsyncAssetManager {
} catch (IOException e) { } catch (IOException e) {
Log.e("AsyncAssetManager", "Failed to unpack critical components !"); Log.e("AsyncAssetManager", "Failed to unpack critical components !");
} }
ProgressLayout.clearProgress(ProgressLayout.EXTRACT_SINGLE_FILES);
}); });
} }
public static void unpackComponents(Context ctx){ public static void unpackComponents(Context ctx){
ProgressLayout.setProgress(ProgressLayout.EXTRACT_COMPONENTS, 0);
sExecutorService.execute(() -> { sExecutorService.execute(() -> {
try { try {
unpackComponent(ctx, "caciocavallo", false); unpackComponent(ctx, "caciocavallo", false);
@ -101,6 +93,7 @@ public class AsyncAssetManager {
} catch (IOException e) { } catch (IOException e) {
Log.e("AsyncAssetManager", "Failed o unpack components !",e ); Log.e("AsyncAssetManager", "Failed o unpack components !",e );
} }
ProgressLayout.clearProgress(ProgressLayout.EXTRACT_COMPONENTS);
}); });
} }