Compare commits
4 Commits
Author | SHA1 | Date | |
---|---|---|---|
df65414f25 | |||
7171d4f492 | |||
9b07ae27d6 | |||
fdd3e36942 |
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Experiencing a bug? Report it so it can be caught!
|
||||
title: ''
|
||||
labels: ''
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
**Describe the bug**
|
||||
A clear and concise description of what the bug is.
|
||||
|
||||
**How to reproduce**
|
||||
Steps to reproduce the behaviour:
|
||||
1. Go to '...'
|
||||
2. Click on '....'
|
||||
3. Scroll down to '....'
|
||||
4. See error
|
||||
|
||||
**Expected behaviour**
|
||||
A clear and concise description of what you expected to happen (unless that is so obvious that it would be particularly hard to miss).
|
||||
|
||||
**Screenshots**
|
||||
If applicable, add screenshots to help explain your problem.
|
||||
|
||||
**System details**
|
||||
- Android version [e.g. Android 7]
|
||||
- App version [e.g. 1.3.8]
|
||||
|
||||
**Additional context**
|
||||
Add any other context about the problem here.
|
||||
|
||||
**Relevant?**
|
||||
- [ ] This is an issue specifically with the Android app
|
8
.idea/deploymentTargetSelector.xml
generated
8
.idea/deploymentTargetSelector.xml
generated
@ -4,6 +4,14 @@
|
||||
<selectionStates>
|
||||
<SelectionState runConfigName="app">
|
||||
<option name="selectionMode" value="DROPDOWN" />
|
||||
<DropdownSelection timestamp="2025-01-23T18:59:40.434203416Z">
|
||||
<Target type="DEFAULT_BOOT">
|
||||
<handle>
|
||||
<DeviceId pluginId="PhysicalDevice" identifier="serial=ZE2224BR4Z" />
|
||||
</handle>
|
||||
</Target>
|
||||
</DropdownSelection>
|
||||
<DialogSelection />
|
||||
</SelectionState>
|
||||
</selectionStates>
|
||||
</component>
|
||||
|
@ -37,6 +37,7 @@ dependencies {
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.7.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.2.0'
|
||||
implementation 'com.google.android.material:material:1.12.0'
|
||||
implementation platform('org.jetbrains.kotlin:kotlin-bom:2.1.0')
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
|
||||
|
@ -15,7 +15,7 @@
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_wyrm_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.Bookwyrm">
|
||||
android:theme="@style/AppTheme">
|
||||
<meta-data
|
||||
android:name="android.webkit.WebView.MetricsOptOut"
|
||||
android:value="true" />
|
||||
|
@ -81,7 +81,6 @@ public class HandlerActivity extends AppCompatActivity {
|
||||
@Override
|
||||
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
|
||||
if (omhooglader != null) {
|
||||
//omhooglader.onReceiveValue(null);
|
||||
omhooglader = null;
|
||||
}
|
||||
omhooglader = filePathCallback;
|
||||
@ -95,19 +94,11 @@ public class HandlerActivity extends AppCompatActivity {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
//myWebView.addJavascriptInterface(new HandlerActivity.WebAppInterface(this), "Android");
|
||||
//The user credentials are stored in the shared preferences, so first they have to be read from there.
|
||||
//The name of the user's server is stored in the shared preferences, so first it has to be read from there.
|
||||
String defaultValue = "none";
|
||||
SharedPreferences sharedPref = HandlerActivity.this.getSharedPreferences(getString(R.string.server), Context.MODE_PRIVATE);
|
||||
String server = sharedPref.getString(getString(R.string.server), defaultValue);
|
||||
//SharedPreferences sharedPrefName = HandlerActivity.this.getSharedPreferences(getString(R.string.name), Context.MODE_PRIVATE);
|
||||
//String name = sharedPrefName.getString(getString(R.string.name), defaultValue);
|
||||
//SharedPreferences sharedPrefPass = HandlerActivity.this.getSharedPreferences(getString(R.string.pw), Context.MODE_PRIVATE);
|
||||
//String pass = sharedPrefPass.getString(getString(R.string.pw), defaultValue);
|
||||
//SharedPreferences sharedPrefMagic = HandlerActivity.this.getSharedPreferences(getString(R.string.q), Context.MODE_PRIVATE);
|
||||
//String codeMagic = sharedPrefMagic.getString(getString(R.string.q), defaultValue);
|
||||
//If there is nothing configured yet, the user should be redirected to the main screen for logging in.
|
||||
if (server == "none") {
|
||||
if (server.equals("none")) {
|
||||
startActivity(new Intent(HandlerActivity.this, nl.privacydragon.bookwyrm.MainActivity.class));
|
||||
}
|
||||
String pathMaybe = appLinkData.getPath();
|
||||
@ -130,64 +121,6 @@ public class HandlerActivity extends AppCompatActivity {
|
||||
toGoServer = "https://" + server;
|
||||
startActivity(new Intent(HandlerActivity.this, nl.privacydragon.bookwyrm.StartActivity.class));
|
||||
}
|
||||
//Then all the decryption stuff has to happen. There are a lot of try-catch stuff, because apparently that seems to be needed.
|
||||
//First get the keystore thing.
|
||||
// KeyStore keyStore = null;
|
||||
// try {
|
||||
// keyStore = KeyStore.getInstance("AndroidKeyStore");
|
||||
// } catch (KeyStoreException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// //Then, load it. or something. To make sure that it can be used.
|
||||
// try {
|
||||
// keyStore.load(null);
|
||||
// } catch (CertificateException e) {
|
||||
// e.printStackTrace();
|
||||
// } catch (IOException e) {
|
||||
// e.printStackTrace();
|
||||
// } catch (NoSuchAlgorithmException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// //Next, retrieve the key to be used for the decryption.
|
||||
// Key DragonLikeKey = null;
|
||||
// try {
|
||||
// DragonLikeKey = keyStore.getKey("BookWyrm", null);
|
||||
// } catch (KeyStoreException e) {
|
||||
// e.printStackTrace();
|
||||
// } catch (NoSuchAlgorithmException e) {
|
||||
// e.printStackTrace();
|
||||
// } catch (UnrecoverableKeyException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// //Do something with getting the/a cipher or something.
|
||||
// Cipher c = null;
|
||||
// try {
|
||||
// c = Cipher.getInstance("AES/GCM/NoPadding");
|
||||
// } catch (NoSuchAlgorithmException e) {
|
||||
// e.printStackTrace();
|
||||
// } catch (NoSuchPaddingException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// //And then initiating the cipher, so it can be used.
|
||||
// try {
|
||||
// c.init(Cipher.DECRYPT_MODE, DragonLikeKey, new GCMParameterSpec(128, codeMagic.getBytes()));
|
||||
// } catch (InvalidAlgorithmParameterException e) {
|
||||
// e.printStackTrace();
|
||||
// } catch (InvalidKeyException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// //Decrypt the password!
|
||||
// byte[] truePass = null;
|
||||
// try {
|
||||
// truePass = c.doFinal(Base64.decode(pass, Base64.DEFAULT));
|
||||
// } catch (BadPaddingException e) {
|
||||
// e.printStackTrace();
|
||||
// } catch (IllegalBlockSizeException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
// //Convert the decrypted password back to a string.
|
||||
// String passw = new String(truePass, StandardCharsets.UTF_8);
|
||||
//String wacht = passw.replaceAll("'", "\\\\'");
|
||||
|
||||
//A webviewclient thing is needed for some stuff. To automatically log in, the credentials are put in the form by the javascript that is loaded once the page is fully loaded. Then it is automatically submitted if the current page is the login page.
|
||||
String finalToGoServer = toGoServer;
|
||||
@ -195,11 +128,6 @@ public class HandlerActivity extends AppCompatActivity {
|
||||
public void onPageFinished(WebView view, String url) {
|
||||
LoadIndicator.setVisibility(View.GONE);
|
||||
myWebView.setVisibility(View.VISIBLE);
|
||||
|
||||
//view.loadUrl("javascript:(function() { document.getElementById('id_password').value = '" + wacht + "'; ;})()");
|
||||
//view.loadUrl("javascript:(function() { document.getElementById('id_localname').value = '" + name + "'; ;})()");
|
||||
//view.loadUrl("javascript:(function() { if (window.location.href == '" + finalToGoServer + "' && !/(review|generatednote|quotation|comment|book)/i.test(window.location.href)) { document.getElementsByName(\"login\")[0].submit();} ;})()");
|
||||
//view.loadUrl("javascript:(function() { if (window.location.href == 'https://" + server + "') { document.getElementsByName(\"login\")[0].submit();} ;})()");
|
||||
view.loadUrl("javascript:(function() { if (/(review|generatednote|quotation|comment|book)/i.test(window.location.href)) {" +
|
||||
"blocks = document.getElementsByClassName('block');" +
|
||||
"for (let element of blocks){" +
|
||||
@ -222,8 +150,6 @@ public class HandlerActivity extends AppCompatActivity {
|
||||
"} else {" +
|
||||
"let ISBN = document.createElement(\"div\");" +
|
||||
"ISBN.class = 'control';" +
|
||||
//"ISBN.class = 'button';" +
|
||||
//"ISBN.type = 'button';" +
|
||||
"ISBN.innerHTML = '<button class=\"button\" type=\"button\" onclick=\"scan.performClick(this)\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" aria-hidden=\"true\"><path fill=\"none\" d=\"M0 0h24v24H0z\"/><path d=\"M4 5v14h16V5H4zM3 3h18a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm3 4h3v10H6V7zm4 0h2v10h-2V7zm3 0h1v10h-1V7zm2 0h3v10h-3V7z\"/></svg><span class=\"is-sr-only\">Search</span></button>';" +
|
||||
"nav = document.getElementsByClassName(\"field has-addons\")[0];" +
|
||||
"nav.appendChild(ISBN);" +
|
||||
@ -231,27 +157,6 @@ public class HandlerActivity extends AppCompatActivity {
|
||||
";})()");
|
||||
}
|
||||
});
|
||||
/*myWebView.setWebChromeClient(new WebChromeClient(){
|
||||
// Need to accept permissions to use the camera
|
||||
@Override
|
||||
public void onPermissionRequest(PermissionRequest request) {
|
||||
String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
|
||||
int grant = ContextCompat.checkSelfPermission(HandlerActivity.this, permission);
|
||||
if (grant != PackageManager.PERMISSION_GRANTED) {
|
||||
String[] permission_list = new String[1];
|
||||
permission_list[0] = permission;
|
||||
ActivityCompat.requestPermissions(HandlerActivity.this, permission_list, 1);
|
||||
}
|
||||
request.grant(request.getResources());
|
||||
final String[] requestedResources = request.getResources();
|
||||
for (String r : requestedResources) {
|
||||
if (r.equals(PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID)) {
|
||||
request.grant(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE});
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
});*/
|
||||
//Here, load the login page of the server. That actually does all that is needed.
|
||||
myWebView.loadUrl(toGoServer);
|
||||
}
|
||||
@ -289,8 +194,6 @@ public class HandlerActivity extends AppCompatActivity {
|
||||
eisen.setPrompt("SCAN ISBN");
|
||||
eisen.setBarcodeImageEnabled(false);
|
||||
barcodeLanceerder.launch(eisen);
|
||||
//return "blup";
|
||||
//return "bla";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -114,13 +114,6 @@ public class StartActivity extends AppCompatActivity {
|
||||
omhooglader = filePathCallback;
|
||||
Intent intent = fileChooserParams.createIntent();
|
||||
try {
|
||||
// String toestemming = Manifest.permission.READ_EXTERNAL_STORAGE;
|
||||
// int grant = ContextCompat.checkSelfPermission(StartActivity.this, toestemming);
|
||||
// if (grant != PackageManager.PERMISSION_GRANTED) {
|
||||
// String[] permission_list = new String[1];
|
||||
// permission_list[0] = toestemming;
|
||||
// ActivityCompat.requestPermissions(StartActivity.this, permission_list, 1);
|
||||
// }
|
||||
voodooLauncher.launch(intent);
|
||||
} catch (ActivityNotFoundException grrr){
|
||||
omhooglader = null;
|
||||
@ -190,11 +183,6 @@ public class StartActivity extends AppCompatActivity {
|
||||
public void onPageFinished(WebView view, String url) {
|
||||
LoadIndicator.setVisibility(View.GONE);
|
||||
myWebView.setVisibility(View.VISIBLE);
|
||||
|
||||
//view.loadUrl("javascript:(function() { document.getElementById('id_password_confirm').value = '" + wacht + "'; ;})()");
|
||||
//view.loadUrl("javascript:(function() { document.getElementById('id_localname_confirm').value = '" + name + "'; ;})()");
|
||||
//view.loadUrl("javascript:(function() { if (window.location.href == 'https://" + server + "/login') { document.getElementsByName(\"login-confirm\")[0].submit();} ;})()");
|
||||
//view.loadUrl("javascript:(function() { if (window.location.href == 'https://" + server + "/login' && document.title != '403 Forbidden') { this.document.location.href = 'source://' + encodeURI(document.documentElement.outerHTML);} ;})()");
|
||||
view.loadUrl("javascript:(function() { " +
|
||||
"if (document.querySelectorAll(\"[data-modal-open]\")[0]) {" +
|
||||
"let ISBN_Button = document.querySelectorAll(\"[data-modal-open]\")[0];" +
|
||||
@ -205,8 +193,6 @@ public class StartActivity extends AppCompatActivity {
|
||||
"} else {" +
|
||||
"let ISBN = document.createElement(\"div\");" +
|
||||
"ISBN.class = 'control';" +
|
||||
//"ISBN.class = 'button';" +
|
||||
//"ISBN.type = 'button';" +
|
||||
"ISBN.innerHTML = '<button class=\"button\" type=\"button\" onclick=\"scan.performClick(this)\"><svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"24\" height=\"24\" aria-hidden=\"true\"><path fill=\"none\" d=\"M0 0h24v24H0z\"/><path d=\"M4 5v14h16V5H4zM3 3h18a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm3 4h3v10H6V7zm4 0h2v10h-2V7zm3 0h1v10h-1V7zm2 0h3v10h-3V7z\"/></svg><span class=\"is-sr-only\">Search</span></button>';" +
|
||||
"nav = document.getElementsByClassName(\"field has-addons\")[0];" +
|
||||
"nav.appendChild(ISBN);" +
|
||||
@ -215,32 +201,6 @@ public class StartActivity extends AppCompatActivity {
|
||||
|
||||
}
|
||||
});
|
||||
//Here, load the login page of the server. That actually does all that is needed.
|
||||
// try {
|
||||
// getMiddleWareToken(server, name, passw);
|
||||
// } catch (IOException e) {
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
// String geheimeToken = null;
|
||||
// try {
|
||||
// geheimeToken = getMiddleWareToken(server);
|
||||
// } catch (IOException e) {
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
// String gegevens = null;
|
||||
// try {
|
||||
// gegevens = "csrfmiddlewaretoken=" + URLEncoder.encode(geheimeToken, "UTF-8") + "&localname=" + URLEncoder.encode(name, "UTF-8") + "&password=" + URLEncoder.encode(passw, "UTF-8");
|
||||
// } catch (UnsupportedEncodingException e) {
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
// myWebView.postUrl("https://" + server + "/login", gegevens.getBytes());
|
||||
//myWebView.loadUrl("https://" + server + "/login");
|
||||
// myWebView.setVisibility(View.GONE);
|
||||
// LoadIndicator.setVisibility(View.VISIBLE);
|
||||
// android.webkit.CookieManager oven = android.webkit.CookieManager.getInstance();
|
||||
//myWebView.loadUrl("javascript:this.document.location.href = 'source://' + encodeURI(document.documentElement.outerHTML);");
|
||||
//try {
|
||||
//See if we are already logged in.
|
||||
CookieManager oven = CookieManager.getInstance();
|
||||
String koek = oven.getCookie("https://" + server);
|
||||
if (koek != null) {
|
||||
@ -262,9 +222,6 @@ public class StartActivity extends AppCompatActivity {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
//} catch (IOException e) {
|
||||
// throw new RuntimeException(e);
|
||||
//}
|
||||
|
||||
|
||||
}
|
||||
@ -279,7 +236,6 @@ public class StartActivity extends AppCompatActivity {
|
||||
try {
|
||||
//Load the login page, and do not forget to take some cookies.
|
||||
Security.insertProviderAt(Conscrypt.newProvider(), 1);
|
||||
//URL url = new URL("https://" + server + "/");
|
||||
String speculaas = "";
|
||||
String speculaasBeslag = "";
|
||||
//The login page loading is done using OkHttpClient.
|
||||
@ -302,30 +258,6 @@ public class StartActivity extends AppCompatActivity {
|
||||
//And then get the HTML body.
|
||||
assert antwoord.body() != null;
|
||||
String zooi = antwoord.body().string();
|
||||
// CookieManager koekManager = new CookieManager();
|
||||
// CookieHandler.setDefault(koekManager);
|
||||
// CookieStore bakker = koekManager.getCookieStore();
|
||||
// HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
|
||||
// try {
|
||||
// InputStream ina = new BufferedInputStream(urlConnection.getInputStream());
|
||||
// byte[] pagina = null;
|
||||
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
// pagina = ina.readAllBytes();
|
||||
// } else {
|
||||
// //I truly hope that this byte array will always be big enough...
|
||||
// //The Tiramisu+ way is much better...
|
||||
// pagina = new byte[30000];
|
||||
// ina.read(pagina);
|
||||
// }
|
||||
// try {
|
||||
// ina.close();
|
||||
// } catch (IOException e) {
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
// //We should not forget closing the connection we used for hearing what csrf cookie and token we needed.
|
||||
// urlConnection.disconnect();
|
||||
// //And now create a string out of the byte array, so we can retreive the middleware token.
|
||||
// String zooi = new String(pagina);
|
||||
//Very easy to get the token by taking the text that it is preceded by in the raw html as the regex for a split() function!
|
||||
String[] opgebroken = zooi.split("name=\"csrfmiddlewaretoken\" value=\"");
|
||||
//For that gives as second element the token, followed by all the following html code. Then strip that code off, using the immediately following characters as regex.
|
||||
@ -334,21 +266,6 @@ public class StartActivity extends AppCompatActivity {
|
||||
String token = breukjes[0];
|
||||
//Log.d("botbreuk", token);
|
||||
String gegevens = null;
|
||||
//Initiate some strings to use for the delicious csrf cookie.
|
||||
//String speculaas = "", THT = "";
|
||||
// //How to get the cookies? First get the cookie collection, the cookie box so to say, and then...
|
||||
// List<HttpCookie> koektrommel = bakker.get(URI.create("https://" + server));
|
||||
// Log.d("koek", koektrommel.toString());
|
||||
// //... for every cookie in it check to see if it is the csrftoken named cookie.
|
||||
// for (int i = 0; i < koektrommel.size(); ++i) {
|
||||
// HttpCookie koekje = koektrommel.get(i);
|
||||
// if (Objects.equals(koekje.getName(), "csrftoken")) {
|
||||
// //If it is the csrftoken cookie, get the value of it, and the expiration date of it.
|
||||
// speculaas = koekje.toString();
|
||||
// THT = String.valueOf(koekje.getMaxAge());
|
||||
// //Log.d("domein", koekje.getDomain());
|
||||
// }
|
||||
// }
|
||||
//And then set the data string up for use in the POST request, with the csrf middleware token, the username, and the password.
|
||||
try {
|
||||
gegevens = "csrfmiddlewaretoken=" + URLEncoder.encode(token, "UTF-8") + "&localname=" + URLEncoder.encode(name, "UTF-8") + "&password=" + URLEncoder.encode(passw, "UTF-8");
|
||||
@ -365,7 +282,8 @@ public class StartActivity extends AppCompatActivity {
|
||||
//Log.d("gegevens", finalGegevens);
|
||||
//Log.d("beslag", speculaasBeslag);
|
||||
String finalSpeculaas = speculaas;
|
||||
//String finalTHT = THT;
|
||||
//Log in using a POST request, and shove the resulting web-page into a public string. (putje)
|
||||
//For this, we have to give the log-in function the servername, the request body, and the value of the csrf cookie.
|
||||
logInAndGetHTML(server, keurslijf, speculaasBeslag);
|
||||
//Then we have to run a bit of code on the main (UI) thread. To be able to work with the webview...
|
||||
runOnUiThread(new Runnable() {
|
||||
@ -378,15 +296,11 @@ public class StartActivity extends AppCompatActivity {
|
||||
oven.setCookie("https://" + server, finalSpeculaas);
|
||||
//And bake the session cookie as well.
|
||||
oven.setCookie("https://" + server, sessie);
|
||||
//And then finally it is time to send a POST request from the webview to log in.
|
||||
//myWebView.postUrl("https://" + server + "/login?next=/", finalGegevens.getBytes());
|
||||
//And then finally it is time to load everything into the webview.
|
||||
myWebView.loadDataWithBaseURL("https://" + server, putje, null, null, "https://" + server + "/login");
|
||||
}
|
||||
});
|
||||
|
||||
} finally {
|
||||
// //We should not forget closing the connection we used for hearing what csrf cookie and token we needed.
|
||||
// urlConnection.disconnect();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
@ -398,20 +312,12 @@ public class StartActivity extends AppCompatActivity {
|
||||
draadje.start();
|
||||
}
|
||||
public void logInAndGetHTML(String server, RequestBody lichaam, String speculoos) throws IOException {
|
||||
// Thread kabel = new Thread(new Runnable() {
|
||||
// @Override
|
||||
// public void run() {
|
||||
// try {
|
||||
// //Load the login page, and do not forget to take some cookies.
|
||||
Security.insertProviderAt(Conscrypt.newProvider(), 1);
|
||||
//Create a client using CookieMonster, so we can retrieve cookies from the redirect.
|
||||
//Create a client using CookieMonster, so we can retrieve cookies from the redirect after sending the log-in data.
|
||||
OkHttpClient client = new OkHttpClient.Builder()
|
||||
.addNetworkInterceptor(new CookieMonster())
|
||||
.build();
|
||||
//URL url = new URL("https://" + server + "/");
|
||||
//CookieManager koekManager = new CookieManager();
|
||||
//CookieHandler.setDefault(koekManager);
|
||||
//CookieStore bakker = koekManager.getCookieStore();
|
||||
//Create the POST request.
|
||||
Request verzoek = new Request.Builder()
|
||||
.url("https://" + server + "/login?next=/")
|
||||
.header("User-Agent", getString(R.string.gebruikersagent))
|
||||
@ -419,52 +325,14 @@ public class StartActivity extends AppCompatActivity {
|
||||
.addHeader("cookie", speculoos)
|
||||
.post(lichaam)
|
||||
.build();
|
||||
//And then get the response.
|
||||
try (Response reactie = client.newCall(verzoek).execute()) {
|
||||
if (!reactie.isSuccessful())
|
||||
throw new IOException("Unexpected code " + reactie);
|
||||
assert reactie.body() != null;
|
||||
//Shove the response body into the public string 'putje', to be used for sending the body to the webview.
|
||||
putje = reactie.body().string();
|
||||
}
|
||||
|
||||
// HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
|
||||
// urlConnection.setRequestProperty("origin", "https://" + server);
|
||||
// byte[] paarden = gegevens.getBytes();
|
||||
// try {
|
||||
// urlConnection.setDoOutput(true);
|
||||
// urlConnection.setChunkedStreamingMode(0);
|
||||
//
|
||||
// OutputStream out = new BufferedOutputStream(urlConnection.getOutputStream());
|
||||
// out.write(paarden);
|
||||
// out.flush();
|
||||
//
|
||||
// InputStream in = new BufferedInputStream(urlConnection.getInputStream());
|
||||
// byte[] pagina = null;
|
||||
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
|
||||
// pagina = in.readAllBytes();
|
||||
// } else {
|
||||
// //I truly hope that this byte array will always be big enough...
|
||||
// //The Tiramisu+ way is much better...
|
||||
// pagina = new byte[30000];
|
||||
// in.read(pagina);
|
||||
// }
|
||||
// try {
|
||||
// in.close();
|
||||
// } catch (IOException e) {
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
// html[0] = new String(pagina);
|
||||
// } finally {
|
||||
// urlConnection.disconnect();
|
||||
// }
|
||||
|
||||
// } catch (Exception e) {
|
||||
// throw new RuntimeException(e);
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
// kabel.start();
|
||||
//Log.d("lichaam", putje);
|
||||
//return putje;
|
||||
}
|
||||
private final ActivityResultLauncher<ScanOptions> barcodeLanceerder = registerForActivityResult(new ScanContract(),
|
||||
result -> {
|
||||
@ -499,8 +367,6 @@ public class StartActivity extends AppCompatActivity {
|
||||
eisen.setPrompt("SCAN ISBN");
|
||||
eisen.setBarcodeImageEnabled(false);
|
||||
barcodeLanceerder.launch(eisen);
|
||||
//return "blup";
|
||||
//return "bla";
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -570,8 +436,6 @@ public class StartActivity extends AppCompatActivity {
|
||||
@Override
|
||||
public void onPageStarted(WebView view, String url, Bitmap favicon) {
|
||||
LoadIndicator.setVisibility(View.VISIBLE);
|
||||
//CookieManager oven = CookieManager.getInstance();
|
||||
//Log.d("oven", oven.getCookie(url));
|
||||
}
|
||||
}
|
||||
}
|
@ -6,7 +6,7 @@
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".MainActivity">
|
||||
|
||||
<TextView
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/textView4"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@ -22,7 +22,7 @@
|
||||
app:layout_constraintTop_toBottomOf="@+id/Username"
|
||||
app:layout_constraintVertical_bias="0.0" />
|
||||
|
||||
<EditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/Instance"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@ -37,7 +37,7 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<EditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/Username"
|
||||
android:layout_width="409dp"
|
||||
android:layout_height="wrap_content"
|
||||
@ -53,7 +53,7 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/Instance" />
|
||||
|
||||
<EditText
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:id="@+id/Password"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
@ -68,7 +68,7 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/Username" />
|
||||
|
||||
<TextView
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/textView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@ -85,7 +85,7 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/textView2"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@ -100,7 +100,7 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/textView" />
|
||||
|
||||
<TextView
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/textView3"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@ -115,7 +115,7 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/Instance" />
|
||||
|
||||
<TextView
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/textView6"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@ -130,7 +130,7 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/Username" />
|
||||
|
||||
<Button
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
@ -147,7 +147,7 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/Password" />
|
||||
|
||||
<TextView
|
||||
<com.google.android.material.textview.MaterialTextView
|
||||
android:id="@+id/textView5"
|
||||
android:layout_width="243dp"
|
||||
android:layout_height="33dp"
|
||||
|
@ -18,6 +18,7 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="715dp"
|
||||
android:indeterminateTint="@color/TheNewGreen"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
@ -1,10 +0,0 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Bookwyrm" parent="Theme.AppCompat">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">#3298DC</item>
|
||||
<item name="colorPrimaryDark">#1B557C</item>
|
||||
<item name="colorAccent">@color/teal_200</item>
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
</resources>
|
@ -1,10 +1,144 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="purple_200">#FFBB86FC</color>
|
||||
<color name="purple_500">#FF6200EE</color>
|
||||
<color name="purple_700">#FF3700B3</color>
|
||||
<color name="teal_200">#FF03DAC5</color>
|
||||
<color name="teal_700">#FF018786</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
</resources>
|
||||
<color name="TheNewGreen">#FD00FF</color>
|
||||
<color name="md_theme_primary">#003351</color>
|
||||
<color name="md_theme_onPrimary">#FFFFFF</color>
|
||||
<color name="md_theme_primaryContainer">#074B72</color>
|
||||
<color name="md_theme_onPrimaryContainer">#CCE5FF</color>
|
||||
<color name="md_theme_secondary">#B8C8DA</color>
|
||||
<color name="md_theme_onSecondary">#23323F</color>
|
||||
<color name="md_theme_secondaryContainer">#394857</color>
|
||||
<color name="md_theme_onSecondaryContainer">#D4E4F6</color>
|
||||
<color name="md_theme_tertiary">#D1BFE7</color>
|
||||
<color name="md_theme_onTertiary">#372A4A</color>
|
||||
<color name="md_theme_tertiaryContainer">#4E4161</color>
|
||||
<color name="md_theme_onTertiaryContainer">#EDDCFF</color>
|
||||
<color name="md_theme_error">#FFB4AB</color>
|
||||
<color name="md_theme_onError">#690005</color>
|
||||
<color name="md_theme_errorContainer">#93000A</color>
|
||||
<color name="md_theme_onErrorContainer">#FFDAD6</color>
|
||||
<color name="md_theme_background">#101418</color>
|
||||
<color name="md_theme_onBackground">#E0E2E8</color>
|
||||
<color name="md_theme_surface">#101418</color>
|
||||
<color name="md_theme_onSurface">#E0E2E8</color>
|
||||
<color name="md_theme_surfaceVariant">#42474E</color>
|
||||
<color name="md_theme_onSurfaceVariant">#C2C7CE</color>
|
||||
<color name="md_theme_outline">#8C9198</color>
|
||||
<color name="md_theme_outlineVariant">#42474E</color>
|
||||
<color name="md_theme_scrim">#000000</color>
|
||||
<color name="md_theme_inverseSurface">#E0E2E8</color>
|
||||
<color name="md_theme_inverseOnSurface">#2D3135</color>
|
||||
<color name="md_theme_inversePrimary">#2C638B</color>
|
||||
<color name="md_theme_primaryFixed">#CCE5FF</color>
|
||||
<color name="md_theme_onPrimaryFixed">#001D31</color>
|
||||
<color name="md_theme_primaryFixedDim">#99CCFA</color>
|
||||
<color name="md_theme_onPrimaryFixedVariant">#074B72</color>
|
||||
<color name="md_theme_secondaryFixed">#D4E4F6</color>
|
||||
<color name="md_theme_onSecondaryFixed">#0D1D2A</color>
|
||||
<color name="md_theme_secondaryFixedDim">#B8C8DA</color>
|
||||
<color name="md_theme_onSecondaryFixedVariant">#394857</color>
|
||||
<color name="md_theme_tertiaryFixed">#EDDCFF</color>
|
||||
<color name="md_theme_onTertiaryFixed">#221534</color>
|
||||
<color name="md_theme_tertiaryFixedDim">#D1BFE7</color>
|
||||
<color name="md_theme_onTertiaryFixedVariant">#4E4161</color>
|
||||
<color name="md_theme_surfaceDim">#101418</color>
|
||||
<color name="md_theme_surfaceBright">#36393E</color>
|
||||
<color name="md_theme_surfaceContainerLowest">#0B0F12</color>
|
||||
<color name="md_theme_surfaceContainerLow">#181C20</color>
|
||||
<color name="md_theme_surfaceContainer">#1C2024</color>
|
||||
<color name="md_theme_surfaceContainerHigh">#272A2E</color>
|
||||
<color name="md_theme_surfaceContainerHighest">#313539</color>
|
||||
<color name="md_theme_primary_mediumContrast">#C0E0FF</color>
|
||||
<color name="md_theme_onPrimary_mediumContrast">#002841</color>
|
||||
<color name="md_theme_primaryContainer_mediumContrast">#6396C1</color>
|
||||
<color name="md_theme_onPrimaryContainer_mediumContrast">#000000</color>
|
||||
<color name="md_theme_secondary_mediumContrast">#CEDEF0</color>
|
||||
<color name="md_theme_onSecondary_mediumContrast">#182734</color>
|
||||
<color name="md_theme_secondaryContainer_mediumContrast">#8392A3</color>
|
||||
<color name="md_theme_onSecondaryContainer_mediumContrast">#000000</color>
|
||||
<color name="md_theme_tertiary_mediumContrast">#E8D5FE</color>
|
||||
<color name="md_theme_onTertiary_mediumContrast">#2C203E</color>
|
||||
<color name="md_theme_tertiaryContainer_mediumContrast">#9A8AAF</color>
|
||||
<color name="md_theme_onTertiaryContainer_mediumContrast">#000000</color>
|
||||
<color name="md_theme_error_mediumContrast">#FFD2CC</color>
|
||||
<color name="md_theme_onError_mediumContrast">#540003</color>
|
||||
<color name="md_theme_errorContainer_mediumContrast">#FF5449</color>
|
||||
<color name="md_theme_onErrorContainer_mediumContrast">#000000</color>
|
||||
<color name="md_theme_background_mediumContrast">#101418</color>
|
||||
<color name="md_theme_onBackground_mediumContrast">#E0E2E8</color>
|
||||
<color name="md_theme_surface_mediumContrast">#101418</color>
|
||||
<color name="md_theme_onSurface_mediumContrast">#FFFFFF</color>
|
||||
<color name="md_theme_surfaceVariant_mediumContrast">#42474E</color>
|
||||
<color name="md_theme_onSurfaceVariant_mediumContrast">#D8DDE4</color>
|
||||
<color name="md_theme_outline_mediumContrast">#ADB2BA</color>
|
||||
<color name="md_theme_outlineVariant_mediumContrast">#8B9198</color>
|
||||
<color name="md_theme_scrim_mediumContrast">#000000</color>
|
||||
<color name="md_theme_inverseSurface_mediumContrast">#E0E2E8</color>
|
||||
<color name="md_theme_inverseOnSurface_mediumContrast">#272A2E</color>
|
||||
<color name="md_theme_inversePrimary_mediumContrast">#0A4C73</color>
|
||||
<color name="md_theme_primaryFixed_mediumContrast">#CCE5FF</color>
|
||||
<color name="md_theme_onPrimaryFixed_mediumContrast">#001321</color>
|
||||
<color name="md_theme_primaryFixedDim_mediumContrast">#99CCFA</color>
|
||||
<color name="md_theme_onPrimaryFixedVariant_mediumContrast">#00395A</color>
|
||||
<color name="md_theme_secondaryFixed_mediumContrast">#D4E4F6</color>
|
||||
<color name="md_theme_onSecondaryFixed_mediumContrast">#03121F</color>
|
||||
<color name="md_theme_secondaryFixedDim_mediumContrast">#B8C8DA</color>
|
||||
<color name="md_theme_onSecondaryFixedVariant_mediumContrast">#293845</color>
|
||||
<color name="md_theme_tertiaryFixed_mediumContrast">#EDDCFF</color>
|
||||
<color name="md_theme_onTertiaryFixed_mediumContrast">#170A28</color>
|
||||
<color name="md_theme_tertiaryFixedDim_mediumContrast">#D1BFE7</color>
|
||||
<color name="md_theme_onTertiaryFixedVariant_mediumContrast">#3D3050</color>
|
||||
<color name="md_theme_surfaceDim_mediumContrast">#101418</color>
|
||||
<color name="md_theme_surfaceBright_mediumContrast">#414549</color>
|
||||
<color name="md_theme_surfaceContainerLowest_mediumContrast">#05080B</color>
|
||||
<color name="md_theme_surfaceContainerLow_mediumContrast">#1A1E22</color>
|
||||
<color name="md_theme_surfaceContainer_mediumContrast">#24282C</color>
|
||||
<color name="md_theme_surfaceContainerHigh_mediumContrast">#2F3337</color>
|
||||
<color name="md_theme_surfaceContainerHighest_mediumContrast">#3A3E42</color>
|
||||
<color name="md_theme_primary_highContrast">#E6F1FF</color>
|
||||
<color name="md_theme_onPrimary_highContrast">#000000</color>
|
||||
<color name="md_theme_primaryContainer_highContrast">#95C8F5</color>
|
||||
<color name="md_theme_onPrimaryContainer_highContrast">#000C18</color>
|
||||
<color name="md_theme_secondary_highContrast">#E6F1FF</color>
|
||||
<color name="md_theme_onSecondary_highContrast">#000000</color>
|
||||
<color name="md_theme_secondaryContainer_highContrast">#B4C4D6</color>
|
||||
<color name="md_theme_onSecondaryContainer_highContrast">#000C18</color>
|
||||
<color name="md_theme_tertiary_highContrast">#F7ECFF</color>
|
||||
<color name="md_theme_onTertiary_highContrast">#000000</color>
|
||||
<color name="md_theme_tertiaryContainer_highContrast">#CDBBE3</color>
|
||||
<color name="md_theme_onTertiaryContainer_highContrast">#110522</color>
|
||||
<color name="md_theme_error_highContrast">#FFECE9</color>
|
||||
<color name="md_theme_onError_highContrast">#000000</color>
|
||||
<color name="md_theme_errorContainer_highContrast">#FFAEA4</color>
|
||||
<color name="md_theme_onErrorContainer_highContrast">#220001</color>
|
||||
<color name="md_theme_background_highContrast">#101418</color>
|
||||
<color name="md_theme_onBackground_highContrast">#E0E2E8</color>
|
||||
<color name="md_theme_surface_highContrast">#101418</color>
|
||||
<color name="md_theme_onSurface_highContrast">#FFFFFF</color>
|
||||
<color name="md_theme_surfaceVariant_highContrast">#42474E</color>
|
||||
<color name="md_theme_onSurfaceVariant_highContrast">#FFFFFF</color>
|
||||
<color name="md_theme_outline_highContrast">#EBF0F8</color>
|
||||
<color name="md_theme_outlineVariant_highContrast">#BEC3CB</color>
|
||||
<color name="md_theme_scrim_highContrast">#000000</color>
|
||||
<color name="md_theme_inverseSurface_highContrast">#E0E2E8</color>
|
||||
<color name="md_theme_inverseOnSurface_highContrast">#000000</color>
|
||||
<color name="md_theme_inversePrimary_highContrast">#0A4C73</color>
|
||||
<color name="md_theme_primaryFixed_highContrast">#CCE5FF</color>
|
||||
<color name="md_theme_onPrimaryFixed_highContrast">#000000</color>
|
||||
<color name="md_theme_primaryFixedDim_highContrast">#99CCFA</color>
|
||||
<color name="md_theme_onPrimaryFixedVariant_highContrast">#001321</color>
|
||||
<color name="md_theme_secondaryFixed_highContrast">#D4E4F6</color>
|
||||
<color name="md_theme_onSecondaryFixed_highContrast">#000000</color>
|
||||
<color name="md_theme_secondaryFixedDim_highContrast">#B8C8DA</color>
|
||||
<color name="md_theme_onSecondaryFixedVariant_highContrast">#03121F</color>
|
||||
<color name="md_theme_tertiaryFixed_highContrast">#EDDCFF</color>
|
||||
<color name="md_theme_onTertiaryFixed_highContrast">#000000</color>
|
||||
<color name="md_theme_tertiaryFixedDim_highContrast">#D1BFE7</color>
|
||||
<color name="md_theme_onTertiaryFixedVariant_highContrast">#170A28</color>
|
||||
<color name="md_theme_surfaceDim_highContrast">#101418</color>
|
||||
<color name="md_theme_surfaceBright_highContrast">#4D5055</color>
|
||||
<color name="md_theme_surfaceContainerLowest_highContrast">#000000</color>
|
||||
<color name="md_theme_surfaceContainerLow_highContrast">#1C2024</color>
|
||||
<color name="md_theme_surfaceContainer_highContrast">#2D3135</color>
|
||||
<color name="md_theme_surfaceContainerHigh_highContrast">#383C40</color>
|
||||
<color name="md_theme_surfaceContainerHighest_highContrast">#43474C</color>
|
||||
</resources>
|
||||
|
98
app/src/main/res/values/theme_overlays.xml
Normal file
98
app/src/main/res/values/theme_overlays.xml
Normal file
@ -0,0 +1,98 @@
|
||||
<resources>
|
||||
<style name="ThemeOverlay.AppTheme.MediumContrast" parent="Theme.Material3.Dark.NoActionBar">
|
||||
<item name="colorPrimary">@color/md_theme_primary_mediumContrast</item>
|
||||
<item name="colorOnPrimary">@color/md_theme_onPrimary_mediumContrast</item>
|
||||
<item name="colorPrimaryContainer">@color/md_theme_primaryContainer_mediumContrast</item>
|
||||
<item name="colorOnPrimaryContainer">@color/md_theme_onPrimaryContainer_mediumContrast</item>
|
||||
<item name="colorSecondary">@color/md_theme_secondary_mediumContrast</item>
|
||||
<item name="colorOnSecondary">@color/md_theme_onSecondary_mediumContrast</item>
|
||||
<item name="colorSecondaryContainer">@color/md_theme_secondaryContainer_mediumContrast</item>
|
||||
<item name="colorOnSecondaryContainer">@color/md_theme_onSecondaryContainer_mediumContrast</item>
|
||||
<item name="colorTertiary">@color/md_theme_tertiary_mediumContrast</item>
|
||||
<item name="colorOnTertiary">@color/md_theme_onTertiary_mediumContrast</item>
|
||||
<item name="colorTertiaryContainer">@color/md_theme_tertiaryContainer_mediumContrast</item>
|
||||
<item name="colorOnTertiaryContainer">@color/md_theme_onTertiaryContainer_mediumContrast</item>
|
||||
<item name="colorError">@color/md_theme_error_mediumContrast</item>
|
||||
<item name="colorOnError">@color/md_theme_onError_mediumContrast</item>
|
||||
<item name="colorErrorContainer">@color/md_theme_errorContainer_mediumContrast</item>
|
||||
<item name="colorOnErrorContainer">@color/md_theme_onErrorContainer_mediumContrast</item>
|
||||
<item name="android:colorBackground">@color/md_theme_background_mediumContrast</item>
|
||||
<item name="colorOnBackground">@color/md_theme_onBackground_mediumContrast</item>
|
||||
<item name="colorSurface">@color/md_theme_surface_mediumContrast</item>
|
||||
<item name="colorOnSurface">@color/md_theme_onSurface_mediumContrast</item>
|
||||
<item name="colorSurfaceVariant">@color/md_theme_surfaceVariant_mediumContrast</item>
|
||||
<item name="colorOnSurfaceVariant">@color/md_theme_onSurfaceVariant_mediumContrast</item>
|
||||
<item name="colorOutline">@color/md_theme_outline_mediumContrast</item>
|
||||
<item name="colorOutlineVariant">@color/md_theme_outlineVariant_mediumContrast</item>
|
||||
<item name="colorSurfaceInverse">@color/md_theme_inverseSurface_mediumContrast</item>
|
||||
<item name="colorOnSurfaceInverse">@color/md_theme_inverseOnSurface_mediumContrast</item>
|
||||
<item name="colorPrimaryInverse">@color/md_theme_inversePrimary_mediumContrast</item>
|
||||
<item name="colorPrimaryFixed">@color/md_theme_primaryFixed_mediumContrast</item>
|
||||
<item name="colorOnPrimaryFixed">@color/md_theme_onPrimaryFixed_mediumContrast</item>
|
||||
<item name="colorPrimaryFixedDim">@color/md_theme_primaryFixedDim_mediumContrast</item>
|
||||
<item name="colorOnPrimaryFixedVariant">@color/md_theme_onPrimaryFixedVariant_mediumContrast</item>
|
||||
<item name="colorSecondaryFixed">@color/md_theme_secondaryFixed_mediumContrast</item>
|
||||
<item name="colorOnSecondaryFixed">@color/md_theme_onSecondaryFixed_mediumContrast</item>
|
||||
<item name="colorSecondaryFixedDim">@color/md_theme_secondaryFixedDim_mediumContrast</item>
|
||||
<item name="colorOnSecondaryFixedVariant">@color/md_theme_onSecondaryFixedVariant_mediumContrast</item>
|
||||
<item name="colorTertiaryFixed">@color/md_theme_tertiaryFixed_mediumContrast</item>
|
||||
<item name="colorOnTertiaryFixed">@color/md_theme_onTertiaryFixed_mediumContrast</item>
|
||||
<item name="colorTertiaryFixedDim">@color/md_theme_tertiaryFixedDim_mediumContrast</item>
|
||||
<item name="colorOnTertiaryFixedVariant">@color/md_theme_onTertiaryFixedVariant_mediumContrast</item>
|
||||
<item name="colorSurfaceDim">@color/md_theme_surfaceDim_mediumContrast</item>
|
||||
<item name="colorSurfaceBright">@color/md_theme_surfaceBright_mediumContrast</item>
|
||||
<item name="colorSurfaceContainerLowest">@color/md_theme_surfaceContainerLowest_mediumContrast</item>
|
||||
<item name="colorSurfaceContainerLow">@color/md_theme_surfaceContainerLow_mediumContrast</item>
|
||||
<item name="colorSurfaceContainer">@color/md_theme_surfaceContainer_mediumContrast</item>
|
||||
<item name="colorSurfaceContainerHigh">@color/md_theme_surfaceContainerHigh_mediumContrast</item>
|
||||
<item name="colorSurfaceContainerHighest">@color/md_theme_surfaceContainerHighest_mediumContrast</item>
|
||||
</style>
|
||||
<style name="ThemeOverlay.AppTheme.HighContrast" parent="Theme.Material3.Dark.NoActionBar">
|
||||
<item name="colorPrimary">@color/md_theme_primary_highContrast</item>
|
||||
<item name="colorOnPrimary">@color/md_theme_onPrimary_highContrast</item>
|
||||
<item name="colorPrimaryContainer">@color/md_theme_primaryContainer_highContrast</item>
|
||||
<item name="colorOnPrimaryContainer">@color/md_theme_onPrimaryContainer_highContrast</item>
|
||||
<item name="colorSecondary">@color/md_theme_secondary_highContrast</item>
|
||||
<item name="colorOnSecondary">@color/md_theme_onSecondary_highContrast</item>
|
||||
<item name="colorSecondaryContainer">@color/md_theme_secondaryContainer_highContrast</item>
|
||||
<item name="colorOnSecondaryContainer">@color/md_theme_onSecondaryContainer_highContrast</item>
|
||||
<item name="colorTertiary">@color/md_theme_tertiary_highContrast</item>
|
||||
<item name="colorOnTertiary">@color/md_theme_onTertiary_highContrast</item>
|
||||
<item name="colorTertiaryContainer">@color/md_theme_tertiaryContainer_highContrast</item>
|
||||
<item name="colorOnTertiaryContainer">@color/md_theme_onTertiaryContainer_highContrast</item>
|
||||
<item name="colorError">@color/md_theme_error_highContrast</item>
|
||||
<item name="colorOnError">@color/md_theme_onError_highContrast</item>
|
||||
<item name="colorErrorContainer">@color/md_theme_errorContainer_highContrast</item>
|
||||
<item name="colorOnErrorContainer">@color/md_theme_onErrorContainer_highContrast</item>
|
||||
<item name="android:colorBackground">@color/md_theme_background_highContrast</item>
|
||||
<item name="colorOnBackground">@color/md_theme_onBackground_highContrast</item>
|
||||
<item name="colorSurface">@color/md_theme_surface_highContrast</item>
|
||||
<item name="colorOnSurface">@color/md_theme_onSurface_highContrast</item>
|
||||
<item name="colorSurfaceVariant">@color/md_theme_surfaceVariant_highContrast</item>
|
||||
<item name="colorOnSurfaceVariant">@color/md_theme_onSurfaceVariant_highContrast</item>
|
||||
<item name="colorOutline">@color/md_theme_outline_highContrast</item>
|
||||
<item name="colorOutlineVariant">@color/md_theme_outlineVariant_highContrast</item>
|
||||
<item name="colorSurfaceInverse">@color/md_theme_inverseSurface_highContrast</item>
|
||||
<item name="colorOnSurfaceInverse">@color/md_theme_inverseOnSurface_highContrast</item>
|
||||
<item name="colorPrimaryInverse">@color/md_theme_inversePrimary_highContrast</item>
|
||||
<item name="colorPrimaryFixed">@color/md_theme_primaryFixed_highContrast</item>
|
||||
<item name="colorOnPrimaryFixed">@color/md_theme_onPrimaryFixed_highContrast</item>
|
||||
<item name="colorPrimaryFixedDim">@color/md_theme_primaryFixedDim_highContrast</item>
|
||||
<item name="colorOnPrimaryFixedVariant">@color/md_theme_onPrimaryFixedVariant_highContrast</item>
|
||||
<item name="colorSecondaryFixed">@color/md_theme_secondaryFixed_highContrast</item>
|
||||
<item name="colorOnSecondaryFixed">@color/md_theme_onSecondaryFixed_highContrast</item>
|
||||
<item name="colorSecondaryFixedDim">@color/md_theme_secondaryFixedDim_highContrast</item>
|
||||
<item name="colorOnSecondaryFixedVariant">@color/md_theme_onSecondaryFixedVariant_highContrast</item>
|
||||
<item name="colorTertiaryFixed">@color/md_theme_tertiaryFixed_highContrast</item>
|
||||
<item name="colorOnTertiaryFixed">@color/md_theme_onTertiaryFixed_highContrast</item>
|
||||
<item name="colorTertiaryFixedDim">@color/md_theme_tertiaryFixedDim_highContrast</item>
|
||||
<item name="colorOnTertiaryFixedVariant">@color/md_theme_onTertiaryFixedVariant_highContrast</item>
|
||||
<item name="colorSurfaceDim">@color/md_theme_surfaceDim_highContrast</item>
|
||||
<item name="colorSurfaceBright">@color/md_theme_surfaceBright_highContrast</item>
|
||||
<item name="colorSurfaceContainerLowest">@color/md_theme_surfaceContainerLowest_highContrast</item>
|
||||
<item name="colorSurfaceContainerLow">@color/md_theme_surfaceContainerLow_highContrast</item>
|
||||
<item name="colorSurfaceContainer">@color/md_theme_surfaceContainer_highContrast</item>
|
||||
<item name="colorSurfaceContainerHigh">@color/md_theme_surfaceContainerHigh_highContrast</item>
|
||||
<item name="colorSurfaceContainerHighest">@color/md_theme_surfaceContainerHighest_highContrast</item>
|
||||
</style>
|
||||
</resources>
|
@ -1,10 +1,50 @@
|
||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||
<!-- Base application theme. -->
|
||||
<style name="Theme.Bookwyrm" parent="Theme.AppCompat">
|
||||
<!-- Primary brand color. -->
|
||||
<item name="colorPrimary">#3298DC</item>
|
||||
<item name="colorPrimaryDark">#1B557C</item>
|
||||
<item name="colorAccent">@color/teal_200</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<resources>
|
||||
<style name="AppTheme" parent="Theme.Material3.Dark.NoActionBar">
|
||||
<item name="colorPrimary">@color/md_theme_primary</item>
|
||||
<item name="colorOnPrimary">@color/md_theme_onPrimary</item>
|
||||
<item name="colorPrimaryContainer">@color/md_theme_primaryContainer</item>
|
||||
<item name="colorOnPrimaryContainer">@color/md_theme_onPrimaryContainer</item>
|
||||
<item name="colorSecondary">@color/md_theme_secondary</item>
|
||||
<item name="colorOnSecondary">@color/md_theme_onSecondary</item>
|
||||
<item name="colorSecondaryContainer">@color/md_theme_secondaryContainer</item>
|
||||
<item name="colorOnSecondaryContainer">@color/md_theme_onSecondaryContainer</item>
|
||||
<item name="colorTertiary">@color/md_theme_tertiary</item>
|
||||
<item name="colorOnTertiary">@color/md_theme_onTertiary</item>
|
||||
<item name="colorTertiaryContainer">@color/md_theme_tertiaryContainer</item>
|
||||
<item name="colorOnTertiaryContainer">@color/md_theme_onTertiaryContainer</item>
|
||||
<item name="colorError">@color/md_theme_error</item>
|
||||
<item name="colorOnError">@color/md_theme_onError</item>
|
||||
<item name="colorErrorContainer">@color/md_theme_errorContainer</item>
|
||||
<item name="colorOnErrorContainer">@color/md_theme_onErrorContainer</item>
|
||||
<item name="android:colorBackground">@color/md_theme_background</item>
|
||||
<item name="colorOnBackground">@color/md_theme_onBackground</item>
|
||||
<item name="colorSurface">@color/md_theme_surface</item>
|
||||
<item name="colorOnSurface">@color/md_theme_onSurface</item>
|
||||
<item name="colorSurfaceVariant">@color/md_theme_surfaceVariant</item>
|
||||
<item name="colorOnSurfaceVariant">@color/md_theme_onSurfaceVariant</item>
|
||||
<item name="colorOutline">@color/md_theme_outline</item>
|
||||
<item name="colorOutlineVariant">@color/md_theme_outlineVariant</item>
|
||||
<item name="colorSurfaceInverse">@color/md_theme_inverseSurface</item>
|
||||
<item name="colorOnSurfaceInverse">@color/md_theme_inverseOnSurface</item>
|
||||
<item name="colorPrimaryInverse">@color/md_theme_inversePrimary</item>
|
||||
<item name="colorPrimaryFixed">@color/md_theme_primaryFixed</item>
|
||||
<item name="colorOnPrimaryFixed">@color/md_theme_onPrimaryFixed</item>
|
||||
<item name="colorPrimaryFixedDim">@color/md_theme_primaryFixedDim</item>
|
||||
<item name="colorOnPrimaryFixedVariant">@color/md_theme_onPrimaryFixedVariant</item>
|
||||
<item name="colorSecondaryFixed">@color/md_theme_secondaryFixed</item>
|
||||
<item name="colorOnSecondaryFixed">@color/md_theme_onSecondaryFixed</item>
|
||||
<item name="colorSecondaryFixedDim">@color/md_theme_secondaryFixedDim</item>
|
||||
<item name="colorOnSecondaryFixedVariant">@color/md_theme_onSecondaryFixedVariant</item>
|
||||
<item name="colorTertiaryFixed">@color/md_theme_tertiaryFixed</item>
|
||||
<item name="colorOnTertiaryFixed">@color/md_theme_onTertiaryFixed</item>
|
||||
<item name="colorTertiaryFixedDim">@color/md_theme_tertiaryFixedDim</item>
|
||||
<item name="colorOnTertiaryFixedVariant">@color/md_theme_onTertiaryFixedVariant</item>
|
||||
<item name="colorSurfaceDim">@color/md_theme_surfaceDim</item>
|
||||
<item name="colorSurfaceBright">@color/md_theme_surfaceBright</item>
|
||||
<item name="colorSurfaceContainerLowest">@color/md_theme_surfaceContainerLowest</item>
|
||||
<item name="colorSurfaceContainerLow">@color/md_theme_surfaceContainerLow</item>
|
||||
<item name="colorSurfaceContainer">@color/md_theme_surfaceContainer</item>
|
||||
<item name="colorSurfaceContainerHigh">@color/md_theme_surfaceContainerHigh</item>
|
||||
<item name="colorSurfaceContainerHighest">@color/md_theme_surfaceContainerHighest</item>
|
||||
</style>
|
||||
</resources>
|
Reference in New Issue
Block a user