diff --git a/app/build.gradle b/app/build.gradle index bc03733f..a87a01f4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,13 +12,13 @@ android { delete fileTree('src/main') { include '**/AndroidManifest.xml' } - ant.move(file: 'src/main/AndroidManifest_original.xml', tofile:'src/main/AndroidManifest.xml') + ant.move(file: 'src/main/AndroidManifest_original.xml', tofile: 'src/main/AndroidManifest.xml') } } - compileSdkVersion 31 - buildToolsVersion "31.0.0" + compileSdkVersion 32 + buildToolsVersion "32.1.0-rc1" splits { abi { enable true @@ -46,7 +46,7 @@ android { defaultConfig { applicationId "com.cylonid.nativealpha" minSdkVersion 26 - targetSdkVersion 31 + targetSdkVersion 32 versionCode 1200 versionName "1.2.0" @@ -113,19 +113,20 @@ repositories { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'com.mikhaellopez:circularprogressbar:3.0.3' - implementation 'org.jsoup:jsoup:1.14.1' + implementation 'com.mikhaellopez:circularprogressbar:3.1.0' + implementation 'org.jsoup:jsoup:1.14.3' implementation 'org.adblockplus:adblock-android-webview:5.0.0' implementation 'com.github.ihimanshurawat:Hasher:1.2' + implementation "com.google.android.material:material:1.5.0" implementation 'androidx.navigation:navigation-fragment:2.4.1' implementation 'androidx.navigation:navigation-ui:2.4.1' - implementation 'com.google.code.gson:gson:2.8.7' + implementation 'com.google.code.gson:gson:2.9.0' implementation 'io.github.medyo:android-about-page:2.0.0' implementation 'androidx.webkit:webkit:1.4.0' implementation 'com.jakewharton:process-phoenix:2.1.2' testImplementation 'junit:junit:4.13.2' testImplementation 'org.robolectric:robolectric:4.3.1' - testImplementation 'org.json:json:20210307' + testImplementation 'org.json:json:20220320' androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.4.0' androidTestImplementation 'androidx.test.espresso:espresso-web:3.4.0' androidTestImplementation 'androidx.test:rules:1.4.0' @@ -133,16 +134,16 @@ dependencies { androidTestUtil 'androidx.test:orchestrator:1.4.1' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' - implementation "com.mikepenz:aboutlibraries:10.0.0" - implementation "com.mikepenz:aboutlibraries-core:10.0.0" + implementation 'com.mikepenz:aboutlibraries:10.1.0' + implementation 'com.mikepenz:aboutlibraries-core:10.1.0' implementation 'pub.devrel:easypermissions:3.0.0' } int NUM_OF_CONTAINERS = 8 String placeholder = "" -0.upto(NUM_OF_CONTAINERS-1) { int i -> - def trTask = tasks.register( "createWebViewclass${i}", Copy ) { +0.upto(NUM_OF_CONTAINERS - 1) { int i -> + def trTask = tasks.register("createWebViewclass${i}", Copy) { from 'src/main/java/com/cylonid/nativealpha/WebViewActivity.java' into 'src/main/java/com/cylonid/nativealpha' filter { @@ -156,12 +157,12 @@ String placeholder = "" } def renameManifest = tasks.register("renameManifest") { - ant.move(file: 'src/main/AndroidManifest.xml', tofile:'src/main/AndroidManifest_original.xml') + ant.move(file: 'src/main/AndroidManifest.xml', tofile: 'src/main/AndroidManifest_original.xml') } preBuild.dependsOn renameManifest -def generateWebViewActivities = tasks.register( "extendAndroidManifest", Copy ) { +def generateWebViewActivities = tasks.register("extendAndroidManifest", Copy) { from 'src/main/AndroidManifest_original.xml' into 'src/main' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b8f877eb..b54a0e38 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -47,7 +47,103 @@ android:documentLaunchMode="intoExisting" /> - + + + + + + + + + buildAddWebsiteDialog(getString(R.string.add_webapp))); - } @Override @@ -74,9 +73,9 @@ protected void onNewIntent(Intent intent) { private void buildImportSuccessDialog() { - final AlertDialog.Builder builder = new AlertDialog.Builder(this); + final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(this); - String message = getString(R.string.import_success_dialog_txt2) + "\n\n" + getString(R.string.import_success_dialog_txt3); + String message = getString(R.string.import_success_dialog_txt2) + "\n\n" + getString(R.string.import_success_dialog_txt3); builder.setMessage(message); builder.setCancelable(false); @@ -89,7 +88,7 @@ private void buildImportSuccessDialog() { WebApp webapp = webapps.get(i); boolean last_webapp = i == webapps.size() - 1; Spanned msg = Html.fromHtml(getString(R.string.restore_shortcut, webapp.getTitle()), Html.FROM_HTML_MODE_COMPACT); - final AlertDialog addition_dialog = new AlertDialog.Builder(this) + final AlertDialog addition_dialog = new MaterialAlertDialogBuilder(this) .setMessage(msg) .setPositiveButton(android.R.string.yes, (dialog1, which) -> { ShortcutDialogFragment frag = ShortcutDialogFragment.newInstance(webapp); @@ -104,7 +103,8 @@ private void buildImportSuccessDialog() { } }); - builder.setNegativeButton(getString(android.R.string.no), (dialog, id) -> { }); + builder.setNegativeButton(getString(android.R.string.no), (dialog, id) -> { + }); builder.create().show(); } @@ -157,6 +157,7 @@ private ImageButton generateImageButton(String name, int resourceID, int webappI return btn; } + private void addRow(final WebApp webapp) { int row_height = (int) getResources().getDimension(R.dimen.line_height); int transparent_color = ResourcesCompat.getColor(getResources(), R.color.transparent, null); @@ -182,7 +183,6 @@ private void addRow(final WebApp webapp) { intent.putExtra(Const.INTENT_WEBAPPID, webapp.getID()); intent.setAction(Intent.ACTION_VIEW); startActivity(intent); - }); ImageButton btn_delete = generateImageButton("btnDelete", R.drawable.ic_delete_black_24dp, webapp.getID(), ll_row); @@ -196,9 +196,9 @@ private void addRow(final WebApp webapp) { private void buildAddWebsiteDialog(String title) { final View inflated_view = getLayoutInflater().inflate(R.layout.add_website_dialogue, null); final EditText url = (EditText) inflated_view.findViewById(R.id.websiteUrl); - final Switch create_shortcut = (Switch) inflated_view.findViewById(R.id.switchCreateShortcut); + final SwitchMaterial create_shortcut = (SwitchMaterial) inflated_view.findViewById(R.id.switchCreateShortcut); - final AlertDialog dialog = new AlertDialog.Builder(MainActivity.this) + final AlertDialog dialog = new MaterialAlertDialogBuilder(MainActivity.this) .setView(inflated_view) .setTitle(title) .setPositiveButton(android.R.string.ok, null) //Set to null. We override the onclick @@ -232,7 +232,7 @@ private void buildAddWebsiteDialog(String title) { private void buildDeleteItemDialog(final int ID) { - AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(MainActivity.this); builder.setMessage(getString(R.string.delete_question)); builder.setPositiveButton(getString(android.R.string.yes), (dialog, id) -> { WebApp webapp = DataManager.getInstance().getWebApp(ID); diff --git a/app/src/main/java/com/cylonid/nativealpha/ShortcutDialogFragment.java b/app/src/main/java/com/cylonid/nativealpha/ShortcutDialogFragment.java index 557a7f74..1795c6bf 100644 --- a/app/src/main/java/com/cylonid/nativealpha/ShortcutDialogFragment.java +++ b/app/src/main/java/com/cylonid/nativealpha/ShortcutDialogFragment.java @@ -1,5 +1,8 @@ package com.cylonid.nativealpha; +import static androidx.appcompat.app.AppCompatActivity.RESULT_OK; +import static com.cylonid.nativealpha.util.Const.CODE_OPEN_FILE; + import android.app.Dialog; import android.content.Intent; import android.graphics.Bitmap; @@ -28,6 +31,7 @@ import com.cylonid.nativealpha.model.WebApp; import com.cylonid.nativealpha.util.Const; import com.cylonid.nativealpha.util.Utility; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.snackbar.Snackbar; import com.mikhaellopez.circularprogressbar.CircularProgressBar; @@ -48,11 +52,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import static androidx.appcompat.app.AppCompatActivity.RESULT_OK; -import static com.cylonid.nativealpha.util.Const.CODE_OPEN_FILE; - -public class ShortcutDialogFragment extends DialogFragment { +public class ShortcutDialogFragment extends DialogFragment { private WebApp webapp; private String base_url; @@ -62,7 +63,8 @@ public class ShortcutDialogFragment extends DialogFragment { private EditText uiTitle; private Thread faviconFetcherThread; - public ShortcutDialogFragment() {} + public ShortcutDialogFragment() { + } public static ShortcutDialogFragment newInstance(WebApp webapp) { ShortcutDialogFragment frag = new ShortcutDialogFragment(); @@ -93,8 +95,7 @@ public void onActivityResult(int requestCode, int resultCode, @Nullable Intent d if (bitmap != null) applyNewBitmapToDialog(); - } - catch(IOException e) { + } catch (IOException e) { Toast toast = Toast.makeText(getActivity(), getString(R.string.icon_not_found), Toast.LENGTH_SHORT); toast.setGravity(Gravity.TOP, 0, 100); toast.show(); @@ -109,7 +110,7 @@ public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { final View view = getLayoutInflater().inflate(R.layout.shortcut_dialog, null); - final AlertDialog dialog = new AlertDialog.Builder(getActivity()) + final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getActivity()) .setView(view) .setCancelable(false) .setPositiveButton(android.R.string.ok, (dialog1, which) -> { @@ -117,10 +118,11 @@ public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { dismiss(); }) - .setNegativeButton(android.R.string.cancel, (dialog1, which) -> { + .setNegativeButton(android.R.string.cancel, (dialog1, which) -> { dismiss(); - }) - .create(); + }); + + final AlertDialog dialog = builder.create(); uiTitle = (EditText) view.findViewById(R.id.websiteTitle); uiFavicon = (ImageView) view.findViewById(R.id.favicon); @@ -148,11 +150,11 @@ public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { return dialog; } - private Bitmap loadBitmap(String strUrl) { + private Bitmap loadBitmap(String strUrl) { Bitmap bitmap; try { URL url = new URL(strUrl); - HttpURLConnection con = (HttpURLConnection)url.openConnection(); + HttpURLConnection con = (HttpURLConnection) url.openConnection(); InputStream is = con.getInputStream(); bitmap = BitmapFactory.decodeStream(is); if (bitmap == null || bitmap.getWidth() < Const.FAVICON_MIN_WIDTH) @@ -164,6 +166,7 @@ private Bitmap loadBitmap(String strUrl) { } return bitmap; } + private TreeMap buildIconMap() { TreeMap found_icons = new TreeMap<>(); String host_part = base_url.replace("http://", "").replace("https://", "").replace("www.", ""); @@ -220,7 +223,7 @@ private TreeMap buildIconMap() { } public String[] fetchWebappData() { - String[] result = new String[] {null, null, null}; + String[] result = new String[]{null, null, null}; TreeMap found_icons = buildIconMap(); try { @@ -320,7 +323,7 @@ private void startFaviconFetching() { faviconFetcherThread = new Thread(() -> { String[] webappdata = fetchWebappData(); bitmap = loadBitmap(webappdata[Const.RESULT_IDX_FAVICON]); - requireActivity().runOnUiThread(()-> { + requireActivity().runOnUiThread(() -> { applyNewBitmapToDialog(); setShortcutTitle(webappdata[Const.RESULT_IDX_TITLE]); @@ -332,7 +335,9 @@ private void startFaviconFetching() { new CountDownTimer(5000, 5000) { @Override - public void onTick(long millisUntilFinished) { } + public void onTick(long millisUntilFinished) { + } + public void onFinish() { faviconFetcherThread.interrupt(); } @@ -378,6 +383,7 @@ private void prepareFailedUI() { uiProgressBar.setVisibility(View.GONE); uiFavicon.setVisibility(View.VISIBLE); } + private void showFailedMessage() { Toast toast = Toast.makeText(getActivity(), getString(R.string.icon_fetch_failed_line1, webapp.getTitle()) + getString(R.string.icon_fetch_failed_line2) + getString(R.string.icon_fetch_failed_line3), Toast.LENGTH_LONG); toast.setGravity(Gravity.TOP, 0, 100); @@ -390,8 +396,7 @@ private void setShortcutTitle(String shortcut_title) { if (!shortcut_title.equals("")) uiTitle.setText(shortcut_title); - } - else { + } else { uiTitle.setText(webapp.getTitle()); } uiTitle.requestFocus(); diff --git a/app/src/main/java/com/cylonid/nativealpha/WebViewActivity.java b/app/src/main/java/com/cylonid/nativealpha/WebViewActivity.java index 5309fc07..b8688dec 100644 --- a/app/src/main/java/com/cylonid/nativealpha/WebViewActivity.java +++ b/app/src/main/java/com/cylonid/nativealpha/WebViewActivity.java @@ -1,5 +1,7 @@ package com.cylonid.nativealpha; +import static com.cylonid.nativealpha.util.Const.CODE_OPEN_FILE; + import android.Manifest; import android.annotation.SuppressLint; import android.app.Application; @@ -14,7 +16,6 @@ import android.os.Bundle; import android.os.Environment; import android.os.Handler; -import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.WindowInsets; @@ -48,6 +49,7 @@ import com.cylonid.nativealpha.model.WebApp; import com.cylonid.nativealpha.util.Const; import com.cylonid.nativealpha.util.Utility; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.snackbar.Snackbar; import com.jakewharton.processphoenix.ProcessPhoenix; @@ -61,7 +63,7 @@ import java.util.Map; import pub.devrel.easypermissions.EasyPermissions; -import static com.cylonid.nativealpha.util.Const.CODE_OPEN_FILE; +import timber.log.Timber; public class WebViewActivity extends AppCompatActivity implements EasyPermissions.PermissionCallbacks { @@ -106,11 +108,11 @@ protected void onCreate(Bundle savedInstanceState) { String packageName = this.getPackageName(); // Sandboxed Web App is openend in main process using an old shortcut - if(packageName.equals(processName) && webapp.isUseContainer()) { + if (packageName.equals(processName) && webapp.isUseContainer()) { ProcessPhoenix.triggerRebirth(this, Utility.createWebViewIntent(webapp, this)); } - if (!packageName.equals(processName) & SandboxManager.getInstance() != null) { + if (!packageName.equals(processName) & SandboxManager.getInstance() != null) { if (SandboxManager.getInstance().isSandboxUsedByAnotherApp(webapp)) { SandboxManager.getInstance().unregisterWebAppFromSandbox(webapp.getContainerId()); ProcessPhoenix.triggerRebirth(this, Utility.createWebViewIntent(webapp, this)); @@ -127,7 +129,7 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.full_webview); getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); - if(webapp.isKeepAwake()) { + if (webapp.isKeepAwake()) { getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } @@ -368,7 +370,7 @@ protected void onPause() { } if (reload_handler != null) { reload_handler.removeCallbacksAndMessages(null); - Log.d("CLEANUP", "Stopped reload handler"); + Timber.d("Stopped reload handler"); } } @@ -377,7 +379,7 @@ private void reload() { currently_reloading = true; wv.reload(); reload(); - }, webapp.getTimeAutoreload() * 1000); + }, webapp.getTimeAutoreload() * 1000L); } public WebView getWebView() { @@ -395,7 +397,7 @@ private Map initCustomHeaders(boolean save_data) { private void loadURL(final WebView view, final String url) { final WebApp webApp = DataManager.getInstance().getWebApp(webappID); if (url.contains("http://") && !webApp.isAllowHttp()) { - final AlertDialog.Builder builder = new AlertDialog.Builder(WebViewActivity.this); + final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(WebViewActivity.this); builder.setTitle(getString(R.string.no_https_dialog_title)); builder.setMessage(getString(R.string.no_https_dialog_msg)); @@ -411,16 +413,16 @@ private void loadURL(final WebView view, final String url) { view.loadUrl(url, CUSTOM_HEADERS); } + private void hideSystemBars() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { getWindow().setDecorFitsSystemWindows(false); WindowInsetsController controller = getWindow().getInsetsController(); - if(controller != null) { + if (controller != null) { controller.hide(WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars()); controller.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE); } - } - else { + } else { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION @@ -438,6 +440,7 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis // Forward results to EasyPermissions EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this); } + @FunctionalInterface interface PermissionGrantedCallback { public void execute(); @@ -524,7 +527,7 @@ private void handlePermissionRequest(String resId, return; } - new AlertDialog.Builder(WebViewActivity.this).setTitle(getPermissionRequestStringResource("dialog_permission_", resId, "_title")) + new MaterialAlertDialogBuilder(WebViewActivity.this).setTitle(getPermissionRequestStringResource("dialog_permission_", resId, "_title")) .setMessage(getPermissionRequestStringResource("dialog_permission_", resId, "_txt")) .setPositiveButton(android.R.string.yes, (dialog, id) -> { enablePermissionBoolOnWebApp(successCallback); @@ -638,9 +641,9 @@ private class CustomBrowser extends WebViewClient { @Override public void onPageFinished(WebView view, String url) { - if(url.equals("about:blank")) { + if (url.equals("about:blank")) { String langExtension; - switch(Locale.getDefault().getLanguage()) { + switch (Locale.getDefault().getLanguage()) { case "de": langExtension = "de"; break; @@ -675,7 +678,7 @@ public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslE return; } - final AlertDialog.Builder builder = new AlertDialog.Builder(WebViewActivity.this); + final MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(WebViewActivity.this); String message = getString(R.string.ssl_error_msg_line1) + " "; switch (error.getPrimaryError()) { diff --git a/app/src/main/java/com/cylonid/nativealpha/model/WebAppInstanceCreator.java b/app/src/main/java/com/cylonid/nativealpha/model/WebAppInstanceCreator.java index 0d434016..0490a132 100644 --- a/app/src/main/java/com/cylonid/nativealpha/model/WebAppInstanceCreator.java +++ b/app/src/main/java/com/cylonid/nativealpha/model/WebAppInstanceCreator.java @@ -4,11 +4,9 @@ import java.lang.reflect.Type; -public class WebAppInstanceCreator implements InstanceCreator -{ +public class WebAppInstanceCreator implements InstanceCreator { @Override - public WebApp createInstance(Type type) - { + public WebApp createInstance(Type type) { return new WebApp("", Integer.MAX_VALUE); } } \ No newline at end of file diff --git a/app/src/main/java/com/cylonid/nativealpha/util/Utility.java b/app/src/main/java/com/cylonid/nativealpha/util/Utility.java index 444b3313..ad2777ab 100644 --- a/app/src/main/java/com/cylonid/nativealpha/util/Utility.java +++ b/app/src/main/java/com/cylonid/nativealpha/util/Utility.java @@ -2,17 +2,13 @@ import android.annotation.SuppressLint; import android.app.ActivityManager; -import android.app.AlarmManager; -import android.app.PendingIntent; import android.content.Context; import android.content.Intent; -import android.content.pm.PackageManager; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; import android.graphics.Color; import android.net.Uri; import android.os.Build; -import android.util.Log; import android.util.TypedValue; import android.view.View; import android.view.ViewGroup; @@ -31,7 +27,6 @@ import com.cylonid.nativealpha.BuildConfig; import com.cylonid.nativealpha.R; -import com.cylonid.nativealpha.WebViewActivity; import com.cylonid.nativealpha.model.DataManager; import com.cylonid.nativealpha.model.WebApp; import com.google.android.material.snackbar.Snackbar; @@ -69,8 +64,7 @@ public static Intent createWebViewIntent(WebApp webapp, Context c) { if (webapp.getContainerId() != Const.NO_CONTAINER) { webview_class = Class.forName(apk_id + ".__WebViewActivity_" + webapp.getContainerId()); - } - else { + } else { webview_class = Class.forName(apk_id + ".WebViewActivity"); } } catch (ClassNotFoundException e) { @@ -83,6 +77,7 @@ public static Intent createWebViewIntent(WebApp webapp, Context c) { return intent; } + public static void deleteShortcuts(List removableWebAppIds) { ShortcutManager manager = App.getAppContext().getSystemService(ShortcutManager.class); for (ShortcutInfo info : manager.getPinnedShortcuts()) { @@ -98,8 +93,7 @@ public static void setViewAndChildrenEnabled(View view, boolean enabled) { view.setClickable(enabled); if (enabled) { view.setAlpha(1.0f); - } - else { + } else { view.setAlpha(0.75f); } @@ -112,8 +106,7 @@ public static void setViewAndChildrenEnabled(View view, boolean enabled) { } } - public static Long getTimeInSeconds() - { + public static Long getTimeInSeconds() { return System.currentTimeMillis() / 1000; } @@ -121,13 +114,13 @@ public static Long getTimeInSeconds() public static SimpleDateFormat getHourMinFormat() { return new SimpleDateFormat("HH:mm"); } + @SuppressLint("SimpleDateFormat") public static SimpleDateFormat getDayHourMinuteSecondsFormat() { - return new SimpleDateFormat( "EEE, d MMM yyyy HH:mm:ss Z"); + return new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z"); } - public static Calendar convertStringToCalendar(String str) { Calendar c = Calendar.getInstance(); try { @@ -163,14 +156,13 @@ public static boolean isInInterval(Calendar low, Calendar time, Calendar high) { // System.out.println("Is after low: " + (middle.after(low))); - public static void Assert(boolean condition, String message) { if (!condition) { throw new AssertionError(message); } } - public static void personalizeToolbar(AppCompatActivity a) { + public static void personalizeToolbar(AppCompatActivity a) { Toolbar toolbar = a.findViewById(R.id.toolbar); toolbar.setLogo(R.mipmap.native_alpha_white); @StringRes int appName = !BuildConfig.FLAVOR.equals("extended") ? R.string.app_name : R.string.app_name_plus; @@ -208,7 +200,7 @@ public static void applyUITheme() { } } - public static void writeFileOnInternalStorage(Context mcoContext, String sFileName, String sBody){ + public static void writeFileOnInternalStorage(Context mcoContext, String sFileName, String sBody) { try { File gpxfile = new File(mcoContext.getExternalFilesDir(null), sFileName); @@ -216,7 +208,7 @@ public static void writeFileOnInternalStorage(Context mcoContext, String sFileNa writer.append(sBody); writer.flush(); writer.close(); - } catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } } @@ -274,10 +266,9 @@ public static String getFileNameFromDownload(String url, String content_disposit ( @NonNull final Context context, @AttrRes final int attributeColor - ) - { + ) { final TypedValue value = new TypedValue(); - context.getTheme ().resolveAttribute (attributeColor, value, true); + context.getTheme().resolveAttribute(attributeColor, value, true); return value.data; } diff --git a/app/src/main/res/drawable/ic_baseline_open_in_browser_24.xml b/app/src/main/res/drawable/ic_baseline_open_in_browser_24.xml index 8fabb6e1..7790fc2c 100644 --- a/app/src/main/res/drawable/ic_baseline_open_in_browser_24.xml +++ b/app/src/main/res/drawable/ic_baseline_open_in_browser_24.xml @@ -2,9 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportWidth="24" - android:viewportHeight="24" - > - + android:viewportHeight="24"> + diff --git a/app/src/main/res/drawable/ic_delete_black_24dp.xml b/app/src/main/res/drawable/ic_delete_black_24dp.xml index cde29c12..f1c997bb 100644 --- a/app/src/main/res/drawable/ic_delete_black_24dp.xml +++ b/app/src/main/res/drawable/ic_delete_black_24dp.xml @@ -1,9 +1,9 @@ + android:width="24dp" + android:height="24dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + android:fillColor="?android:textColorPrimary" + android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z" /> diff --git a/app/src/main/res/drawable/ic_settings_black_24dp.xml b/app/src/main/res/drawable/ic_settings_black_24dp.xml index 4e1379f8..1675e62c 100644 --- a/app/src/main/res/drawable/ic_settings_black_24dp.xml +++ b/app/src/main/res/drawable/ic_settings_black_24dp.xml @@ -1,9 +1,9 @@ + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + android:fillColor="?android:textColorPrimary" + android:pathData="M19.1,12.9a2.8,2.8 0,0 0,0.1 -0.9,2.8 2.8,0 0,0 -0.1,-0.9l2.1,-1.6a0.7,0.7 0,0 0,0.1 -0.6L19.4,5.5a0.7,0.7 0,0 0,-0.6 -0.2l-2.4,1a6.5,6.5 0,0 0,-1.6 -0.9l-0.4,-2.6a0.5,0.5 0,0 0,-0.5 -0.4H10.1a0.5,0.5 0,0 0,-0.5 0.4L9.3,5.4a5.6,5.6 0,0 0,-1.7 0.9l-2.4,-1a0.4,0.4 0,0 0,-0.5 0.2l-2,3.4c-0.1,0.2 0,0.4 0.2,0.6l2,1.6a2.8,2.8 0,0 0,-0.1 0.9,2.8 2.8,0 0,0 0.1,0.9L2.8,14.5a0.7,0.7 0,0 0,-0.1 0.6l1.9,3.4a0.7,0.7 0,0 0,0.6 0.2l2.4,-1a6.5,6.5 0,0 0,1.6 0.9l0.4,2.6a0.5,0.5 0,0 0,0.5 0.4h3.8a0.5,0.5 0,0 0,0.5 -0.4l0.3,-2.6a5.6,5.6 0,0 0,1.7 -0.9l2.4,1a0.4,0.4 0,0 0,0.5 -0.2l2,-3.4c0.1,-0.2 0,-0.4 -0.2,-0.6ZM12,15.6A3.6,3.6 0,1 1,15.6 12,3.6 3.6,0 0,1 12,15.6Z" /> diff --git a/app/src/main/res/drawable/launch_screen.xml b/app/src/main/res/drawable/launch_screen.xml index 70e2b721..a4b078ce 100644 --- a/app/src/main/res/drawable/launch_screen.xml +++ b/app/src/main/res/drawable/launch_screen.xml @@ -1,16 +1,15 @@ - - - - - - - - - - + + + - - - - + + + + + + diff --git a/app/src/main/res/drawable/native_alpha_shortcut_foreground.xml b/app/src/main/res/drawable/native_alpha_shortcut_foreground.xml index 575c21d8..81031f42 100644 --- a/app/src/main/res/drawable/native_alpha_shortcut_foreground.xml +++ b/app/src/main/res/drawable/native_alpha_shortcut_foreground.xml @@ -3,18 +3,19 @@ android:height="108dp" android:viewportWidth="108" android:viewportHeight="108"> - - - - - + + + + + diff --git a/app/src/main/res/drawable/native_alpha_white_foreground.xml b/app/src/main/res/drawable/native_alpha_white_foreground.xml index e9a80dd8..34bbfe44 100644 --- a/app/src/main/res/drawable/native_alpha_white_foreground.xml +++ b/app/src/main/res/drawable/native_alpha_white_foreground.xml @@ -3,15 +3,16 @@ android:height="108dp" android:viewportWidth="108" android:viewportHeight="108"> - - - - + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index f3aa3fbe..f151121f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -22,12 +22,16 @@ - \ No newline at end of file diff --git a/app/src/main/res/layout/add_website_dialogue.xml b/app/src/main/res/layout/add_website_dialogue.xml index 1fd380d6..fa2e0889 100644 --- a/app/src/main/res/layout/add_website_dialogue.xml +++ b/app/src/main/res/layout/add_website_dialogue.xml @@ -1,26 +1,28 @@ + android:layout_height="wrap_content" + android:layout_margin="@dimen/margin_dialog" + android:orientation="vertical"> + android:autofillHints="@string/url" + android:hint="@string/url" + android:inputType="textUri" /> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + android:backgroundTint="?android:colorBackground" + android:orientation="vertical" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/full_webview.xml b/app/src/main/res/layout/full_webview.xml index b3afb346..6f199012 100644 --- a/app/src/main/res/layout/full_webview.xml +++ b/app/src/main/res/layout/full_webview.xml @@ -9,6 +9,7 @@ + + - - - - - - - - - - - + + + + + + + + + + + diff --git a/app/src/main/res/layout/global_settings.xml b/app/src/main/res/layout/global_settings.xml index e0af848d..be41f516 100644 --- a/app/src/main/res/layout/global_settings.xml +++ b/app/src/main/res/layout/global_settings.xml @@ -3,6 +3,7 @@ xmlns:tools="http://schemas.android.com/tools"> + @@ -13,14 +14,15 @@ android:id="@+id/layoutSettingsActivity" android:layout_width="match_parent" android:layout_height="match_parent" + android:backgroundTint="?android:colorBackground" tools:context=".WebAppSettingsActivity"> + android:orientation="vertical" + android:weightSum="100"> - @@ -104,35 +106,35 @@ - - - - -