Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
c0742cef5d | |||
6f4320b074 | |||
000f2ee655 |
17
.idea/deploymentTargetDropDown.xml
generated
17
.idea/deploymentTargetDropDown.xml
generated
@ -1,17 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="deploymentTargetDropDown">
|
|
||||||
<targetSelectedWithDropDown>
|
|
||||||
<Target>
|
|
||||||
<type value="QUICK_BOOT_TARGET" />
|
|
||||||
<deviceKey>
|
|
||||||
<Key>
|
|
||||||
<type value="VIRTUAL_DEVICE_PATH" />
|
|
||||||
<value value="$USER_HOME$/.android/avd/Pixel_2_API_24.avd" />
|
|
||||||
</Key>
|
|
||||||
</deviceKey>
|
|
||||||
</Target>
|
|
||||||
</targetSelectedWithDropDown>
|
|
||||||
<timeTargetWasSelectedWithDropDown value="2023-01-19T17:01:06.009496Z" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
2
.idea/gradle.xml
generated
2
.idea/gradle.xml
generated
@ -7,13 +7,13 @@
|
|||||||
<option name="testRunner" value="GRADLE" />
|
<option name="testRunner" value="GRADLE" />
|
||||||
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
<option name="gradleJvm" value="11" />
|
|
||||||
<option name="modules">
|
<option name="modules">
|
||||||
<set>
|
<set>
|
||||||
<option value="$PROJECT_DIR$" />
|
<option value="$PROJECT_DIR$" />
|
||||||
<option value="$PROJECT_DIR$/app" />
|
<option value="$PROJECT_DIR$/app" />
|
||||||
</set>
|
</set>
|
||||||
</option>
|
</option>
|
||||||
|
<option name="resolveModulePerSourceSet" value="false" />
|
||||||
</GradleProjectSettings>
|
</GradleProjectSettings>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
|
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@ -11,7 +11,7 @@
|
|||||||
</map>
|
</map>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectType">
|
<component name="ProjectType">
|
||||||
|
@ -5,7 +5,4 @@ It can also open links to userpages of Bookwyrm users and it can scan ISBN codes
|
|||||||
|
|
||||||
This application works on: Android 6 and above.
|
This application works on: Android 6 and above.
|
||||||
|
|
||||||
And if you want to know, I am [`@StoryDragon@wyrms.de`](https://wyrms.de/user/storydragon) on BookWyrm.
|
And if you want to know, I am `@StoryDragon@wyrms.de` on BookWyrm.
|
||||||
|
|
||||||
For the ISBN-scanning I use the library zxing-android-embedded.
|
|
||||||
The barcode icon that is added for instances that do not have ISBN-scanning by default comes from the Remix Icon project.
|
|
||||||
|
@ -3,14 +3,14 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdk 33
|
compileSdk 31
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "nl.privacydragon.bookwyrm"
|
applicationId "nl.privacydragon.bookwyrm"
|
||||||
minSdk 23
|
minSdk 23
|
||||||
targetSdk 33
|
targetSdk 31
|
||||||
versionCode 11
|
versionCode 7
|
||||||
versionName "1.3.4"
|
versionName "1.3.0"
|
||||||
|
|
||||||
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
||||||
}
|
}
|
||||||
@ -25,17 +25,16 @@ android {
|
|||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
sourceCompatibility JavaVersion.VERSION_1_8
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
targetCompatibility JavaVersion.VERSION_1_8
|
||||||
}
|
}
|
||||||
namespace 'nl.privacydragon.bookwyrm'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
implementation 'androidx.appcompat:appcompat:1.6.0'
|
implementation 'androidx.appcompat:appcompat:1.4.1'
|
||||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
|
||||||
testImplementation 'junit:junit:4.13.2'
|
testImplementation 'junit:junit:4.13.2'
|
||||||
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
|
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
|
||||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
|
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
|
||||||
implementation 'com.google.zxing:core:3.5.1'
|
implementation 'com.google.zxing:core:3.3.0'
|
||||||
implementation 'com.journeyapps:zxing-android-embedded:4.3.0@aar'
|
implementation 'com.journeyapps:zxing-android-embedded:4.3.0@aar'
|
||||||
//implementation 'com.github.yuriy-budiyev:code-scanner:2.1.2'
|
//implementation 'com.github.yuriy-budiyev:code-scanner:2.1.2'
|
||||||
|
|
||||||
|
BIN
app/release/Bookwyrm-v1.3.0.apk
Normal file
BIN
app/release/Bookwyrm-v1.3.0.apk
Normal file
Binary file not shown.
Binary file not shown.
@ -11,8 +11,8 @@
|
|||||||
"type": "SINGLE",
|
"type": "SINGLE",
|
||||||
"filters": [],
|
"filters": [],
|
||||||
"attributes": [],
|
"attributes": [],
|
||||||
"versionCode": 11,
|
"versionCode": 7,
|
||||||
"versionName": "1.3.4",
|
"versionName": "1.3.0",
|
||||||
"outputFile": "app-release.apk"
|
"outputFile": "app-release.apk"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
@ -1,13 +1,17 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
package="nl.privacydragon.bookwyrm">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.CAMERA" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
||||||
|
|
||||||
<uses-feature android:name="android.hardware.camera" />
|
<uses-feature android:name="android.hardware.camera" />
|
||||||
|
|
||||||
|
<meta-data
|
||||||
|
android:name="android.webkit.WebView.MetricsOptOut"
|
||||||
|
android:value="true" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="false"
|
android:allowBackup="false"
|
||||||
android:icon="@mipmap/ic_launcher_wyrm"
|
android:icon="@mipmap/ic_launcher_wyrm"
|
||||||
@ -15,9 +19,6 @@
|
|||||||
android:roundIcon="@mipmap/ic_launcher_wyrm_round"
|
android:roundIcon="@mipmap/ic_launcher_wyrm_round"
|
||||||
android:supportsRtl="true"
|
android:supportsRtl="true"
|
||||||
android:theme="@style/Theme.Bookwyrm">
|
android:theme="@style/Theme.Bookwyrm">
|
||||||
<meta-data
|
|
||||||
android:name="android.webkit.WebView.MetricsOptOut"
|
|
||||||
android:value="true" />
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".HandlerActivity"
|
android:name=".HandlerActivity"
|
||||||
android:exported="true">
|
android:exported="true">
|
||||||
@ -241,270 +242,6 @@
|
|||||||
android:pathPrefix="/user/"
|
android:pathPrefix="/user/"
|
||||||
android:scheme="https" />
|
android:scheme="https" />
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="bookwyrm.lond.com.br"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="good.franv.site"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="books.solarpunkanarchism.org"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="shoko.one"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="bookwyrm.mennisch.net"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="library.southfox.me"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="bookrastinating.com"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="library.cybre.city"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="books.storydragon.nl"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="reading.unbl.ink"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="velhaestante.com.br"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="bookwyrm.gatti.ninja"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="books.theunseen.city"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="lore.livellosegreto.it"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="books.jascha.wtf"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="bw.diaspodon.fr"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="bookwyrm.tilde.zone"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="ramblingreaders.org"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="libros.mistli.net"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="lectura.social"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="orreadi.com"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="bookishbook.club"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="bookwyrm.tech"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.VIEW" />
|
|
||||||
|
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
|
||||||
<category android:name="android.intent.category.BROWSABLE" />
|
|
||||||
|
|
||||||
<data
|
|
||||||
android:scheme="https"
|
|
||||||
android:host="comelibros.club"
|
|
||||||
android:pathPrefix="/user/" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name=".StartActivity"
|
android:name=".StartActivity"
|
||||||
|
@ -70,17 +70,14 @@ public class HandlerActivity extends AppCompatActivity {
|
|||||||
// End of auto-generated stuff
|
// End of auto-generated stuff
|
||||||
LoadIndicator = (ProgressBar) findViewById(R.id.progressBar3);
|
LoadIndicator = (ProgressBar) findViewById(R.id.progressBar3);
|
||||||
myWebView = (WebView) findViewById(R.id.webview);
|
myWebView = (WebView) findViewById(R.id.webview);
|
||||||
myWebView.setVisibility(View.GONE);
|
|
||||||
myWebView.getSettings().setJavaScriptEnabled(true);
|
myWebView.getSettings().setJavaScriptEnabled(true);
|
||||||
myWebView.getSettings().setDomStorageEnabled(true);
|
myWebView.getSettings().setDomStorageEnabled(true);
|
||||||
myWebView.addJavascriptInterface(new Object()
|
myWebView.addJavascriptInterface(new Object()
|
||||||
{
|
{
|
||||||
@JavascriptInterface // For API 17+
|
@JavascriptInterface // For API 17+
|
||||||
public void performClick(String what)
|
public void performClick()
|
||||||
{
|
{
|
||||||
if (!what.contains("[object Window]")) { //For some reason the function has to be called when the event listener is attached to the button. So, by adding in 'this', it is possible to make sure to only act when the thing that called the function is NOT the window, but the button.
|
|
||||||
ScanBarCode();
|
ScanBarCode();
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}, "scan");
|
}, "scan");
|
||||||
@ -177,40 +174,25 @@ public class HandlerActivity extends AppCompatActivity {
|
|||||||
myWebView.setWebViewClient(new HandlerActivity.MyWebViewClient() {
|
myWebView.setWebViewClient(new HandlerActivity.MyWebViewClient() {
|
||||||
public void onPageFinished(WebView view, String url) {
|
public void onPageFinished(WebView view, String url) {
|
||||||
LoadIndicator.setVisibility(View.GONE);
|
LoadIndicator.setVisibility(View.GONE);
|
||||||
myWebView.setVisibility(View.VISIBLE);
|
|
||||||
|
|
||||||
view.loadUrl("javascript:(function() { document.getElementById('id_password').value = '" + passw + "'; ;})()");
|
view.loadUrl("javascript:(function() { document.getElementById('id_password').value = '" + passw + "'; ;})()");
|
||||||
view.loadUrl("javascript:(function() { document.getElementById('id_localname').value = '" + name + "'; ;})()");
|
view.loadUrl("javascript:(function() { document.getElementById('id_localname').value = '" + name + "'; ;})()");
|
||||||
view.loadUrl("javascript:(function() { if (window.location.href == '" + finalToGoServer + "' && !/(review|generatednote|quotation|comment)/i.test(window.location.href)) { document.getElementsByName(\"login\")[0].submit();} ;})()");
|
view.loadUrl("javascript:(function() { if (window.location.href == '" + finalToGoServer + "' && !/(review|generatednote|quotation|comment)/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 (window.location.href == 'https://" + server + "') { document.getElementsByName(\"login\")[0].submit();} ;})()");
|
||||||
view.loadUrl("javascript:(function() { if (/(review|generatednote|quotation|comment)/i.test(window.location.href)) {" +
|
view.loadUrl("javascript:(function() { if (/(review|generatednote|quotation|comment)/i.test(window.location.href)) { document.getElementsByClassName(\"block\")[0].innerHTML = ` <a href=\"https://"+ server +"\" class=\"button\" data-back=\"\">\n" +
|
||||||
"blocks = document.getElementsByClassName('block');" +
|
|
||||||
"for (let element of blocks){" +
|
|
||||||
"if (element.localName == 'header') { " +
|
|
||||||
"element.innerHTML = ` <a href=\"https://"+ server +"\" class=\"button\" data-back=\"\">\n" +
|
|
||||||
" <span class=\"icon icon-arrow-left\" aria-hidden=\"true\"></span>\n" +
|
" <span class=\"icon icon-arrow-left\" aria-hidden=\"true\"></span>\n" +
|
||||||
" <span><b>Back to homeserver</b></span>\n" +
|
" <span><b>Back to homeserver</b></span>\n" +
|
||||||
"</a>`;" +
|
" </a>`;} ;})()");
|
||||||
"break;" +
|
|
||||||
"}" +
|
|
||||||
"}" +
|
|
||||||
"} ;})()");
|
|
||||||
view.loadUrl("javascript:(function() { " +
|
view.loadUrl("javascript:(function() { " +
|
||||||
"if (document.querySelectorAll(\"[data-modal-open]\")[0]) {" +
|
"const ISBN = document.createElement(\"p\");" +
|
||||||
"let ISBN_Button = document.querySelectorAll(\"[data-modal-open]\")[0];" +
|
"ISBN.innerHTML = '<br/>Click to scan ISBN';" +
|
||||||
"ISBN_Button.replaceWith(ISBN_Button.cloneNode(true));" +
|
"ISBN.addEventListener('click', () => {" +
|
||||||
"document.querySelectorAll(\"[data-modal-open]\")[0].addEventListener('click', () => {" +
|
" scan.performClick();" +
|
||||||
"scan.performClick(this);" +
|
|
||||||
"});" +
|
"});" +
|
||||||
"} else {" +
|
"const NewCenter = document.createElement(\"center\");" +
|
||||||
"let ISBN = document.createElement(\"div\");" +
|
"NewCenter.append(ISBN);" +
|
||||||
"ISBN.class = 'control';" +
|
"nav = document.body;" +
|
||||||
//"ISBN.class = 'button';" +
|
"nav.insertBefore(NewCenter, nav.children[0]);" +
|
||||||
//"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);" +
|
|
||||||
"}" +
|
|
||||||
";})()");
|
";})()");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -218,7 +200,7 @@ public class HandlerActivity extends AppCompatActivity {
|
|||||||
// Need to accept permissions to use the camera
|
// Need to accept permissions to use the camera
|
||||||
@Override
|
@Override
|
||||||
public void onPermissionRequest(PermissionRequest request) {
|
public void onPermissionRequest(PermissionRequest request) {
|
||||||
String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
|
String permission = Manifest.permission.CAMERA;
|
||||||
int grant = ContextCompat.checkSelfPermission(HandlerActivity.this, permission);
|
int grant = ContextCompat.checkSelfPermission(HandlerActivity.this, permission);
|
||||||
if (grant != PackageManager.PERMISSION_GRANTED) {
|
if (grant != PackageManager.PERMISSION_GRANTED) {
|
||||||
String[] permission_list = new String[1];
|
String[] permission_list = new String[1];
|
||||||
@ -228,7 +210,7 @@ public class HandlerActivity extends AppCompatActivity {
|
|||||||
request.grant(request.getResources());
|
request.grant(request.getResources());
|
||||||
final String[] requestedResources = request.getResources();
|
final String[] requestedResources = request.getResources();
|
||||||
for (String r : requestedResources) {
|
for (String r : requestedResources) {
|
||||||
if (r.equals(PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID)) {
|
if (r.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
|
||||||
request.grant(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE});
|
request.grant(new String[]{PermissionRequest.RESOURCE_VIDEO_CAPTURE});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -250,12 +232,13 @@ public class HandlerActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
IntentIntegrator intentIntegrator = new IntentIntegrator(HandlerActivity.this);
|
IntentIntegrator intentIntegrator = new IntentIntegrator(HandlerActivity.this);
|
||||||
intentIntegrator.setDesiredBarcodeFormats(intentIntegrator.EAN_13);
|
intentIntegrator.setDesiredBarcodeFormats(intentIntegrator.ALL_CODE_TYPES);
|
||||||
intentIntegrator.setBeepEnabled(true);
|
intentIntegrator.setBeepEnabled(true);
|
||||||
intentIntegrator.setCameraId(0);
|
intentIntegrator.setCameraId(0);
|
||||||
intentIntegrator.setPrompt("SCAN");
|
intentIntegrator.setPrompt("SCAN");
|
||||||
intentIntegrator.setBarcodeImageEnabled(false);
|
intentIntegrator.setBarcodeImageEnabled(false);
|
||||||
intentIntegrator.initiateScan();
|
intentIntegrator.initiateScan();
|
||||||
|
|
||||||
//return "blup";
|
//return "blup";
|
||||||
//return "bla";
|
//return "bla";
|
||||||
}
|
}
|
||||||
@ -268,14 +251,8 @@ public class HandlerActivity extends AppCompatActivity {
|
|||||||
Toast.makeText(this, "cancelled", Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, "cancelled", Toast.LENGTH_SHORT).show();
|
||||||
} else {
|
} else {
|
||||||
Log.d("MainActivity", "Scanned");
|
Log.d("MainActivity", "Scanned");
|
||||||
myWebView.loadUrl("Javascript:(function() {" +
|
myWebView.loadUrl("Javascript:(function() {document.getElementById('search_input').value = " + Result.getContents() + ";" +
|
||||||
"try {" +
|
"document.getElementsByTagName('form')[0].submit(); ;})()");
|
||||||
"document.getElementById('tour-search').value = " + Result.getContents() + ";" +
|
|
||||||
"} catch {" +
|
|
||||||
"document.getElementById('search_input').value = " + Result.getContents() + ";" +
|
|
||||||
"}" +
|
|
||||||
"document.getElementsByTagName('form')[0].submit();" +
|
|
||||||
";})()");
|
|
||||||
LoadIndicator.setVisibility(View.VISIBLE);
|
LoadIndicator.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
SharedPreferences sharedPref = MainActivity.this.getSharedPreferences(getString(R.string.server), Context.MODE_PRIVATE);
|
SharedPreferences sharedPref = MainActivity.this.getSharedPreferences(getString(R.string.server), Context.MODE_PRIVATE);
|
||||||
String defaultValue = "none";
|
String defaultValue = "none";
|
||||||
String server = sharedPref.getString(getString(R.string.server), defaultValue);
|
String server = sharedPref.getString(getString(R.string.server), defaultValue);
|
||||||
if (!"none".equals(server)) {
|
if (server != "none") {
|
||||||
startActivity(new Intent(MainActivity.this, nl.privacydragon.bookwyrm.StartActivity.class));
|
startActivity(new Intent(MainActivity.this, nl.privacydragon.bookwyrm.StartActivity.class));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -54,9 +54,8 @@ public class MainActivity extends AppCompatActivity {
|
|||||||
String ALLOWED_CHARACTERS ="0123456789qwertyuiopasdfghjklzxcvbnm!@#$%^&*()_+=][{}";
|
String ALLOWED_CHARACTERS ="0123456789qwertyuiopasdfghjklzxcvbnm!@#$%^&*()_+=][{}";
|
||||||
final Random random=new Random();
|
final Random random=new Random();
|
||||||
final StringBuilder sb=new StringBuilder(12);
|
final StringBuilder sb=new StringBuilder(12);
|
||||||
for(int i = 0; i< 12; ++i) {
|
for(int i = 0; i< 12; ++i)
|
||||||
sb.append(ALLOWED_CHARACTERS.charAt(random.nextInt(ALLOWED_CHARACTERS.length())));
|
sb.append(ALLOWED_CHARACTERS.charAt(random.nextInt(ALLOWED_CHARACTERS.length())));
|
||||||
}
|
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,16 +54,13 @@ public class StartActivity extends AppCompatActivity {
|
|||||||
setContentView(R.layout.activity_start);
|
setContentView(R.layout.activity_start);
|
||||||
LoadIndicator = (ProgressBar) findViewById(R.id.progressBar3);
|
LoadIndicator = (ProgressBar) findViewById(R.id.progressBar3);
|
||||||
myWebView = (WebView) findViewById(R.id.webview);
|
myWebView = (WebView) findViewById(R.id.webview);
|
||||||
myWebView.setVisibility(View.GONE);
|
|
||||||
myWebView.getSettings().setJavaScriptEnabled(true);
|
myWebView.getSettings().setJavaScriptEnabled(true);
|
||||||
myWebView.addJavascriptInterface(new Object()
|
myWebView.addJavascriptInterface(new Object()
|
||||||
{
|
{
|
||||||
@JavascriptInterface // For API 17+
|
@JavascriptInterface // For API 17+
|
||||||
public void performClick(String what)
|
public void performClick()
|
||||||
{
|
{
|
||||||
if (!what.contains("[object Window]")) { //For some reason the function has to be called when the event listener is attached to the button. So, by adding in 'this', it is possible to make sure to only act when the thing that called the function is NOT the window, but the button.
|
|
||||||
ScanBarCode();
|
ScanBarCode();
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}, "scan");
|
}, "scan");
|
||||||
@ -88,35 +85,48 @@ public class StartActivity extends AppCompatActivity {
|
|||||||
//Then, load it. or something. To make sure that it can be used.
|
//Then, load it. or something. To make sure that it can be used.
|
||||||
try {
|
try {
|
||||||
keyStore.load(null);
|
keyStore.load(null);
|
||||||
} catch (CertificateException | IOException | NoSuchAlgorithmException e) {
|
} catch (CertificateException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
//Next, retrieve the key to be used for the decryption.
|
//Next, retrieve the key to be used for the decryption.
|
||||||
Key DragonLikeKey = null;
|
Key DragonLikeKey = null;
|
||||||
try {
|
try {
|
||||||
DragonLikeKey = keyStore.getKey("BookWyrm", null);
|
DragonLikeKey = keyStore.getKey("BookWyrm", null);
|
||||||
} catch (KeyStoreException | NoSuchAlgorithmException | UnrecoverableKeyException e) {
|
} catch (KeyStoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (UnrecoverableKeyException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
//Do something with getting the/a cipher or something.
|
//Do something with getting the/a cipher or something.
|
||||||
Cipher c = null;
|
Cipher c = null;
|
||||||
try {
|
try {
|
||||||
c = Cipher.getInstance("AES/GCM/NoPadding");
|
c = Cipher.getInstance("AES/GCM/NoPadding");
|
||||||
} catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (NoSuchPaddingException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
//And then initiating the cipher, so it can be used.
|
//And then initiating the cipher, so it can be used.
|
||||||
try {
|
try {
|
||||||
assert c != null;
|
|
||||||
c.init(Cipher.DECRYPT_MODE, DragonLikeKey, new GCMParameterSpec(128, codeMagic.getBytes()));
|
c.init(Cipher.DECRYPT_MODE, DragonLikeKey, new GCMParameterSpec(128, codeMagic.getBytes()));
|
||||||
} catch (InvalidAlgorithmParameterException | InvalidKeyException e) {
|
} catch (InvalidAlgorithmParameterException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (InvalidKeyException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
//Decrypt the password!
|
//Decrypt the password!
|
||||||
byte[] truePass = null;
|
byte[] truePass = null;
|
||||||
try {
|
try {
|
||||||
truePass = c.doFinal(Base64.decode(pass, Base64.DEFAULT));
|
truePass = c.doFinal(Base64.decode(pass, Base64.DEFAULT));
|
||||||
} catch (BadPaddingException | IllegalBlockSizeException e) {
|
} catch (BadPaddingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IllegalBlockSizeException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
//Convert the decrypted password back to a string.
|
//Convert the decrypted password back to a string.
|
||||||
@ -126,28 +136,21 @@ public class StartActivity extends AppCompatActivity {
|
|||||||
myWebView.setWebViewClient(new MyWebViewClient(){
|
myWebView.setWebViewClient(new MyWebViewClient(){
|
||||||
public void onPageFinished(WebView view, String url) {
|
public void onPageFinished(WebView view, String url) {
|
||||||
LoadIndicator.setVisibility(View.GONE);
|
LoadIndicator.setVisibility(View.GONE);
|
||||||
myWebView.setVisibility(View.VISIBLE);
|
|
||||||
|
|
||||||
view.loadUrl("javascript:(function() { document.getElementById('id_password_confirm').value = '" + passw + "'; ;})()");
|
view.loadUrl("javascript:(function() { document.getElementById('id_password_confirm').value = '" + passw + "'; ;})()");
|
||||||
view.loadUrl("javascript:(function() { document.getElementById('id_localname_confirm').value = '" + name + "'; ;})()");
|
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.getElementsByName(\"login-confirm\")[0].submit();} ;})()");
|
||||||
view.loadUrl("javascript:(function() { " +
|
view.loadUrl("javascript:(function() { " +
|
||||||
"if (document.querySelectorAll(\"[data-modal-open]\")[0]) {" +
|
"const ISBN = document.createElement(\"p\");" +
|
||||||
"let ISBN_Button = document.querySelectorAll(\"[data-modal-open]\")[0];" +
|
"ISBN.innerHTML = '<br/>Click to scan ISBN';" +
|
||||||
"ISBN_Button.replaceWith(ISBN_Button.cloneNode(true));" +
|
"ISBN.addEventListener('click', () => {" +
|
||||||
"document.querySelectorAll(\"[data-modal-open]\")[0].addEventListener('click', () => {" +
|
" scan.performClick();" +
|
||||||
"scan.performClick(this);" +
|
|
||||||
"});" +
|
"});" +
|
||||||
"} else {" +
|
"const NewCenter = document.createElement(\"center\");" +
|
||||||
"let ISBN = document.createElement(\"div\");" +
|
"NewCenter.append(ISBN);" +
|
||||||
"ISBN.class = 'control';" +
|
"nav = document.body;" +
|
||||||
//"ISBN.class = 'button';" +
|
"nav.insertBefore(NewCenter, nav.children[0]);" +
|
||||||
//"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);" +
|
|
||||||
"}" +
|
|
||||||
";})()"); //This lines replace the ISBN-scan button event listener with one that points to the on-device scanning implementation, if it is available on the instance. If not, the button is added.
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -164,7 +167,7 @@ public class StartActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
IntentIntegrator intentIntegrator = new IntentIntegrator(StartActivity.this);
|
IntentIntegrator intentIntegrator = new IntentIntegrator(StartActivity.this);
|
||||||
intentIntegrator.setDesiredBarcodeFormats(IntentIntegrator.EAN_13);
|
intentIntegrator.setDesiredBarcodeFormats(intentIntegrator.ALL_CODE_TYPES);
|
||||||
intentIntegrator.setBeepEnabled(false);
|
intentIntegrator.setBeepEnabled(false);
|
||||||
intentIntegrator.setCameraId(0);
|
intentIntegrator.setCameraId(0);
|
||||||
intentIntegrator.setPrompt("SCAN ISBN");
|
intentIntegrator.setPrompt("SCAN ISBN");
|
||||||
@ -183,14 +186,8 @@ public class StartActivity extends AppCompatActivity {
|
|||||||
Toast.makeText(this, "cancelled", Toast.LENGTH_SHORT).show();
|
Toast.makeText(this, "cancelled", Toast.LENGTH_SHORT).show();
|
||||||
} else {
|
} else {
|
||||||
Log.d("MainActivity", "Scanned");
|
Log.d("MainActivity", "Scanned");
|
||||||
myWebView.loadUrl("Javascript:(function() {" +
|
myWebView.loadUrl("Javascript:(function() {document.getElementById('search_input').value = " + Result.getContents() + ";" +
|
||||||
"try {" +
|
"document.getElementsByTagName('form')[0].submit(); ;})()");
|
||||||
"document.getElementById('tour-search').value = " + Result.getContents() + ";" +
|
|
||||||
"} catch {" +
|
|
||||||
"document.getElementById('search_input').value = " + Result.getContents() + ";" +
|
|
||||||
"}" +
|
|
||||||
"document.getElementsByTagName('form')[0].submit();" +
|
|
||||||
";})()");
|
|
||||||
LoadIndicator.setVisibility(View.VISIBLE);
|
LoadIndicator.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@
|
|||||||
android:id="@+id/Instance"
|
android:id="@+id/Instance"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="5dp"
|
||||||
android:layout_marginEnd="1dp"
|
android:layout_marginEnd="1dp"
|
||||||
android:layout_marginBottom="262dp"
|
android:layout_marginBottom="262dp"
|
||||||
android:hint="bookwyrm.social"
|
android:hint="bookwyrm.social"
|
||||||
@ -41,7 +41,7 @@
|
|||||||
android:id="@+id/Username"
|
android:id="@+id/Username"
|
||||||
android:layout_width="409dp"
|
android:layout_width="409dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="1dp"
|
||||||
android:layout_marginEnd="1dp"
|
android:layout_marginEnd="1dp"
|
||||||
android:layout_marginBottom="284dp"
|
android:layout_marginBottom="284dp"
|
||||||
android:hint="Username"
|
android:hint="Username"
|
||||||
@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
android:id="@+id/Password"
|
android:id="@+id/Password"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="409dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
android:layout_marginEnd="1dp"
|
android:layout_marginEnd="1dp"
|
||||||
@ -89,10 +89,10 @@
|
|||||||
android:id="@+id/textView2"
|
android:id="@+id/textView2"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="16dp"
|
||||||
android:layout_marginTop="76dp"
|
android:layout_marginTop="76dp"
|
||||||
android:layout_marginEnd="185dp"
|
android:layout_marginEnd="185dp"
|
||||||
android:layout_marginBottom="10dp"
|
android:layout_marginBottom="35dp"
|
||||||
android:text="Instance. WITHOUT the https part"
|
android:text="Instance. WITHOUT the https part"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/Instance"
|
app:layout_constraintBottom_toTopOf="@+id/Instance"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
@ -107,7 +107,7 @@
|
|||||||
android:layout_marginStart="10dp"
|
android:layout_marginStart="10dp"
|
||||||
android:layout_marginTop="24dp"
|
android:layout_marginTop="24dp"
|
||||||
android:layout_marginEnd="41dp"
|
android:layout_marginEnd="41dp"
|
||||||
android:layout_marginBottom="10dp"
|
android:layout_marginBottom="35dp"
|
||||||
android:text="Username"
|
android:text="Username"
|
||||||
app:layout_constraintBottom_toTopOf="@+id/Username"
|
app:layout_constraintBottom_toTopOf="@+id/Username"
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
@ -115,21 +115,6 @@
|
|||||||
app:layout_constraintStart_toStartOf="parent"
|
app:layout_constraintStart_toStartOf="parent"
|
||||||
app:layout_constraintTop_toBottomOf="@+id/Instance" />
|
app:layout_constraintTop_toBottomOf="@+id/Instance" />
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/textView6"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginStart="10dp"
|
|
||||||
android:layout_marginTop="24dp"
|
|
||||||
android:layout_marginEnd="340dp"
|
|
||||||
android:layout_marginBottom="10dp"
|
|
||||||
android:text="Password"
|
|
||||||
app:layout_constraintBottom_toTopOf="@+id/Password"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.0"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/Username" />
|
|
||||||
|
|
||||||
<Button
|
<Button
|
||||||
android:id="@+id/button"
|
android:id="@+id/button"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
<ProgressBar
|
<ProgressBar
|
||||||
android:id="@+id/progressBar3"
|
android:id="@+id/progressBar3"
|
||||||
style="?android:attr/progressBarStyleHorizontal"
|
style="?android:attr/progressBarStyleHorizontal"
|
||||||
android:indeterminate="true"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="715dp"
|
android:layout_marginBottom="715dp"
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||||
<!-- Base application theme. -->
|
<!-- Base application theme. -->
|
||||||
<style name="Theme.Bookwyrm" parent="Theme.AppCompat">
|
<style name="Theme.Bookwyrm" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||||
<!-- Primary brand color. -->
|
<!-- Primary brand color. -->
|
||||||
<item name="colorPrimary">#3298DC</item>
|
<item name="colorPrimary">#3298DC</item>
|
||||||
<item name="colorPrimaryDark">#1B557C</item>
|
<item name="colorPrimaryDark">#1B557C</item>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<resources xmlns:tools="http://schemas.android.com/tools">
|
<resources xmlns:tools="http://schemas.android.com/tools">
|
||||||
<!-- Base application theme. -->
|
<!-- Base application theme. -->
|
||||||
<style name="Theme.Bookwyrm" parent="Theme.AppCompat">
|
<style name="Theme.Bookwyrm" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||||
<!-- Primary brand color. -->
|
<!-- Primary brand color. -->
|
||||||
<item name="colorPrimary">#3298DC</item>
|
<item name="colorPrimary">#3298DC</item>
|
||||||
<item name="colorPrimaryDark">#1B557C</item>
|
<item name="colorPrimaryDark">#1B557C</item>
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
* Fixed a bug with the barcode scanning. Now you can scan barcodes again.
|
|
||||||
* Dependencies have been updated to newest versions.
|
|
||||||
* More Bookwyrm instances have been added.
|
|
@ -1,5 +0,0 @@
|
|||||||
The same as release 1.3.3, but not the one bug is actually fixed for real...
|
|
||||||
* Fixed a bug with the barcode scanning. Now you can scan barcodes again.
|
|
||||||
* Dependencies have been updated to newest versions.
|
|
||||||
* More Bookwyrm instances have been added.
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
|||||||
* Improved the loading bar.
|
|
||||||
* The ISBN-scanning feature now works by simply clicking the ISBN button that is used by the instances that have scanning already available.
|
|
||||||
* For instances that do not support the scanning server-side, there is now instead of the text a button for ISBN-scanning, similar to the standard one.
|
|
||||||
* More bookwyrm instances added to the ones that can be opened in the app.
|
|
||||||
* Small bug-fix, so now only ISBN-codes (And other EAN-13 codes) will be scanned.
|
|
||||||
* Another bug-fix. The modified back button works again.
|
|
@ -1,2 +0,0 @@
|
|||||||
* Changed the initial screen to dark mode.
|
|
||||||
* The login screen things are now better aligned.
|
|
Binary file not shown.
Before Width: | Height: | Size: 318 KiB After Width: | Height: | Size: 329 KiB |
Binary file not shown.
Before Width: | Height: | Size: 203 KiB After Width: | Height: | Size: 205 KiB |
Binary file not shown.
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 46 KiB |
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
|||||||
#Mon Feb 14 18:09:26 CET 2022
|
#Mon Feb 14 18:09:26 CET 2022
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
Reference in New Issue
Block a user