update to 1.3.0

This commit is contained in:
Privacy_Dragon 2022-04-09 23:02:39 +02:00
parent 6be6081f27
commit be020bdfcd
20 changed files with 319 additions and 67 deletions

2
.idea/misc.xml generated
View File

@ -3,8 +3,10 @@
<component name="DesignSurface">
<option name="filePathToZoomLevelMap">
<map>
<entry key="../../../../layout/custom_preview.xml" value="0.3" />
<entry key="app/src/main/res/drawable-v24/ic_launcher_foreground.xml" value="0.2595" />
<entry key="app/src/main/res/layout/activity_main.xml" value="0.33605072463768115" />
<entry key="app/src/main/res/layout/activity_scan.xml" value="0.271875" />
<entry key="app/src/main/res/layout/activity_start.xml" value="0.33605072463768115" />
</map>
</option>

View File

@ -9,10 +9,10 @@ android {
applicationId "nl.privacydragon.bookwyrm"
minSdk 23
targetSdk 31
versionCode 6
versionName "1.2.3"
versionCode 7
versionName "1.3.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
}
buildTypes {
@ -29,9 +29,14 @@ android {
dependencies {
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:2.0.4'
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation 'com.google.zxing:core:3.3.0'
implementation 'com.journeyapps:zxing-android-embedded:4.3.0@aar'
//implementation 'com.github.yuriy-budiyev:code-scanner:2.1.2'
}

Binary file not shown.

Binary file not shown.

View File

@ -11,8 +11,8 @@
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 6,
"versionName": "1.2.3",
"versionCode": 7,
"versionName": "1.3.0",
"outputFile": "app-release.apk"
}
],

View File

@ -1,8 +1,8 @@
package nl.privacydragon.bookwyrm;
import android.content.Context;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;
import androidx.test.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;

View File

@ -4,6 +4,13 @@
package="nl.privacydragon.bookwyrm">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<meta-data
android:name="android.webkit.WebView.MetricsOptOut"
android:value="true" />
<application
android:allowBackup="false"
@ -15,7 +22,6 @@
<activity
android:name=".HandlerActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -23,9 +29,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="wyrms.de"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -34,9 +40,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="bookwyrm.social"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -45,9 +51,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="book.dansmonorage.blue"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -56,9 +62,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="yyyyy.club"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -67,9 +73,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="books.mxhdr.net"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -78,9 +84,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="ziurkes.group.lt"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -89,9 +95,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="books.solarpunk.moe"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -100,9 +106,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="reading.taks.garden"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -111,9 +117,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="bookwyrm.spaceling.sh"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -122,9 +128,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="lire.boitam.eu"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -133,9 +139,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="kirja.casa"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -144,9 +150,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="books.badwolfbay.games"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -155,9 +161,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="books.unexist.dev"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -166,9 +172,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="bookwyrm.cincodenada.com"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -177,9 +183,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="books.underscore.world"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -188,9 +194,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="bookwyrm.tardis.pw"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -199,9 +205,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="tankie.ml"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -210,9 +216,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="masstoc.io"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -221,9 +227,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="books.mennisch.net"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@ -232,9 +238,9 @@
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="bookwyrm.pt"
android:pathPrefix="/user/" />
android:pathPrefix="/user/"
android:scheme="https" />
</intent-filter>
</activity>
<activity

View File

@ -1,17 +1,41 @@
package nl.privacydragon.bookwyrm;
import static androidx.core.content.ContextCompat.startActivity;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Build;
//import android.support.v4.app.ActivityCompat;
//import android.support.v4.content.ContextCompat;
//import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.ConsoleMessage;
import android.webkit.JavascriptInterface;
import android.webkit.PermissionRequest;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@ -33,6 +57,7 @@ import javax.crypto.spec.GCMParameterSpec;
public class HandlerActivity extends AppCompatActivity {
WebView myWebView;
ProgressBar LoadIndicator;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
@ -43,8 +68,20 @@ public class HandlerActivity extends AppCompatActivity {
String appLinkAction = appLinkIntent.getAction();
Uri appLinkData = appLinkIntent.getData();
// End of auto-generated stuff
LoadIndicator = (ProgressBar) findViewById(R.id.progressBar3);
myWebView = (WebView) findViewById(R.id.webview);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setDomStorageEnabled(true);
myWebView.addJavascriptInterface(new Object()
{
@JavascriptInterface // For API 17+
public void performClick()
{
ScanBarCode();
}
}, "scan");
//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.
String defaultValue = "none";
SharedPreferences sharedPref = HandlerActivity.this.getSharedPreferences(getString(R.string.server), Context.MODE_PRIVATE);
@ -136,6 +173,7 @@ public class HandlerActivity extends AppCompatActivity {
String finalToGoServer = toGoServer;
myWebView.setWebViewClient(new HandlerActivity.MyWebViewClient() {
public void onPageFinished(WebView view, String url) {
LoadIndicator.setVisibility(View.GONE);
view.loadUrl("javascript:(function() { document.getElementById('id_password').value = '" + passw + "'; ;})()");
view.loadUrl("javascript:(function() { document.getElementById('id_localname').value = '" + name + "'; ;})()");
@ -145,12 +183,99 @@ public class HandlerActivity extends AppCompatActivity {
" <span class=\"icon icon-arrow-left\" aria-hidden=\"true\"></span>\n" +
" <span><b>Back to homeserver</b></span>\n" +
" </a>`;} ;})()");
view.loadUrl("javascript:(function() { " +
"const ISBN = document.createElement(\"p\");" +
"ISBN.innerHTML = '<br/>Click to scan ISBN';" +
"ISBN.addEventListener('click', () => {" +
" scan.performClick();" +
"});" +
"const NewCenter = document.createElement(\"center\");" +
"NewCenter.append(ISBN);" +
"nav = document.body;" +
"nav.insertBefore(NewCenter, nav.children[0]);" +
";})()");
}
});
/*myWebView.setWebChromeClient(new WebChromeClient(){
// Need to accept permissions to use the camera
@Override
public void onPermissionRequest(PermissionRequest request) {
String permission = Manifest.permission.CAMERA;
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_VIDEO_CAPTURE)) {
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("https://serratus.github.io/quaggaJS/examples/live_w_locator.html");
myWebView.loadUrl(toGoServer);
}
public void ScanBarCode() {
String permission = Manifest.permission.CAMERA;
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);
}
IntentIntegrator intentIntegrator = new IntentIntegrator(HandlerActivity.this);
intentIntegrator.setDesiredBarcodeFormats(intentIntegrator.ALL_CODE_TYPES);
intentIntegrator.setBeepEnabled(true);
intentIntegrator.setCameraId(0);
intentIntegrator.setPrompt("SCAN");
intentIntegrator.setBarcodeImageEnabled(false);
intentIntegrator.initiateScan();
//return "blup";
//return "bla";
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult Result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (Result != null) {
if (Result.getContents() == null) {
Toast.makeText(this, "cancelled", Toast.LENGTH_SHORT).show();
} else {
Log.d("MainActivity", "Scanned");
myWebView.loadUrl("Javascript:(function() {document.getElementById('search_input').value = " + Result.getContents() + ";" +
"document.getElementsByTagName('form')[0].submit(); ;})()");
LoadIndicator.setVisibility(View.VISIBLE);
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
/*public class WebAppInterface {
Context mContext;
//Instantiate the interface and set the context
WebAppInterface(Context c) {
mContext = c;
}
// Show a toast from the web page
@JavascriptInterface
public void showToast(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}*/
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Check if the key event was the Back button and if there's history
@ -187,5 +312,11 @@ public class HandlerActivity extends AppCompatActivity {
startActivity(intent);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
LoadIndicator.setVisibility(View.VISIBLE);
}
}
}

View File

@ -6,13 +6,15 @@ import android.content.SharedPreferences;
import android.graphics.Color;
import android.security.keystore.KeyGenParameterSpec;
import android.security.keystore.KeyProperties;
import android.support.v7.app.AppCompatActivity;
//import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Base64;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.io.IOException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;

View File

@ -1,16 +1,31 @@
package nl.privacydragon.bookwyrm;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
//import android.support.v7.app.AppCompatActivity;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Base64;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@ -31,13 +46,24 @@ import javax.crypto.spec.GCMParameterSpec;
public class StartActivity extends AppCompatActivity {
WebView myWebView;
ProgressBar LoadIndicator;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
LoadIndicator = (ProgressBar) findViewById(R.id.progressBar3);
myWebView = (WebView) findViewById(R.id.webview);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.addJavascriptInterface(new Object()
{
@JavascriptInterface // For API 17+
public void performClick()
{
ScanBarCode();
}
}, "scan");
//The user credentials are stored in the shared preferences, so first they have to be read from there.
String defaultValue = "none";
SharedPreferences sharedPref = StartActivity.this.getSharedPreferences(getString(R.string.server), Context.MODE_PRIVATE);
@ -109,16 +135,67 @@ public class StartActivity extends AppCompatActivity {
//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.
myWebView.setWebViewClient(new MyWebViewClient(){
public void onPageFinished(WebView view, String url) {
LoadIndicator.setVisibility(View.GONE);
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() { if (window.location.href == 'https://" + server + "/login') { document.getElementsByName(\"login-confirm\")[0].submit();} ;})()");
view.loadUrl("javascript:(function() { " +
"const ISBN = document.createElement(\"p\");" +
"ISBN.innerHTML = '<br/>Click to scan ISBN';" +
"ISBN.addEventListener('click', () => {" +
" scan.performClick();" +
"});" +
"const NewCenter = document.createElement(\"center\");" +
"NewCenter.append(ISBN);" +
"nav = document.body;" +
"nav.insertBefore(NewCenter, nav.children[0]);" +
";})()");
}
});
//Here, load the login page of the server. That actually does all that is needed.
myWebView.loadUrl("https://" + server + "/login");
}
public void ScanBarCode() {
String permission = Manifest.permission.CAMERA;
int grant = ContextCompat.checkSelfPermission(StartActivity.this, permission);
if (grant != PackageManager.PERMISSION_GRANTED) {
String[] permission_list = new String[1];
permission_list[0] = permission;
ActivityCompat.requestPermissions(StartActivity.this, permission_list, 1);
}
IntentIntegrator intentIntegrator = new IntentIntegrator(StartActivity.this);
intentIntegrator.setDesiredBarcodeFormats(intentIntegrator.ALL_CODE_TYPES);
intentIntegrator.setBeepEnabled(false);
intentIntegrator.setCameraId(0);
intentIntegrator.setPrompt("SCAN ISBN");
intentIntegrator.setBarcodeImageEnabled(false);
intentIntegrator.initiateScan();
//return "blup";
//return "bla";
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
IntentResult Result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
if (Result != null) {
if (Result.getContents() == null) {
Toast.makeText(this, "cancelled", Toast.LENGTH_SHORT).show();
} else {
Log.d("MainActivity", "Scanned");
myWebView.loadUrl("Javascript:(function() {document.getElementById('search_input').value = " + Result.getContents() + ";" +
"document.getElementsByTagName('form')[0].submit(); ;})()");
LoadIndicator.setVisibility(View.VISIBLE);
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Check if the key event was the Back button and if there's history
@ -147,5 +224,10 @@ public class StartActivity extends AppCompatActivity {
startActivity(intent);
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
LoadIndicator.setVisibility(View.VISIBLE);
}
}
}

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
@ -147,4 +147,4 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button" />
</android.support.constraint.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,16 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".StartActivity">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
android:layout_height="match_parent" />
<ProgressBar
android:id="@+id/progressBar3"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="715dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,5 @@
* Added a loading bar
* You can now scan ISBN's, on any instance!
More technical change:
* Mitigated the project to use Androidx libraries, for that is necessary for the ISBN scanning...

View File

@ -1,3 +1,8 @@
This is an Android client for BookWyrm.
It is just BookWyrm put into a webview element, nothing special.
This is an Android client for BookWyrm a federated social network for tracking your reading, talking about books, writing reviews, and discovering what to read next. It is just BookWyrm put into a webview element, nothing special but it adds some convenience on top:
* bookwyrm links can be made to open with the app (e.g. clicking on the link to someone's userprofile will open that from your own bookwyrm instance)
* thanks to that, you can immediately follow them easily if you want.
* it lets you easily return to your own home timeline when viewing something like posts, on another bookwyrm instance, because the 'back' button is then modified for that.
* You can also search for books by scanning the ISBN, no matter what instance of Bookwyrm you use.
<b>This application is <u>not</u> an official client!</b> (An official client does not exist yet, as far as I know)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 302 KiB

After

Width:  |  Height:  |  Size: 329 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 204 KiB

After

Width:  |  Height:  |  Size: 205 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

@ -14,4 +14,7 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true
android.nonTransitiveRClass=true
android.useAndroidX=true
android.enableJetifier=true

Binary file not shown.

View File

@ -10,7 +10,9 @@ dependencyResolutionManagement {
repositories {
google()
mavenCentral()
//maven { url 'https://jitpack.io' }
}
}
rootProject.name = "Bookwyrm"
include ':app'
include ':app'