Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Rebecca Bee
irdest
Commits
5229d933
Commit
5229d933
authored
Jun 11, 2021
by
Ayush Shrivastava
Committed by
Katharina Fey
Jun 18, 2021
Browse files
android: refactor android codebase from qaul to irdest
parent
8a692923
Changes
40
Hide whitespace changes
Inline
Side-by-side
clients/android/README.md
View file @
5229d933
#
qaul
droid
#
irdest-
droid
Arguably the primary client of the project exists on Android. Being
able to create mesh networks with people around you, without needing
...
...
@@ -7,7 +7,7 @@ have phones, and that creating small scale networks with phones around
you, without having to rely to SIM cards, cell towers or pre-setup
WiFi networks can enable people to avoid censorship and surveillance.
At the moment the
qaul
android client is a prototype!
At the moment the
[
Irdest
](
https://irde.st
)
android client is a prototype!
## Things to do
...
...
@@ -26,7 +26,7 @@ really work. It crashes when trying to open one of the custom views.
### Chat view and chat list view
One of the main abilities of the
qaul
app is a chat. There are
One of the main abilities of the
[
Irdest
](
https://irde.st
)
app is a chat. There are
already fragment layout XML files for the actual chat view, and the
chat list view, but none of that is working.
...
...
@@ -51,7 +51,7 @@ maybe with sliding side tabs? Maybe something else works better.
### Filesharing view
The filesharing view shows all advertised and local files that are known by
qaul
. Files that are only advertised should have a "get" button,
[
Irdest
](
https://irde.st
)
. Files that are only advertised should have a "get" button,
and files that are local should be able to be swiped away.
The list should be filterable by "files by friends"
...
...
@@ -65,4 +65,4 @@ see if they are in range, and can transfer "Frames", which are opaque and
encrypted shards of data.
Currently the WiFi Direct code starts looking for peers, but never finds
any, and also there's no service to actually use this to transfer any data.
\ No newline at end of file
any, and also there's no service to actually use this to transfer any data.
clients/android/app/build.gradle
View file @
5229d933
...
...
@@ -10,7 +10,7 @@ android {
compileSdkVersion
29
buildToolsVersion
"29.0.3"
defaultConfig
{
applicationId
"
net.qaul
.app"
applicationId
"
irde.st
.app"
minSdkVersion
21
targetSdkVersion
29
versionCode
1
...
...
@@ -52,7 +52,7 @@ dependencies {
testImplementation
'junit:junit:4.12'
androidTestImplementation
'androidx.test:runner:1.2.0'
androidTestImplementation
'androidx.test.espresso:espresso-core:3.2.0'
co
mp
i
le
"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
i
mple
mentation
"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation
'com.mikhaellopez:circularimageview:4.2.0'
}
...
...
clients/android/app/src/main/AndroidManifest.xml
View file @
5229d933
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android=
"http://schemas.android.com/apk/res/android"
package=
"
net.qaul
.app"
>
package=
"
st.irde
.app"
>
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
...
...
@@ -23,10 +23,10 @@
android:supportsRtl=
"true"
android:theme=
"@style/AppTheme"
>
<activity
android:name=
".ui.SettingsActivity"
android:label=
"@string/title_activity_settings"
></activity
>
android:name=
"
st.irde.app
.ui.SettingsActivity"
android:label=
"@string/title_activity_settings"
/
>
<activity
android:name=
".LoginActivity"
android:name=
"
st.irde.app
.LoginActivity"
android:windowSoftInputMode=
"adjustPan"
>
<intent-filter>
<action
android:name=
"android.intent.action.MAIN"
/>
...
...
@@ -35,8 +35,8 @@
</intent-filter>
</activity>
<activity
android:name=
".MainActivity"
android:name=
"
st.irde.app
.MainActivity"
android:windowSoftInputMode=
"adjustPan"
/>
</application>
</manifest>
\ No newline at end of file
</manifest>
clients/android/app/src/main/java/net/qaul/app/ui/chat/ChatStartFragment.kt
deleted
100644 → 0
View file @
8a692923
package
net.qaul.app.ui.chat
clients/android/app/src/main/java/
net/qaul
/app/LoginActivity.kt
→
clients/android/app/src/main/java/
st/irde
/app/LoginActivity.kt
View file @
5229d933
package
net.qaul
.app
package
st.irde
.app
import
android.R.layout.simple_spinner_dropdown_item
import
android.R.layout.simple_spinner_item
...
...
@@ -9,12 +9,10 @@ import android.util.Log
import
android.widget.*
import
androidx.appcompat.app.AppCompatActivity
import
androidx.fragment.app.FragmentTransaction
import
net.qaul.app.ffi.NativeQaul
import
net.qaul.app.ffi.models.Id
import
net.qaul.app.ffi.models.UserProfile
import
net.qaul.app.net.WifiP2PService
import
net.qaul.app.ui.UserCreateFragment
import
net.qaul.app.util.AppState
import
st.irde.app.ffi.models.UserProfile
import
st.irde.app.net.WifiP2PService
import
st.irde.app.ui.UserCreateFragment
import
st.irde.app.util.AppState
import
android.widget.ArrayAdapter
as
ArrayAdapter
...
...
@@ -22,8 +20,8 @@ import android.widget.ArrayAdapter as ArrayAdapter
class
LoginActivity
:
AppCompatActivity
()
{
companion
object
{
init
{
// The "android-support" crate creates a dynamic library called "lib
qaul
droid"
// which we can include here simply via "
qaul
droid" because it's being put
// The "android-support" crate creates a dynamic library called "lib
irdest
droid"
// which we can include here simply via "
irdest
droid" because it's being put
// into the library search path via ~ m a g i c ~
System
.
loadLibrary
(
"irdestcore"
)
}
...
...
clients/android/app/src/main/java/
net/qaul
/app/MainActivity.kt
→
clients/android/app/src/main/java/
st/irde
/app/MainActivity.kt
View file @
5229d933
package
net.qaul
.app
package
st.irde
.app
import
android.os.Bundle
import
com.google.android.material.bottomnavigation.BottomNavigationView
...
...
clients/android/app/src/main/java/
net/qaul
/app/ffi/Native
Qaul
.java
→
clients/android/app/src/main/java/
st/irde
/app/ffi/Native
Irdest
.java
View file @
5229d933
package
net.qaul
.app.ffi
;
package
st.irde
.app.ffi
;
import
android.view.View
;
import
net.qaul.app.ffi.models.ChatMessage
;
import
net.qaul.app.ffi.models.ChatRoom
;
import
net.qaul.app.ffi.models.Frame
;
import
net.qaul.app.ffi.models.Id
;
import
net.qaul.app.ffi.models.UserProfile
;
import
st.irde.app.ffi.models.ChatMessage
;
import
st.irde.app.ffi.models.ChatRoom
;
import
st.irde.app.ffi.models.Frame
;
import
st.irde.app.ffi.models.Id
;
import
st.irde.app.ffi.models.UserProfile
;
import
java.util.ArrayList
;
/**
* The native
libqaul
bridge interface.
* The native
irdest-core
bridge interface.
* <p>
* This file/class is written in Java because FFI integration between Kotlin and Rust
* might be more complicated than with Java (for example javah exists, where there
* doesn't seem to be a comparable kotlinh). This can be changed in the future, and
* this should definitely remain the only Java code, but this is simpler for now.
*/
public
class
Native
Qaul
{
private
long
libqaul
State
=
0
;
public
class
Native
Irdest
{
private
long
irdestCore
State
=
0
;
public
Native
Qaul
(
int
port
)
{
this
.
libqaul
State
=
setupState
(
port
);
public
Native
Irdest
(
int
port
)
{
this
.
irdestCore
State
=
setupState
(
port
);
}
public
native
Id
idTest
(
Id
id
);
...
...
@@ -39,17 +37,17 @@ public class NativeQaul {
* @param port the remote server port
*/
public
void
connectTpc
(
String
addr
,
int
port
)
{
connectTcp
(
libqaul
State
,
addr
,
port
);
connectTcp
(
irdestCore
State
,
addr
,
port
);
}
private
native
void
connectTcp
(
long
qaul
,
String
addr
,
int
port
);
private
native
void
connectTcp
(
long
irdest
,
String
addr
,
int
port
);
/**
* Check if the instance has a valid login
*
* @return true if login is valid
*/
private
native
boolean
checkLogin
(
long
qaul
);
private
native
boolean
checkLogin
(
long
irdest
);
/**
* List available users
...
...
@@ -59,20 +57,20 @@ public class NativeQaul {
* @return List of local users
*/
public
ArrayList
<
UserProfile
>
usersList
(
boolean
local
)
{
return
usersList
(
libqaul
State
,
local
);
return
usersList
(
irdestCore
State
,
local
);
}
private
native
ArrayList
<
UserProfile
>
usersList
(
long
qaul
,
boolean
local
);
private
native
ArrayList
<
UserProfile
>
usersList
(
long
irdest
,
boolean
local
);
/**
* Create a new user
*
*/
public
Id
usersCreate
(
String
handle
,
String
name
,
String
password
)
{
return
usersCreate
(
libqaul
State
,
handle
,
name
,
password
);
return
usersCreate
(
irdestCore
State
,
handle
,
name
,
password
);
}
private
native
Id
usersCreate
(
long
qaul
,
String
handle
,
String
name
,
String
password
);
private
native
Id
usersCreate
(
long
irdest
,
String
handle
,
String
name
,
String
password
);
/**
* Get a particular user profile by ID
...
...
@@ -80,10 +78,10 @@ public class NativeQaul {
* @return List of local users
*/
public
UserProfile
usersGet
(
Id
id
)
{
return
usersGet
(
libqaul
State
,
id
);
return
usersGet
(
irdestCore
State
,
id
);
}
private
native
UserProfile
usersGet
(
long
qaul
,
Id
id
);
private
native
UserProfile
usersGet
(
long
irdest
,
Id
id
);
/**
* Modify the local user profile and return the new data
...
...
@@ -91,10 +89,10 @@ public class NativeQaul {
* @return Modified user profile
*/
public
UserProfile
usersModify
(
String
handle
,
String
name
)
{
return
usersModify
(
libqaul
State
,
handle
,
name
);
return
usersModify
(
irdestCore
State
,
handle
,
name
);
}
private
native
UserProfile
usersModify
(
long
qaul
,
String
handle
,
String
name
);
private
native
UserProfile
usersModify
(
long
irdest
,
String
handle
,
String
name
);
/**
...
...
@@ -105,10 +103,10 @@ public class NativeQaul {
* @return indicate whether the
*/
public
boolean
usersLogin
(
Id
id
,
String
pw
)
{
return
usersLogin
(
libqaul
State
,
id
,
pw
);
return
usersLogin
(
irdestCore
State
,
id
,
pw
);
}
private
native
boolean
usersLogin
(
long
qaul
,
Id
id
,
String
pw
);
private
native
boolean
usersLogin
(
long
irdest
,
Id
id
,
String
pw
);
/**
* List available chat rooms for the current session
...
...
@@ -116,10 +114,10 @@ public class NativeQaul {
* @return a list of available chat rooms
*/
public
ArrayList
<
ChatRoom
>
chatList
()
{
return
chatList
(
libqaul
State
);
return
chatList
(
irdestCore
State
);
}
private
native
ArrayList
<
ChatRoom
>
chatList
(
long
qaul
);
private
native
ArrayList
<
ChatRoom
>
chatList
(
long
irdest
);
/**
* Start a new chat with some friends.
...
...
@@ -131,10 +129,10 @@ public class NativeQaul {
* @return the room ID for further commands
*/
public
ChatRoom
chatStart
(
String
name
,
ArrayList
<
Id
>
friends
)
{
return
chatStart
(
libqaul
State
,
name
,
friends
);
return
chatStart
(
irdestCore
State
,
name
,
friends
);
}
private
native
ChatRoom
chatStart
(
long
qaul
,
String
name
,
ArrayList
<
Id
>
friends
);
private
native
ChatRoom
chatStart
(
long
irdest
,
String
name
,
ArrayList
<
Id
>
friends
);
/**
* Get a room object for a particular Id
...
...
@@ -143,10 +141,10 @@ public class NativeQaul {
* @return The room associated with the given id
*/
public
ChatRoom
chatGetRoom
(
Id
id
)
{
return
chatGetRoom
(
libqaul
State
,
id
);
return
chatGetRoom
(
irdestCore
State
,
id
);
}
private
native
ChatRoom
chatGetRoom
(
long
qaul
,
Id
id
);
private
native
ChatRoom
chatGetRoom
(
long
irdest
,
Id
id
);
/**
* Send a text message to a room
...
...
@@ -156,10 +154,10 @@ public class NativeQaul {
* @return the created chat message to display
*/
public
ChatMessage
chatSendMessage
(
Id
room
,
String
content
)
{
return
chatSendMessage
(
libqaul
State
,
room
,
content
);
return
chatSendMessage
(
irdestCore
State
,
room
,
content
);
}
private
native
ChatMessage
chatSendMessage
(
long
qaul
,
Id
room
,
String
content
);
private
native
ChatMessage
chatSendMessage
(
long
irdest
,
Id
room
,
String
content
);
/**
* Load all messages from a chat room
...
...
@@ -168,10 +166,10 @@ public class NativeQaul {
* @return a list of messages in this room
*/
public
ArrayList
<
ChatMessage
>
chatLoadMessages
(
Id
room
)
{
return
chatLoadMessages
(
libqaul
State
,
room
);
return
chatLoadMessages
(
irdestCore
State
,
room
);
}
private
native
ArrayList
<
ChatMessage
>
chatLoadMessages
(
long
qaul
,
Id
room
);
private
native
ArrayList
<
ChatMessage
>
chatLoadMessages
(
long
irdest
,
Id
room
);
/**
* Receive a data frame via wifi direct
...
...
@@ -181,10 +179,10 @@ public class NativeQaul {
* @param encodedFrame encoded data frame, ignored by Java code and passed into Rust
*/
public
void
wdReceived
(
byte
[]
encodedFrame
)
{
wdReceived
(
this
.
libqaul
State
,
encodedFrame
);
wdReceived
(
this
.
irdestCore
State
,
encodedFrame
);
}
private
native
void
wdReceived
(
long
qaul
,
byte
[]
encodedFrame
);
private
native
void
wdReceived
(
long
irdest
,
byte
[]
encodedFrame
);
/**
* Get a frame from the Rust code to send off to someone special
...
...
@@ -192,8 +190,8 @@ public class NativeQaul {
* @return the next frame to send off with target informatieon
*/
public
Frame
wdToSend
()
{
return
wdToSend
(
this
.
libqaul
State
);
return
wdToSend
(
this
.
irdestCore
State
);
}
private
native
Frame
wdToSend
(
long
qaul
);
private
native
Frame
wdToSend
(
long
irdest
);
}
clients/android/app/src/main/java/
net/qaul
/app/ffi/models/Call.java
→
clients/android/app/src/main/java/
st/irde
/app/ffi/models/Call.java
View file @
5229d933
package
net.qaul
.app.ffi.models
;
package
st.irde
.app.ffi.models
;
import
java.util.ArrayList
;
...
...
@@ -16,4 +16,4 @@ public class Call {
this
.
participants
=
participants
;
this
.
startTime
=
startTime
;
}
}
\ No newline at end of file
}
clients/android/app/src/main/java/
net/qaul
/app/ffi/models/ChatMessage.java
→
clients/android/app/src/main/java/
st/irde
/app/ffi/models/ChatMessage.java
View file @
5229d933
package
net.qaul
.app.ffi.models
;
package
st.irde
.app.ffi.models
;
/**
* A chat message that is part of a chat room.
...
...
clients/android/app/src/main/java/
net/qaul
/app/ffi/models/ChatRoom.java
→
clients/android/app/src/main/java/
st/irde
/app/ffi/models/ChatRoom.java
View file @
5229d933
package
net.qaul
.app.ffi.models
;
package
st.irde
.app.ffi.models
;
import
java.util.ArrayList
;
...
...
clients/android/app/src/main/java/
net/qaul
/app/ffi/models/Frame.java
→
clients/android/app/src/main/java/
st/irde
/app/ffi/models/Frame.java
View file @
5229d933
package
net.qaul
.app.ffi.models
;
package
st.irde
.app.ffi.models
;
import
java.lang.reflect.Array
;
import
java.nio.ByteBuffer
;
/**
...
...
clients/android/app/src/main/java/
net/qaul
/app/ffi/models/Id.java
→
clients/android/app/src/main/java/
st/irde
/app/ffi/models/Id.java
View file @
5229d933
package
net.qaul
.app.ffi.models
;
package
st.irde
.app.ffi.models
;
/**
* Represents a user ID in
qaul
* Represents a user ID in
irdest
*/
public
class
Id
{
public
String
inner
;
...
...
@@ -9,4 +9,4 @@ public class Id {
public
Id
(
String
inner
)
{
this
.
inner
=
inner
;
}
}
\ No newline at end of file
}
clients/android/app/src/main/java/
net/qaul
/app/ffi/models/NetworkFile.java
→
clients/android/app/src/main/java/
st/irde
/app/ffi/models/NetworkFile.java
View file @
5229d933
package
net.qaul
.app.ffi.models
;
package
st.irde
.app.ffi.models
;
/**
* A file received or available on the network
...
...
clients/android/app/src/main/java/
net/qaul
/app/ffi/models/UserProfile.java
→
clients/android/app/src/main/java/
st/irde
/app/ffi/models/UserProfile.java
View file @
5229d933
package
net.qaul
.app.ffi.models
;
package
st.irde
.app.ffi.models
;
import
org.jetbrains.annotations.NotNull
;
...
...
clients/android/app/src/main/java/
net/qaul
/app/net/PeerHandler.kt
→
clients/android/app/src/main/java/
st/irde
/app/net/PeerHandler.kt
View file @
5229d933
package
net.qaul
.app.net
package
st.irde
.app.net
import
android.net.wifi.p2p.WifiP2pInfo
import
android.util.Log
...
...
@@ -19,4 +19,4 @@ class PeerHandler(val id: Int, val server: ServerSocket, val client: Socket) {
}
}
}
}
\ No newline at end of file
}
clients/android/app/src/main/java/
net/qaul
/app/net/WDReceiver.kt
→
clients/android/app/src/main/java/
st/irde
/app/net/WDReceiver.kt
View file @
5229d933
package
net.qaul
.app.net
package
st.irde
.app.net
import
android.content.BroadcastReceiver
import
android.content.Context
...
...
@@ -7,7 +7,6 @@ import android.net.NetworkInfo
import
android.net.wifi.p2p.*
import
android.net.wifi.p2p.WifiP2pManager.*
import
android.util.Log
import
net.qaul.app.LoginActivity
/** A broadcast receiver that reacts to WifiP2P events */
class
WifiDirectBroadcastReceiver
(
...
...
clients/android/app/src/main/java/
net/qaul
/app/net/WDService.kt
→
clients/android/app/src/main/java/
st/irde
/app/net/WDService.kt
View file @
5229d933
package
net.qaul
.app.net
package
st.irde
.app.net
import
android.annotation.SuppressLint
import
android.app.Service
...
...
@@ -172,4 +172,4 @@ class WifiP2PService : Service(), WifiP2pManager.ConnectionInfoListener {
}
}.
start
()
}
}
\ No newline at end of file
}
clients/android/app/src/main/java/
net/qaul
/app/ui/SettingsActivity.kt
→
clients/android/app/src/main/java/
st/irde
/app/ui/SettingsActivity.kt
View file @
5229d933
package
net.qaul
.app.ui
package
st.irde
.app.ui
import
android.os.Bundle
import
androidx.appcompat.app.AppCompatActivity
import
androidx.preference.Preference
import
androidx.preference.PreferenceFragmentCompat
import
net.qaul
.app.R
import
st.irde
.app.R
private
const
val
TITLE_TAG
=
"settingsActivityTitle"
...
...
@@ -82,4 +82,4 @@ class SettingsActivity : AppCompatActivity(),
setPreferencesFromResource
(
R
.
xml
.
sync_preferences
,
rootKey
)
}
}
}
\ No newline at end of file
}
clients/android/app/src/main/java/
net/qaul
/app/ui/UserCreateFragment.kt
→
clients/android/app/src/main/java/
st/irde
/app/ui/UserCreateFragment.kt
View file @
5229d933
package
net.qaul
.app.ui
package
st.irde
.app.ui
import
android.os.Bundle
import
android.view.LayoutInflater
...
...
@@ -8,9 +8,9 @@ import android.widget.Button
import
android.widget.EditText
import
android.widget.Toast
import
androidx.fragment.app.Fragment
import
net.qaul
.app.LoginActivity
import
net.qaul
.app.R
import
net.qaul
.app.util.AppState
import
st.irde
.app.LoginActivity
import
st.irde
.app.R
import
st.irde
.app.util.AppState
class
UserCreateFragment
(
val
login
:
LoginActivity
)
:
Fragment
()
{
override
fun
onCreateView
(
inflater
:
LayoutInflater
,
container
:
ViewGroup
?,
bundle
:
Bundle
?):
View
?
{
...
...
clients/android/app/src/main/java/
net/qaul
/app/ui/chat/ChatFragment.kt
→
clients/android/app/src/main/java/
st/irde
/app/ui/chat/ChatFragment.kt
View file @
5229d933
package
net.qaul
.app.ui.chat
package
st.irde
.app.ui.chat
import
android.annotation.SuppressLint
import
android.os.Bundle
...
...
@@ -10,13 +10,12 @@ import androidx.fragment.app.FragmentManager
import
androidx.recyclerview.widget.LinearLayoutManager
import
androidx.recyclerview.widget.RecyclerView
import
com.google.android.material.floatingactionbutton.FloatingActionButton
import
net.qaul.app.R
import
net.qaul.app.ffi.models.ChatRoom
import
net.qaul.app.ffi.models.Id
import
net.qaul.app.util.AppState
import
net.qaul.app.util.defanSubFabs
import
net.qaul.app.util.fanSubFabs
import
net.qaul.app.util.rotateFab
import
st.irde.app.R
import
st.irde.app.ffi.models.ChatRoom
import
st.irde.app.util.AppState
import
st.irde.app.util.defanSubFabs
import
st.irde.app.util.fanSubFabs
import
st.irde.app.util.rotateFab
class
ChatFragment
:
Fragment
()
{
...
...
Prev
1
2
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment