mirror of
https://github.com/gsantner/dandelion
synced 2024-11-22 12:22:08 +01:00
Refactoring; package movement;changed package name due to organisation name
This commit is contained in:
parent
30734f8f2a
commit
4482f09430
30 changed files with 205 additions and 173 deletions
|
@ -1,10 +1,12 @@
|
||||||
[![F-Droid](https://f-droid.org/wiki/images/0/06/F-Droid-button_get-it-on.png)](https://f-droid.org/repository/browse/?fdfilter=diaspora&fdid=de.baumann.diaspora)
|
[![F-Droid](https://f-droid.org/wiki/images/0/06/F-Droid-button_get-it-on.png)](https://f-droid.org/repository/browse/?fdfilter=diaspora&fdid=de.baumann.diaspora)
|
||||||
|
|
||||||
## Contributors:
|
Project was moved to <https://github.com/Diaspora-for-Android/diaspora-android>, README and paths need to be updated.
|
||||||
|
|
||||||
- [de-live-gdev](https://github.com/de-live-gdev)
|
## Main developers:
|
||||||
- [scoute-dich](https://github.com/scoute-dich)
|
|
||||||
|
|
||||||
|
- de-live-gdev (<https://de-live-gdev.github.io>)
|
||||||
|
- martinchodev (<https://github.com/martinchodev>)
|
||||||
|
- scoute-dich (<https://github.com/scoute-dich>)
|
||||||
|
|
||||||
# Diaspora
|
# Diaspora
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,11 @@ android {
|
||||||
useLibrary 'org.apache.http.legacy'
|
useLibrary 'org.apache.http.legacy'
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "de.dfa.diaspora"
|
applicationId "de.dfa.diaspora_android"
|
||||||
minSdkVersion 15
|
minSdkVersion 15
|
||||||
targetSdkVersion 23
|
targetSdkVersion 23
|
||||||
versionCode 17
|
versionCode 1
|
||||||
versionName "1.3"
|
versionName "0.9.0"
|
||||||
}
|
}
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?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"
|
||||||
package="de.dfa.diaspora">
|
package="de.dfa.diaspora_android">
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
|
@ -10,11 +10,11 @@
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
android:fullBackupContent="true"
|
android:fullBackupContent="true"
|
||||||
android:icon="@drawable/ic_launcher"
|
android:icon="@drawable/ic_launcher"
|
||||||
android:name="de.dfa.diaspora.App"
|
android:name="de.dfa.diaspora_android.App"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
android:theme="@style/AppTheme" >
|
android:theme="@style/AppTheme" >
|
||||||
<activity
|
<activity
|
||||||
android:name="de.dfa.diaspora.SplashActivity"
|
android:name=".activity.SplashActivity"
|
||||||
android:launchMode="singleInstance"
|
android:launchMode="singleInstance"
|
||||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
android:label="@string/app_name"
|
android:label="@string/app_name"
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name="de.dfa.diaspora.PodsActivity"
|
android:name=".activity.PodsActivity"
|
||||||
android:launchMode="singleInstance"
|
android:launchMode="singleInstance"
|
||||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
android:label="@string/title_activity_pods"
|
android:label="@string/title_activity_pods"
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
android:windowSoftInputMode="stateHidden" >
|
android:windowSoftInputMode="stateHidden" >
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name="de.dfa.diaspora.MainActivity"
|
android:name=".activity.MainActivity"
|
||||||
android:launchMode="singleInstance"
|
android:launchMode="singleInstance"
|
||||||
android:windowSoftInputMode="adjustResize"
|
android:windowSoftInputMode="adjustResize"
|
||||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="de.dfa.diaspora.ShareActivity"
|
android:name=".activity.ShareActivity"
|
||||||
android:launchMode="singleInstance"
|
android:launchMode="singleInstance"
|
||||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
android:label="@string/new_post"
|
android:label="@string/new_post"
|
||||||
|
@ -58,7 +58,7 @@
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name="de.dfa.diaspora.ShareActivity2"
|
android:name=".activity.ShareActivity2"
|
||||||
android:launchMode="singleInstance"
|
android:launchMode="singleInstance"
|
||||||
android:configChanges="keyboardHidden|orientation|screenSize"
|
android:configChanges="keyboardHidden|orientation|screenSize"
|
||||||
android:label="@string/new_post"
|
android:label="@string/new_post"
|
||||||
|
@ -74,7 +74,7 @@
|
||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<service
|
<service
|
||||||
android:name="de.dfa.diaspora.services.GetPodsService"
|
android:name=".task.GetPodsService"
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
android:exported="false" >
|
android:exported="false" >
|
||||||
</service>
|
</service>
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
package de.dfa.diaspora;
|
package de.dfa.diaspora_android;
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
|
|
||||||
import de.dfa.diaspora.utils.AvatarImageLoader;
|
import de.dfa.diaspora_android.data.AppSettings;
|
||||||
|
import de.dfa.diaspora_android.util.AvatarImageLoader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by gregor on 24.03.16.
|
* Created by gregor on 24.03.16.
|
|
@ -17,7 +17,7 @@
|
||||||
If not, see <http://www.gnu.org/licenses/>.
|
If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.dfa.diaspora;
|
package de.dfa.diaspora_android.activity;
|
||||||
|
|
||||||
import android.Manifest;
|
import android.Manifest;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
@ -80,8 +80,13 @@ import java.util.Date;
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import de.dfa.diaspora.utils.Helpers;
|
import de.dfa.diaspora_android.App;
|
||||||
import de.dfa.diaspora.utils.SoftKeyboardStateWatcher;
|
import de.dfa.diaspora_android.R;
|
||||||
|
import de.dfa.diaspora_android.data.AppSettings;
|
||||||
|
import de.dfa.diaspora_android.data.WebUserProfile;
|
||||||
|
import de.dfa.diaspora_android.listener.SoftKeyboardStateWatcher;
|
||||||
|
import de.dfa.diaspora_android.listener.WebUserProfileChangedListener;
|
||||||
|
import de.dfa.diaspora_android.util.Helpers;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity
|
public class MainActivity extends AppCompatActivity
|
||||||
implements NavigationView.OnNavigationItemSelectedListener, WebUserProfileChangedListener {
|
implements NavigationView.OnNavigationItemSelectedListener, WebUserProfileChangedListener {
|
||||||
|
@ -164,6 +169,7 @@ public class MainActivity extends AppCompatActivity
|
||||||
public void onSoftKeyboardOpened(int keyboardHeightInPx) {
|
public void onSoftKeyboardOpened(int keyboardHeightInPx) {
|
||||||
fab.setVisibility(View.GONE);
|
fab.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSoftKeyboardClosed() {
|
public void onSoftKeyboardClosed() {
|
||||||
fab.setVisibility(View.VISIBLE);
|
fab.setVisibility(View.VISIBLE);
|
|
@ -17,7 +17,7 @@
|
||||||
If not, see <http://www.gnu.org/licenses/>.
|
If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.dfa.diaspora;
|
package de.dfa.diaspora_android.activity;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
|
@ -47,8 +47,10 @@ import android.widget.TextView;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
import de.dfa.diaspora.services.GetPodsService;
|
import de.dfa.diaspora_android.App;
|
||||||
import de.dfa.diaspora.utils.Helpers;
|
import de.dfa.diaspora_android.R;
|
||||||
|
import de.dfa.diaspora_android.task.GetPodsService;
|
||||||
|
import de.dfa.diaspora_android.util.Helpers;
|
||||||
|
|
||||||
|
|
||||||
public class PodsActivity extends AppCompatActivity {
|
public class PodsActivity extends AppCompatActivity {
|
||||||
|
@ -73,7 +75,7 @@ public class PodsActivity extends AppCompatActivity {
|
||||||
imgSelectPod.setOnClickListener(new View.OnClickListener() {
|
imgSelectPod.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (filter.getText().length() > 4 && filter.getText().toString().contains("."))
|
if (filter.getText().length() > 4 && filter.getText().toString().contains(""))
|
||||||
askConfirmation(filter.getText().toString());
|
askConfirmation(filter.getText().toString());
|
||||||
else
|
else
|
||||||
Snackbar.make(lv, R.string.valid_pod, Snackbar.LENGTH_LONG).show();
|
Snackbar.make(lv, R.string.valid_pod, Snackbar.LENGTH_LONG).show();
|
|
@ -17,10 +17,9 @@
|
||||||
If not, see <http://www.gnu.org/licenses/>.
|
If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.dfa.diaspora;
|
package de.dfa.diaspora_android.activity;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
@ -46,7 +45,9 @@ import java.io.IOException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import de.dfa.diaspora.utils.Helpers;
|
import de.dfa.diaspora_android.App;
|
||||||
|
import de.dfa.diaspora_android.R;
|
||||||
|
import de.dfa.diaspora_android.util.Helpers;
|
||||||
|
|
||||||
public class ShareActivity extends MainActivity {
|
public class ShareActivity extends MainActivity {
|
||||||
|
|
||||||
|
@ -197,8 +198,6 @@ public class ShareActivity extends MainActivity {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Intent intent = getIntent();
|
Intent intent = getIntent();
|
||||||
final Bundle extras = intent.getExtras();
|
final Bundle extras = intent.getExtras();
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
|
@ -262,7 +261,7 @@ public class ShareActivity extends MainActivity {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Uri[] results = null;
|
Uri[] results = null;
|
||||||
if(resultCode == Activity.RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
if (mCameraPhotoPath != null) {
|
if (mCameraPhotoPath != null) {
|
||||||
results = new Uri[]{Uri.parse(mCameraPhotoPath)};
|
results = new Uri[]{Uri.parse(mCameraPhotoPath)};
|
|
@ -17,10 +17,9 @@
|
||||||
If not, see <http://www.gnu.org/licenses/>.
|
If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.dfa.diaspora;
|
package de.dfa.diaspora_android.activity;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
@ -46,7 +45,9 @@ import java.io.IOException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
import de.dfa.diaspora.utils.Helpers;
|
import de.dfa.diaspora_android.App;
|
||||||
|
import de.dfa.diaspora_android.R;
|
||||||
|
import de.dfa.diaspora_android.util.Helpers;
|
||||||
|
|
||||||
public class ShareActivity2 extends MainActivity {
|
public class ShareActivity2 extends MainActivity {
|
||||||
|
|
||||||
|
@ -197,8 +198,6 @@ public class ShareActivity2 extends MainActivity {
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Intent intent = getIntent();
|
Intent intent = getIntent();
|
||||||
final Bundle extras = intent.getExtras();
|
final Bundle extras = intent.getExtras();
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
|
@ -262,7 +261,7 @@ public class ShareActivity2 extends MainActivity {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Uri[] results = null;
|
Uri[] results = null;
|
||||||
if(resultCode == Activity.RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
if (mCameraPhotoPath != null) {
|
if (mCameraPhotoPath != null) {
|
||||||
results = new Uri[]{Uri.parse(mCameraPhotoPath)};
|
results = new Uri[]{Uri.parse(mCameraPhotoPath)};
|
|
@ -17,7 +17,7 @@
|
||||||
If not, see <http://www.gnu.org/licenses/>.
|
If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.dfa.diaspora;
|
package de.dfa.diaspora_android.activity;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
|
@ -29,6 +29,9 @@ import android.widget.ImageView;
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
|
|
||||||
|
import de.dfa.diaspora_android.App;
|
||||||
|
import de.dfa.diaspora_android.R;
|
||||||
|
|
||||||
|
|
||||||
public class SplashActivity extends AppCompatActivity {
|
public class SplashActivity extends AppCompatActivity {
|
||||||
private App app;
|
private App app;
|
|
@ -1,4 +1,4 @@
|
||||||
package de.dfa.diaspora;
|
package de.dfa.diaspora_android.data;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
|
@ -6,7 +6,7 @@ import android.content.SharedPreferences;
|
||||||
/**
|
/**
|
||||||
* Created by de-live-gdev on 20.03.16. Part of Diaspora WebApp.
|
* Created by de-live-gdev on 20.03.16. Part of Diaspora WebApp.
|
||||||
*/
|
*/
|
||||||
class AppSettings {
|
public class AppSettings {
|
||||||
private final SharedPreferences pref;
|
private final SharedPreferences pref;
|
||||||
private final Context context;
|
private final Context context;
|
||||||
|
|
||||||
|
@ -18,9 +18,11 @@ class AppSettings {
|
||||||
private void setString(String key, String value) {
|
private void setString(String key, String value) {
|
||||||
pref.edit().putString(key, value).apply();
|
pref.edit().putString(key, value).apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setInt(String key, int value) {
|
private void setInt(String key, int value) {
|
||||||
pref.edit().putInt(key, value).apply();
|
pref.edit().putInt(key, value).apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setBool(String key, boolean value) {
|
private void setBool(String key, boolean value) {
|
||||||
pref.edit().putBoolean(key, value).apply();
|
pref.edit().putBoolean(key, value).apply();
|
||||||
}
|
}
|
||||||
|
@ -36,7 +38,6 @@ class AppSettings {
|
||||||
private static final String PREF_PODDOMAIN = "podDomain";
|
private static final String PREF_PODDOMAIN = "podDomain";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// Setters & Getters
|
// Setters & Getters
|
||||||
*/
|
*/
|
|
@ -1,4 +1,4 @@
|
||||||
package de.dfa.diaspora;
|
package de.dfa.diaspora_android.data;
|
||||||
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
@ -6,6 +6,9 @@ import android.util.Log;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import de.dfa.diaspora_android.App;
|
||||||
|
import de.dfa.diaspora_android.listener.WebUserProfileChangedListener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by de-live-gdev on 24.03.16. Part of Diaspora WebApp.
|
* Created by de-live-gdev on 24.03.16. Part of Diaspora WebApp.
|
||||||
*/
|
*/
|
||||||
|
@ -156,10 +159,3 @@ public class WebUserProfile {
|
||||||
* ? ?
|
* ? ?
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
interface WebUserProfileChangedListener {
|
|
||||||
void onUserProfileNameChanged(String name);
|
|
||||||
void onUserProfileAvatarChanged(String avatarUrl);
|
|
||||||
void onNotificationCountChanged(int notificationCount);
|
|
||||||
void onUnreadMessageCountChanged(int unreadMessageCount);
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
package de.dfa.diaspora.utils;
|
package de.dfa.diaspora_android.listener;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by juergen on 25.03.16. Part of Diaspora WebApp.
|
* Created by juergen on 25.03.16. Part of Diaspora WebApp.
|
||||||
|
@ -16,6 +16,7 @@ public class SoftKeyboardStateWatcher implements ViewTreeObserver.OnGlobalLayout
|
||||||
|
|
||||||
public interface SoftKeyboardStateListener {
|
public interface SoftKeyboardStateListener {
|
||||||
void onSoftKeyboardOpened(int keyboardHeightInPx);
|
void onSoftKeyboardOpened(int keyboardHeightInPx);
|
||||||
|
|
||||||
void onSoftKeyboardClosed();
|
void onSoftKeyboardClosed();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
package de.dfa.diaspora_android.listener;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by Gregor Santner (de-live-gdev) on 26.03.16.
|
||||||
|
*/
|
||||||
|
public interface WebUserProfileChangedListener {
|
||||||
|
void onUserProfileNameChanged(String name);
|
||||||
|
|
||||||
|
void onUserProfileAvatarChanged(String avatarUrl);
|
||||||
|
|
||||||
|
void onNotificationCountChanged(int notificationCount);
|
||||||
|
|
||||||
|
void onUnreadMessageCountChanged(int unreadMessageCount);
|
||||||
|
}
|
|
@ -17,7 +17,7 @@
|
||||||
If not, see <http://www.gnu.org/licenses/>.
|
If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.dfa.diaspora.services;
|
package de.dfa.diaspora_android.task;
|
||||||
|
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
@ -46,7 +46,8 @@ public class GetPodsService extends Service {
|
||||||
|
|
||||||
private static final String TAG = "Diaspora Pod Service";
|
private static final String TAG = "Diaspora Pod Service";
|
||||||
|
|
||||||
public GetPodsService() { }
|
public GetPodsService() {
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
public int onStartCommand(Intent intent, int flags, int startId) {
|
|
@ -1,4 +1,4 @@
|
||||||
package de.dfa.diaspora;
|
package de.dfa.diaspora_android.task;
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.BitmapFactory;
|
import android.graphics.BitmapFactory;
|
||||||
|
@ -11,6 +11,8 @@ import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import de.dfa.diaspora_android.App;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Gregor Santner (de-live-gdev) on 24.03.16.
|
* Created by Gregor Santner (de-live-gdev) on 24.03.16.
|
||||||
*/
|
*/
|
|
@ -1,13 +1,15 @@
|
||||||
package de.dfa.diaspora;
|
package de.dfa.diaspora_android.ui;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by juergen on 29.02.16. Part of Diaspora WebApp.
|
* Created by juergen on 29.02.16. Part of Diaspora WebApp.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.support.design.widget.CoordinatorLayout;
|
import android.support.design.widget.CoordinatorLayout;
|
||||||
import android.support.design.widget.Snackbar.SnackbarLayout;
|
import android.support.design.widget.Snackbar.SnackbarLayout;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
|
||||||
import com.getbase.floatingactionbutton.FloatingActionsMenu;
|
import com.getbase.floatingactionbutton.FloatingActionsMenu;
|
||||||
|
|
||||||
public class FloatingActionsMenuBehavior extends CoordinatorLayout.Behavior<FloatingActionsMenu> {
|
public class FloatingActionsMenuBehavior extends CoordinatorLayout.Behavior<FloatingActionsMenu> {
|
|
@ -1,4 +1,4 @@
|
||||||
package de.dfa.diaspora.utils;
|
package de.dfa.diaspora_android.util;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
|
@ -7,7 +7,7 @@ import android.widget.ImageView;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import de.dfa.diaspora.ImageDownloadTask;
|
import de.dfa.diaspora_android.task.ImageDownloadTask;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Gregor Santner (de-live-gdev) on 24.03.16.
|
* Created by Gregor Santner (de-live-gdev) on 24.03.16.
|
|
@ -17,7 +17,7 @@
|
||||||
If not, see <http://www.gnu.org/licenses/>.
|
If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package de.dfa.diaspora.utils;
|
package de.dfa.diaspora_android.util;
|
||||||
|
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
|
@ -20,6 +20,6 @@
|
||||||
android:layout_gravity="start"
|
android:layout_gravity="start"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
app:headerLayout="@layout/nav_header_main"
|
app:headerLayout="@layout/nav_header_main"
|
||||||
app:menu="@menu/activity_main_drawer" />
|
app:menu="@menu/navdrawer_main" />
|
||||||
|
|
||||||
</android.support.v4.widget.DrawerLayout>
|
</android.support.v4.widget.DrawerLayout>
|
||||||
|
|
|
@ -1,52 +1,54 @@
|
||||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
|
android:id="@+id/podsLayout"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:paddingBottom="@dimen/activity_vertical_margin"
|
||||||
|
android:paddingLeft="@dimen/activity_horizontal_margin"
|
||||||
android:paddingRight="@dimen/activity_horizontal_margin"
|
android:paddingRight="@dimen/activity_horizontal_margin"
|
||||||
android:paddingTop="@dimen/activity_vertical_margin"
|
android:paddingTop="@dimen/activity_vertical_margin"
|
||||||
android:paddingBottom="@dimen/activity_vertical_margin"
|
tools:context=".activity.PodsActivity">
|
||||||
android:id="@+id/podsLayout"
|
|
||||||
tools:context="ar.com.tristeslostrestigres.diasporanativewebapp.PodsActivity">
|
|
||||||
|
|
||||||
<ListView
|
<ListView
|
||||||
|
android:id="@+id/lstPods"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:id="@+id/lstPods"
|
android:layout_above="@+id/navheader_description"
|
||||||
android:choiceMode="singleChoice"
|
|
||||||
android:layout_below="@+id/edtFilter"
|
android:layout_below="@+id/edtFilter"
|
||||||
android:layout_above="@+id/navheader_description" />
|
android:choiceMode="singleChoice" />
|
||||||
|
|
||||||
<EditText
|
<EditText
|
||||||
|
android:id="@+id/edtFilter"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:id="@+id/edtFilter"
|
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:hint="@string/filter_hint"
|
|
||||||
android:layout_toLeftOf="@+id/imgSelectPod"
|
android:layout_toLeftOf="@+id/imgSelectPod"
|
||||||
android:layout_toStartOf="@+id/imgSelectPod"
|
android:layout_toStartOf="@+id/imgSelectPod"
|
||||||
|
android:hint="@string/filter_hint"
|
||||||
android:inputType="textUri|textWebEditText" />
|
android:inputType="textUri|textWebEditText" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:id="@+id/imgSelectPod"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingRight="5dp"
|
|
||||||
android:paddingLeft="5dp"
|
|
||||||
android:id="@+id/imgSelectPod"
|
|
||||||
android:src="@mipmap/ic_arrow_right_grey600_24dp"
|
|
||||||
android:layout_above="@+id/lstPods"
|
android:layout_above="@+id/lstPods"
|
||||||
android:layout_alignRight="@+id/lstPods"
|
|
||||||
android:layout_alignEnd="@+id/lstPods"
|
android:layout_alignEnd="@+id/lstPods"
|
||||||
|
android:layout_alignRight="@+id/lstPods"
|
||||||
android:layout_alignTop="@+id/edtFilter"
|
android:layout_alignTop="@+id/edtFilter"
|
||||||
android:contentDescription="@string/confirm_url" />
|
android:contentDescription="@string/confirm_url"
|
||||||
|
android:paddingLeft="5dp"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:src="@mipmap/ic_arrow_right_grey600_24dp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
android:id="@+id/navheader_description"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
|
||||||
android:text="@string/podlist_source_note"
|
|
||||||
android:id="@+id/navheader_description"
|
|
||||||
android:layout_alignParentBottom="true"
|
android:layout_alignParentBottom="true"
|
||||||
android:layout_alignParentLeft="true"
|
android:layout_alignParentLeft="true"
|
||||||
android:layout_alignParentStart="true" />
|
android:layout_alignParentStart="true"
|
||||||
|
android:text="@string/podlist_source_note"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceSmall" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
|
@ -2,15 +2,15 @@
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
tools:context="ar.com.tristeslostrestigres.diasporanativewebapp.SplashActivity">
|
tools:context=".activity.SplashActivity">
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
android:id="@+id/imgSplash"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:id="@+id/imgSplash"
|
|
||||||
android:src="@drawable/splashscreen1"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:layout_centerHorizontal="true"
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:contentDescription="@string/splash_screen_description"
|
||||||
android:scaleType="centerCrop"
|
android:scaleType="centerCrop"
|
||||||
android:contentDescription="@string/splash_screen_description" />
|
android:src="@drawable/splashscreen1" />
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
xmlns:fab="http://schemas.android.com/apk/res-auto"
|
xmlns:fab="http://schemas.android.com/apk/res-auto"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
|
@ -26,18 +26,18 @@
|
||||||
|
|
||||||
<com.getbase.floatingactionbutton.FloatingActionsMenu
|
<com.getbase.floatingactionbutton.FloatingActionsMenu
|
||||||
android:id="@+id/fab_menubutton"
|
android:id="@+id/fab_menubutton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom|end"
|
||||||
|
android:layout_marginBottom="4dp"
|
||||||
|
android:layout_marginEnd="8dp"
|
||||||
|
android:layout_marginRight="8dp"
|
||||||
|
android:visibility="gone"
|
||||||
|
app:layout_behavior="de.dfa.diaspora_android.ui.FloatingActionsMenuBehavior"
|
||||||
fab:fab_addButtonColorNormal="@color/fab_big"
|
fab:fab_addButtonColorNormal="@color/fab_big"
|
||||||
fab:fab_addButtonColorPressed="@color/fab_big_pressed"
|
fab:fab_addButtonColorPressed="@color/fab_big_pressed"
|
||||||
fab:fab_addButtonPlusIconColor="@color/white"
|
fab:fab_addButtonPlusIconColor="@color/white"
|
||||||
fab:fab_labelStyle="@style/menu_labels_style"
|
fab:fab_labelStyle="@style/menu_labels_style">
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:visibility="gone"
|
|
||||||
android:layout_gravity="bottom|end"
|
|
||||||
android:layout_marginRight="8dp"
|
|
||||||
android:layout_marginBottom="4dp"
|
|
||||||
android:layout_marginEnd="8dp"
|
|
||||||
app:layout_behavior="de.dfa.diaspora.FloatingActionsMenuBehavior">
|
|
||||||
|
|
||||||
<com.getbase.floatingactionbutton.FloatingActionButton
|
<com.getbase.floatingactionbutton.FloatingActionButton
|
||||||
android:id="@+id/fab_top"
|
android:id="@+id/fab_top"
|
||||||
|
@ -45,11 +45,11 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:onClick="fab3_click"
|
android:onClick="fab3_click"
|
||||||
fab:fab_colorNormal="@color/fab_small"
|
fab:fab_colorNormal="@color/fab_small"
|
||||||
fab:fab_icon="@drawable/fab_top"
|
|
||||||
fab:fab_title="@string/fab3_title"
|
|
||||||
fab:fab_colorPressed="@color/fab_small_pressed"
|
fab:fab_colorPressed="@color/fab_small_pressed"
|
||||||
|
fab:fab_icon="@drawable/fab_top"
|
||||||
fab:fab_labelStyle="@style/menu_labels_style"
|
fab:fab_labelStyle="@style/menu_labels_style"
|
||||||
fab:fab_size="mini" />
|
fab:fab_size="mini"
|
||||||
|
fab:fab_title="@string/fab3_title" />
|
||||||
|
|
||||||
<com.getbase.floatingactionbutton.FloatingActionButton
|
<com.getbase.floatingactionbutton.FloatingActionButton
|
||||||
android:id="@+id/fab_search"
|
android:id="@+id/fab_search"
|
||||||
|
@ -57,11 +57,11 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:onClick="fab2_click"
|
android:onClick="fab2_click"
|
||||||
fab:fab_colorNormal="@color/fab_small"
|
fab:fab_colorNormal="@color/fab_small"
|
||||||
fab:fab_icon="@drawable/fab_search"
|
|
||||||
fab:fab_title="@string/fab2_title"
|
|
||||||
fab:fab_colorPressed="@color/fab_small_pressed"
|
fab:fab_colorPressed="@color/fab_small_pressed"
|
||||||
|
fab:fab_icon="@drawable/fab_search"
|
||||||
fab:fab_labelStyle="@style/menu_labels_style"
|
fab:fab_labelStyle="@style/menu_labels_style"
|
||||||
fab:fab_size="mini" />
|
fab:fab_size="mini"
|
||||||
|
fab:fab_title="@string/fab2_title" />
|
||||||
|
|
||||||
<com.getbase.floatingactionbutton.FloatingActionButton
|
<com.getbase.floatingactionbutton.FloatingActionButton
|
||||||
android:id="@+id/fab_compose"
|
android:id="@+id/fab_compose"
|
||||||
|
@ -69,10 +69,10 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:onClick="fab1_click"
|
android:onClick="fab1_click"
|
||||||
fab:fab_colorNormal="@color/fab_small"
|
fab:fab_colorNormal="@color/fab_small"
|
||||||
fab:fab_icon="@drawable/fab_compose"
|
|
||||||
fab:fab_title="@string/fab1_title"
|
|
||||||
fab:fab_colorPressed="@color/fab_small_pressed"
|
fab:fab_colorPressed="@color/fab_small_pressed"
|
||||||
fab:fab_size="mini" />
|
fab:fab_icon="@drawable/fab_compose"
|
||||||
|
fab:fab_size="mini"
|
||||||
|
fab:fab_title="@string/fab1_title" />
|
||||||
|
|
||||||
</com.getbase.floatingactionbutton.FloatingActionsMenu>
|
</com.getbase.floatingactionbutton.FloatingActionsMenu>
|
||||||
|
|
||||||
|
|
|
@ -14,23 +14,23 @@
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
<WebView
|
<WebView
|
||||||
|
android:id="@+id/webView"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="fill_parent"
|
android:layout_height="fill_parent"
|
||||||
android:id="@+id/webView"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:layout_alignParentEnd="true"
|
android:layout_alignParentEnd="true"
|
||||||
android:layout_alignParentLeft="true"
|
android:layout_alignParentLeft="true"
|
||||||
android:layout_alignParentStart="true" />
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
android:layout_centerVertical="true" />
|
||||||
|
|
||||||
</android.support.v4.widget.SwipeRefreshLayout>
|
</android.support.v4.widget.SwipeRefreshLayout>
|
||||||
|
|
||||||
<ProgressBar
|
<ProgressBar
|
||||||
android:minHeight="4dip"
|
android:id="@+id/progressBar"
|
||||||
android:maxHeight="4dip"
|
style="@android:style/Widget.ProgressBar.Horizontal"
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
style="@android:style/Widget.ProgressBar.Horizontal"
|
android:maxHeight="4dip"
|
||||||
android:id="@+id/progressBar" />
|
android:minHeight="4dip" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
|
@ -1,10 +1,9 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
android:orientation="vertical"
|
|
||||||
android:gravity="center_horizontal"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent">
|
android:layout_height="match_parent"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
android:orientation="vertical">
|
||||||
|
|
||||||
|
|
||||||
<RadioGroup
|
<RadioGroup
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
tools:context=".activity.MainActivity">
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_exit"
|
android:id="@+id/action_exit"
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
tools:context=".activity.MainActivity">
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_notifications"
|
android:id="@+id/action_notifications"
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
tools:context="ar.com.tristeslostrestigres.diasporanativewebapp.PodsActivity">
|
tools:context=".activity.PodsActivity">
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/action_reload"
|
android:id="@+id/action_reload"
|
||||||
android:title="@string/reload"
|
|
||||||
android:icon="@drawable/ic_sync_white_24dp"
|
android:icon="@drawable/ic_sync_white_24dp"
|
||||||
android:orderInCategory="100"
|
android:orderInCategory="100"
|
||||||
|
android:title="@string/reload"
|
||||||
app:showAsAction="ifRoom" />
|
app:showAsAction="ifRoom" />
|
||||||
</menu>
|
</menu>
|
||||||
|
|
|
@ -15,10 +15,10 @@
|
||||||
<!-- TODO followed_tags currently not implemented as single viewable page
|
<!-- TODO followed_tags currently not implemented as single viewable page
|
||||||
(0.5.7.1-paf04894e, 2016 March 20) -->
|
(0.5.7.1-paf04894e, 2016 March 20) -->
|
||||||
<item
|
<item
|
||||||
android:visible="false"
|
|
||||||
android:id="@+id/nav_followed_tags"
|
android:id="@+id/nav_followed_tags"
|
||||||
android:icon="@drawable/jb_tag2"
|
android:icon="@drawable/jb_tag2"
|
||||||
android:title="@string/jb_followed_tags" />
|
android:title="@string/jb_followed_tags"
|
||||||
|
android:visible="false" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/nav_aspects"
|
android:id="@+id/nav_aspects"
|
||||||
android:icon="@drawable/jb_aspects"
|
android:icon="@drawable/jb_aspects"
|
|
@ -152,6 +152,6 @@ along with this program. If not, see http://www.gnu.org/licenses.<br> <br
|
||||||
<string name="new_post2">D* Titel und Text</string>
|
<string name="new_post2">D* Titel und Text</string>
|
||||||
<string name="jb_profile">Profil</string>
|
<string name="jb_profile">Profil</string>
|
||||||
<string name="new_post1">D* nur Text</string>
|
<string name="new_post1">D* nur Text</string>
|
||||||
<string name="shared_by_diaspora_android">*[geteilt durch #DiasporaAndroid]*</string>
|
<string name="shared_by_diaspora_android">*[geteilt durch #diaspora-android]*</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -205,5 +205,5 @@
|
||||||
|
|
||||||
<string name="exit_app">Exit app</string>
|
<string name="exit_app">Exit app</string>
|
||||||
<string name="diaspora" translatable="false">Diaspora</string>
|
<string name="diaspora" translatable="false">Diaspora</string>
|
||||||
<string name="shared_by_diaspora_android">*[shared by #DiasporaAndroid]*</string>
|
<string name="shared_by_diaspora_android">*[shared by #diaspora-android]*</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
Loading…
Reference in a new issue