diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index 1da7075..08dc549 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -14,8 +14,8 @@ diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 2da3581..5a00c90 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/caches/gradle_models.ser b/.idea/caches/gradle_models.ser index 56f2fe6..857d320 100644 Binary files a/.idea/caches/gradle_models.ser and b/.idea/caches/gradle_models.ser differ diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index 30aa626..0000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index d9c26a0..561c97d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "org.disroot.disrootapp" minSdkVersion 15 targetSdkVersion 28 - versionCode 17 - versionName "1.1.4" + versionCode 19 + versionName "1.2.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ff5dcba..1be8a03 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,6 +6,8 @@ + + + + + + + + + + + + diff --git a/app/src/main/java/org/disroot/disrootapp/StatusBroadcastReceiver.java b/app/src/main/java/org/disroot/disrootapp/StatusBroadcastReceiver.java new file mode 100644 index 0000000..fb9d2c3 --- /dev/null +++ b/app/src/main/java/org/disroot/disrootapp/StatusBroadcastReceiver.java @@ -0,0 +1,16 @@ +package org.disroot.disrootapp; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; + +public class StatusBroadcastReceiver extends BroadcastReceiver { + + @Override + public void onReceive(Context context, Intent intent) { + + Intent myIntent = new Intent(context, StatusService.class); + context.startService(myIntent); + + } +} diff --git a/app/src/main/java/org/disroot/disrootapp/StatusService.java b/app/src/main/java/org/disroot/disrootapp/StatusService.java new file mode 100644 index 0000000..8b97d81 --- /dev/null +++ b/app/src/main/java/org/disroot/disrootapp/StatusService.java @@ -0,0 +1,187 @@ +package org.disroot.disrootapp; + +import android.annotation.SuppressLint; +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.graphics.Color; +import android.media.RingtoneManager; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Build; +import android.os.IBinder; +import android.support.v4.app.NotificationCompat; +import android.util.Log; +import android.widget.Toast; + +import org.disroot.disrootapp.ui.StateMessagesActivity; +import org.disroot.disrootapp.utils.HttpHandler; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Timer; +import java.util.TimerTask; + +import static android.support.constraint.motion.MotionScene.TAG; + +public class StatusService extends Service { + + //status report + public SharedPreferences checkDate; + // URL to get data JSON + static String incidenturl0 ="https://state.disroot.org/api/v1/incidents?sort=id&order=desc"; + ArrayList> messageList; + ArrayList> getDate; + + public StatusService() { + } + + @Override + public IBinder onBind(Intent intent) { + // TODO: Return the communication channel to the service. + throw new UnsupportedOperationException( "Not yet implemented" ); + + } + @Override + public void onCreate() { + super.onCreate(); + + //Status report + messageList = new ArrayList<>(); + getDate = new ArrayList<>(); + checkDate = getSharedPreferences("storeDate", Context.MODE_PRIVATE); + + //Check json for updates + Timer timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + new StatusService.GetList().execute(); + } + }, 100, 1800000);//100000=100sec + + + } + //status report + @SuppressLint("StaticFieldLeak") + class GetList extends AsyncTask { + + @Override + protected Void doInBackground(Void... arg0) { + HttpHandler sh = new HttpHandler(); + + String jsonStrincidents0 = sh.makeServiceCall(incidenturl0); + + Log.e(TAG, "Response from url(Service): " + incidenturl0); + + if (jsonStrincidents0 != null) {//Incidaetnts page + try { + JSONObject jsonObj = new JSONObject(jsonStrincidents0); + JSONArray data = jsonObj.getJSONArray("data"); + int a=0; + JSONObject o = data.getJSONObject(a); + String callid = o.getString("id"); + String updated = o.getString("updated_at"); + HashMap date = new HashMap<>(); + date.put("id", callid); + date.put("updated", updated); + getDate.add(date); + String stateDate = date.put( "updated", updated ); + String dateStored= checkDate.getString( "storeDate","" ); + + assert dateStored != null; + if (dateStored.equals( "" )) + { + checkDate.edit().putString( "storeDate", stateDate).apply(); + //return null; + } + else { + assert stateDate != null; + if (!stateDate.equals( dateStored )&& !stateDate.equals( "" ))//dateStored + { + checkDate.edit().putString( "storeDate", stateDate).apply(); + Log.e(TAG, "date: " + dateStored); + Log.e(TAG, "date2: " + stateDate); + sendNotification();//Call notification + return null; + } + else + Log.e(TAG, "updated json(service)"); + } + return null; + + } catch (final JSONException e) { + Log.e(TAG, "Json parsing error: " + e.getMessage()); + Toast.makeText(getApplicationContext(), + "Json parsing error: " + e.getMessage(), + Toast.LENGTH_LONG) + .show(); + } + }else { + Log.e(TAG, "Couldn't get json from server."); + } + return null; + } + } + + //Notification + private void sendNotification() throws JSONException { + String CHANNEL_ID = "3168654312"; + String CHANNEL_NAME = "StateNotification"; + HttpHandler sh = new HttpHandler(); + String jsonStrincidents0 = sh.makeServiceCall(incidenturl0); + JSONObject jsonObj = new JSONObject(jsonStrincidents0); + JSONArray data = jsonObj.getJSONArray("data"); + int a=0; + JSONObject o = data.getJSONObject(a); + String name = o.getString( "name" ); + String message = o.getString( "message" ); + HashMap date = new HashMap<>(); + date.put("name", name); + date.put("message", message); + getDate.add(date); + Log.e(TAG, "message: " + name); + + Intent goState = new Intent( StatusService.this, StateMessagesActivity.class); + PendingIntent launchStateMessages = PendingIntent.getActivity(StatusService.this,0, goState, PendingIntent.FLAG_UPDATE_CURRENT); + + NotificationManager notificationManager = (NotificationManager) this.getSystemService( Context.NOTIFICATION_SERVICE); + NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle(); + + inboxStyle.addLine(message); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + // I would suggest that you use IMPORTANCE_DEFAULT instead of IMPORTANCE_HIGH + NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH); + channel.enableVibration(true); + channel.setLightColor( Color.rgb( 80,22,45 )); + channel.enableLights(true); + channel.setVibrationPattern(new long[]{50,500,100,300,50,300}); + notificationManager.createNotificationChannel(channel); + } + + NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID) + .setAutoCancel( true ) + .setOngoing(true) + .setSmallIcon(R.drawable.ic_state) + .setContentTitle( getString( R.string.NotificationTitle ) ) + .setContentText(name)//get text Title from json :-) + .setContentInfo(message)//get text message from json :-) + .setContentIntent(launchStateMessages); + Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); + notificationBuilder.setSound(alarmSound) + .setVibrate(new long[]{50,500,100,300,50,300}) + .setLights(Color.BLUE, 3000, 3000); + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ + notificationBuilder.setChannelId(CHANNEL_ID); + } + + notificationManager.notify(CHANNEL_ID, 1, notificationBuilder.build()); + } +} diff --git a/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java b/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java index 713d45f..225ddc5 100644 --- a/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java +++ b/app/src/main/java/org/disroot/disrootapp/ui/MainActivity.java @@ -1,35 +1,31 @@ package org.disroot.disrootapp.ui; import android.Manifest; -import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.AlertDialog; import android.app.DownloadManager; -import android.app.NotificationManager; -import android.app.PendingIntent; -import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.graphics.Color; -import android.media.RingtoneManager; import android.net.Uri; -import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Parcelable; +import android.os.PowerManager; import android.provider.MediaStore; +import android.provider.Settings; import android.support.annotation.NonNull; import android.support.annotation.RequiresApi; import android.support.design.widget.Snackbar; import android.support.v4.app.ActivityCompat; import android.support.v4.app.FragmentManager; -import android.support.v4.app.NotificationCompat; import android.support.v4.content.ContextCompat; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; @@ -59,20 +55,15 @@ import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.FrameLayout; import android.widget.ImageButton; -import android.widget.ListView; import android.widget.ProgressBar; import android.widget.ScrollView; import android.widget.Toast; import org.disroot.disrootapp.R; -//import org.disroot.disrootapp.service.CachetService; +import org.disroot.disrootapp.StatusService; import org.disroot.disrootapp.utils.Constants; -import org.disroot.disrootapp.utils.HttpHandler; import org.disroot.disrootapp.webviews.DisWebChromeClient; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; import java.io.File; import java.io.IOException; @@ -83,9 +74,6 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Timer; -import java.util.TimerTask; - import de.cketti.library.changelog.ChangeLog; @SuppressWarnings("ALL") @@ -120,15 +108,6 @@ public class MainActivity extends AppCompatActivity implements View.OnLongClickL private CookieManager cookieManager; - //status report - private ProgressDialog pDialog; - private ListView lv; - public SharedPreferences checkDate; - // URL to get data JSON - static String incidenturl0 ="https://state.disroot.org/api/v1/incidents?sort=id&order=desc"; - ArrayList> messageList; - ArrayList> getDate; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -667,37 +646,35 @@ public class MainActivity extends AppCompatActivity implements View.OnLongClickL } }); - //Status report - messageList = new ArrayList<>(); - getDate = new ArrayList<>(); + //Status service + Intent intent = new Intent( MainActivity.this, StatusService.class); + startService(intent); - lv = findViewById(R.id.list); - checkDate = getSharedPreferences("storeDate", Context.MODE_PRIVATE); - //Check json for updates - Timer timer = new Timer(); - timer.schedule(new TimerTask() { - @Override - public void run() { - runOnUiThread(new Runnable() { + //delete after version 1.1.6 + PackageInfo info = null; + try { + info = getPackageManager().getPackageInfo(getPackageName(), 0); + } catch (PackageManager.NameNotFoundException e) { + // bad times + Log.e("MyApplication", "couldn't get package info!"); + } - @Override - public void run() { - new MainActivity.GetList().execute(); - } - }); - } - }, 100, 100000);//100000=100sec - - // start CachetService - //Intent intent = new Intent(this, CachetService.class); - // Put some data for use by the IntentService - //intent.putExtra("foo", "bar"); - //startService(intent); + if (info == null) { + // can't do anything + return; + } + if (!firstStart.getBoolean("update", false)&&info.firstInstallTime != info.lastUpdateTime) { + showOptimzationInfo(); + firstStart.edit().putBoolean("update", true).apply(); + return; + } } + + //Dialog windows private void showChoose() { AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); @@ -752,10 +729,41 @@ public class MainActivity extends AppCompatActivity implements View.OnLongClickL builder.setCancelable(false); builder.setTitle(R.string.FirstTitle); builder.setMessage(getString(R.string.FirstInfo)); - builder.setPositiveButton(R.string.global_ok, null); + builder.setPositiveButton(R.string.global_ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + showOptimzation(); + } + }); builder.show(); } + private void showOptimzation() { + Intent intent = new Intent(); + String packageName = getPackageName(); + PowerManager pm = (PowerManager) getSystemService( Context.POWER_SERVICE); + if (pm.isIgnoringBatteryOptimizations(packageName)) + intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); + else { + intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); + intent.setData(Uri.parse("package:" + packageName)); + } + startActivity(intent); + } + + private void showOptimzationInfo() { + AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); + builder.setCancelable(false); + builder.setTitle(R.string.OptimizationTitle); + builder.setMessage(getString(R.string.OptimizationInfo)); + builder.setPositiveButton(R.string.global_ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + showOptimzation(); + } + }); + builder.show(); + } @Override public boolean onLongClick(View view) { Toast.makeText(view.getContext(), R.string.activity_main_share_info, Toast.LENGTH_LONG).show(); @@ -1440,6 +1448,9 @@ public class MainActivity extends AppCompatActivity implements View.OnLongClickL webView.loadUrl(url); return true; } + case R.id.action_optimization: + showOptimzation(); + return true; case R.id.action_about: Intent goAbout = new Intent(MainActivity.this, AboutActivity.class); MainActivity.this.startActivity(goAbout); @@ -1871,7 +1882,6 @@ public class MainActivity extends AppCompatActivity implements View.OnLongClickL } } - // public void shareCurrentPage() { Intent intent = new Intent(Intent.ACTION_SEND); intent.setAction(Intent.ACTION_SEND); @@ -1880,104 +1890,6 @@ public class MainActivity extends AppCompatActivity implements View.OnLongClickL startActivity(intent); } - //status report - @SuppressLint("StaticFieldLeak") - class GetList extends AsyncTask { - - @Override - protected Void doInBackground(Void... arg0) { - HttpHandler sh = new HttpHandler(); - - String jsonStrincidents0 = sh.makeServiceCall(incidenturl0); - - Log.e(TAG, "Response from url: " + incidenturl0); - - if (jsonStrincidents0 != null) {//Incidaetnts page - try { - JSONObject jsonObj = new JSONObject(jsonStrincidents0); - JSONArray data = jsonObj.getJSONArray("data"); - int a=0; - JSONObject o = data.getJSONObject(a); - String callid = o.getString("id"); - String updated = o.getString("updated_at"); - HashMap date = new HashMap<>(); - date.put("id", callid); - date.put("updated", updated); - getDate.add(date); - String stateDate = date.put( "updated", updated ); - String dateStored= checkDate.getString( "storeDate","" ); - - if (dateStored.equals( "" )) - { - checkDate.edit().putString( "storeDate", stateDate).apply(); - //return null; - } - else if (!stateDate.equals( dateStored )&& !stateDate.equals( "" ))//dateStored - { - checkDate.edit().putString( "storeDate", stateDate).apply(); - Log.e(TAG, "date: " + dateStored); - Log.e(TAG, "date2: " + stateDate); - sendNotification();//Call notification - return null; - } - else - Log.e(TAG, "updated json"); - return null; - - } catch (final JSONException e) { - Log.e(TAG, "Json parsing error: " + e.getMessage()); - runOnUiThread(new Runnable() { - @Override - public void run() { - Toast.makeText(getApplicationContext(), - "Json parsing error: " + e.getMessage(), - Toast.LENGTH_LONG) - .show(); - } - }); - } - }else { - Log.e(TAG, "Couldn't get json from server."); - } - return null; - } - } - - //Notification - private void sendNotification() throws JSONException { - HttpHandler sh = new HttpHandler(); - String jsonStrincidents0 = sh.makeServiceCall(incidenturl0); - JSONObject jsonObj = new JSONObject(jsonStrincidents0); - JSONArray data = jsonObj.getJSONArray("data"); - int a=0; - JSONObject o = data.getJSONObject(a); - String name = o.getString( "name" ); - String message = o.getString( "message" ); - HashMap date = new HashMap<>(); - date.put("name", name); - date.put("message", message); - Log.e(TAG, "message: " + name); - - Intent goState = new Intent(MainActivity.this, StateMessagesActivity.class); - PendingIntent launchStateMessages = PendingIntent.getActivity(MainActivity.this,0, goState, PendingIntent.FLAG_UPDATE_CURRENT); - NotificationCompat.Builder mBuilder = - new NotificationCompat.Builder(this) - .setAutoCancel( true ) - .setOngoing(true) - .setSmallIcon(R.drawable.ic_state) - .setContentTitle( getString( R.string.NotificationTitle ) ) - .setContentText(name)//get text Title from json :-) - .setContentInfo(message)//get text message from json :-) - .setContentIntent(launchStateMessages); - Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); - mBuilder.setSound(alarmSound) - .setVibrate(new long[]{50,500,100,300,50,300}) - .setLights(Color.MAGENTA, 3000, 3000); - NotificationManager mNotificationManager = - (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - mNotificationManager.notify(001, mBuilder.build()); - } - //show snackbar to avoid exit on backpress @Override public void onBackPressed() { diff --git a/app/src/main/res/drawable/ic_battery.xml b/app/src/main/res/drawable/ic_battery.xml new file mode 100644 index 0000000..7e5383e --- /dev/null +++ b/app/src/main/res/drawable/ic_battery.xml @@ -0,0 +1,6 @@ + + + diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index 1720097..9330959 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -31,6 +31,10 @@ android:icon="@drawable/ic_clear_cookies" android:id="@+id/action_clear_cookies" android:title="@string/action_clear_cookies" /> + + Disroot App + Home + Mail + Cloud + Diaspora* + Forum + Chat + Etherpad + EtherCalc + Private bin + Upload + Searx + Umfrage //or should not be translated? + Board // would name that KANBAN or TAIGA + Passwort + Status + How to //best trans will be tutorial, but inconsistent then + + Über + Exit + Teilen //share with or via? or only share + neu laden + + + Actions //? something like functions? + Teile link informationen //link info or link? + lädt… + OK + weitere Hilfe + weitere Infos + AboutActivity //? + + E-Mail Einstellungen + IMAP: disroot.org\nSSL Port 993\nAuthentifizierung: normales\nPasswort\n\nSMTP: disroot.org\nSTARTTLS Port 587\nAuthentifizierung: normales\nPasswort\n\nPOP: disroot.org\nSSL Port 995\nAuthentifizierung: normales\nPasswort + Nextcloud Einstellungen + Sichere deine Daten und synchronisiere sie. Mit Nextcloud kannst du Dateien, Kalender, Kontakte und mehr mit anderen teilen.\n\nHost:\n https://cloud.disroot.org\n\nBenutzername:\n "dein Disroot Benutzername"\n\nPasswort:\n "dein Disroot Passwort". + Welcome + Disroot ist eine Plattform, auf der Online-Dienste angeboten werden, die auf den Prinzipien von Freiheit, Privatsphäre, Gemeinschaft und Dezentralisierung basieren.\nDiese App ist wie ein Schweizer Taschenmesser für die Disroot-Plattform, von der Community für die Community.\nWenn du kein Disroot-Account hast, kannst du diese App trotzdem nutzen, um auf alle Disroot-Dienste zuzugreifen, die kein Konto erfordern:\n \ \ \ • Etherpad\n \ \ \ • Ethercalc\n \ \ \ • Private bin\n \ \ \ • Upload\n \ \ \ • Poll\n \ \ \ • Searx\n \ \ \ • Diaspora* (separater Diaspora Account benötigt)\n\nDie App kann Sie danach fragen weitere Apps zu installieren. Wir empfehlen F-Droid zu installieren - einen kostenlosen und quelloffenen App-Katalog - da nicht alle verwendeten Apps im Google Play Store zu finden sind und F-Droid außerdem mehr auf Datenschutz ausgerichtet ist (kein Tracking, kein Account erforderlich). Sie können F-Droid herunterladen, indem Sie auf das F-Droid-Symbol klicken.\n + + Help + License + Settings + License + GNU LGPLv3.0 License + + + + + + + Maintainers + This app is currently being developed and maintained by\n\n + https://disroot.org + * Disroot Community (Disroot): + Contributors + • muppeth:\n Disroot admin\n\n • antilopa:\n Disroot admin\n\n • Massimiliano:\n Developer\n\n • Fede:\n Content contributor\n\n • Meaz:\n Content contributor\n\n • maryjane:\n Content contributor\n\n • userdebug:\n Content contributor\n\n • jh:\n Content contributor\n\n + F-Droid + Third-Party Libraries + ckChangelog: Apache License 2.0\n\nTaponium: GNU General Public License v3.0 + Miscellaneous + We used Diolinux as our starting base to create this app. Go check it out, it\'s free software as well! + Tell me more + Application + App Version: %1$s + Device: + Contribute + Disroot app is developed free as in Freedom and follows the ideas of the Disroot Foundation. If you want to contribute, go ahead! Currently we are a very small team, so we greatly appreciate any kind of help! + Get the source + Translate + The app is not available in your language? You can change that! Why don\'t you help us by translating it? + Let me translate + Give Feedback! + Disroot app is still in development, so if you have suggestions or any kind of feedback, please let us know! + Report Bugs + Chat with us + Spread the word! + Tell your friends and family about Disroot! Why don\'t you blog about your experiences? We\'d love to hear from you! + Share the app + Disroot web + Last couple of things! + • By doing a long press on each icon you can get extra information… \n\n• The app can sync with the status page of Disroot. This means that you will receive realtime updates on issues, downtimes, scheduled maintenace and others published via https://state.disroot.org\nWe recommend to turn off battery optimization and allow Disroot app to run in the background. If you\'re not sure, you can always change the setting from the Disroot app menu later. + Diaspora* Settings + Distributed and decentralized social network. Post, share, like, create communities.\n\nUsername:\n your_diaspora_username@pod.disroot.org\n\nPassword:\n your_diaspora_password + With Etherpad write articles, press releases, to-do lists, etc. together with friends, fellow students or colleagues, all working on the same document at the same time.\nNo registration is required. + EtherPad Info + XMPP Settings\n + Conversations is a free, standard and open-source decentralized and federated instant messaging application for chatting with contacts or within groups.\n\nJabber ID :\n Your full Disroot email address\n\nPassword :\n Your Disroot password + With EtherCalc work together on inventories, survey forms, list management, brainstorming sessions and more!\nNo registration is required. + EtherCalc Info + PrivateBin Help + PrivateBin is an open-source online pastebin and discussion board. Data is encrypted/decrypted in the browser so that the server has zero knowledge of hosted data. Just paste a text, click “Send”, set expiration (and other features) and share the URL.\nNo registration is required. + Upload (powered by Lufi) Info + Upload is a file hosting software that temporarily stores encrypted files so you can share them with others using a link. All files are encrypted before they leave your computer meaning server has zero knowledge of hosted data.\nNo registration is required. + Searx Info + Searx is an anonymous multi search engine platform, aggregating the results of other search engines while not storing information about its users. No tracking, profiling, no data mining by big corporations. \nNo registration is required. + Polls Help + Framadate is an online service for planning an appointment or making a decision quickly and easily.\nNo registration is required. + Project Management Board Info + Taiga is a project management tool, developed for programmers, designers and startups working with agile methodology in mind. It can however be applied to virtually any project or group, even outside of IT realm. + User Password Management Help + Use our User Self Service Center to manage your user and password data + State Info + Page to see the current state of Disroot services. Here you can see if any service has a problem, if there are any performance issues, as well as get to know when we schedule maintenance in which time some services might be unavailable.\n\nAlternative ways to get State updates: + State on XMPP + How to Info + Our page with howtos and tutorials to help you find your way around the various Disroot services. + About Info + This is the about page of this app + Forum Help + Discourse is a fully open-source modern approach to discussion forums. It offers everything your community, group or collective needs to create their communication platform. + Did you really just try the long press on the logo? + Why? It\'s just a logo.\nDon\'t be too curious ;-) + Disroot rules \\o/ + Logo + \ \ • State on xmpp + \ \ • State on Matrix + \ \ • State on Hubzilla/diaspora/mastodon + \ \ • State updates via email + \ \ • State RSS feed + You have two XMPP clients installed! + Please choose the client you want to use for Disroot + Remember my choice + Conversations + Pix-Art Messenger + Forget my choice + Forget chat client! + TapActivity + Clear cookies + Installation request + To continue you need to install Dandelion first.\nPlease select install to continue with the installation on F-Droid. + Cancel + Install + To continue you need to install K9-Mail first.\nPlease select install to continue with the installation on F-Droid. + To continue you need to install the Nextcloud app first.\nPlease select install to continue with the installation on F-Droid. + To continue you need to install Conversations first.\nPlease select install to continue with the installation on F-Droid. + StateActivity + Disroot state + Operational + Major Outage + Email Service + "Last updated: \" + WebMail Service + Cloud + Performance Issues + No issues + Some systems are experiencing issues + Show State messages + Show Service State + Scheduled at: \ + Message from Disroot State! + Scheduled + Investigating + Identified + Nextcloud Notes Info + The notes app is a distraction free notes taking app for Nextcloud.\n\nServer Address:\n https://cloud.disroot.org\n\nUsername:\n your_disroot_username\n\nPassword:\n your_disroot_password + To continue you need to install Notes first.\nPlease select install to continue with the installation on F-Droid. + Notes + To continue you need to install Padland first.\nPlease select install to continue with the installation on F-Droid. + Do you want to exit? + Battery optimization + Battery optimization! + With this update the app can sync with the status page of Disroot. This means you will receive realtime updates on issues, downtimes, scheduled maintenace and others published via https://state.disroot.org\nWe recommend to turn off battery optimization and allow Disroot app to run in background. If you\'re not sure, you can always change the setting from the menu of the Disroot app later. + diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 1e46666..19144e6 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -28,7 +28,7 @@ Cargando… OK ¿Necesitas más ayuda? - Cuéntame más... + Cuéntame más… AboutActivity Configuración de Correo: @@ -79,8 +79,8 @@ Comenta a tus amigos y familia sobre Disroot. O por qué no escribir en un blog sobre tu experiencia. Nos encantaría conocerla. Compartir la aplicación Sitio de Disroot - Casi lo olvido… - Haciendo una presión larga sobre el ícono de cada aplicación, puedes ver información extra sobre ella. + Un par de cosas más… + • Haciendo una presión larga sobre cada ícono, puedes obtener información adicional… \n\n• La aplicación puede sincronizar con la página de estado de Disroot. Esto significa que recibirás actualizaciones en tiempo real sobre inconvenientes, caídas, mantenimientos programados y otros que fueran publicados a través de https://state.disroot.org\nRecomendamos apagar la optimización de batería y permitir a la aplicación de Disroot correr en segundo plano. Si no estás seguro, siempre puedes volver a cambiar la configuración desde el menu de la aplicación de Disroot. Configuración de Diaspora* Red social distribuida y descentralizada. Publica, comparte, crea comunidades.\nUsuario: tu_usuario_de_Diaspora@pod.disroot.org\nContraseña: tu_contraseña_de_diaspora EtherPad @@ -118,7 +118,7 @@ \ \ • Estado de Matrix \ \ • Estado de Hubzilla/Diaspora*/Mastodon \ \ • Actualización de estados por email - \ \ • Feed RSS de los Estados + We recommend to turn off battery optimization and allow Disroot app to run in background. If you\'re not sure, you can always change the setting from the menu of the Disroot app later. ¡Tienes dos clientes XMPP instalados! Por favor, elige el cliente que quieres usar para Disroot Recordar mi elección @@ -158,4 +158,7 @@ Para continuar, primero necesitas instalar Notas.\nPor favor, selecciona Instalar para continuar con la instalación desde F-Droid. Para continuar, primero necesitas instalar Padland.\nPor favor, selecciona Instalar para continuar desde F-Droid. do you want to exit? + Optimización de la batería + Optimización de la batería! + Con esta nueva versión la aplicación puede sincronizar con la página de estado de Disroot. Esto significa que recibirás actualizaciones en tiempo real sobre inconvenientes, caídas, mantenimientos programados y otros que fueran publicados a través de https://state.disroot.org\nRecomendamos apagar la optimización de batería y permitir a la aplicación de Disroot correr en segundo plano. Si no estás seguro, siempre puedes volver a cambiar la configuración desde el menu de la aplicación de Disroot. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index c6da110..dfce1f5 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -101,8 +101,8 @@ Parlez de Disroot à vos amis et à votre famille ! Pourquoi ne bloguez-vous pas sur vos expériences \? Nous adorerions recevoir de vos nouvelles ! Partager l\'application Disroot web - J\'allais presque oublier - Vous pouvez appuyer longuement sur chaque icône pour afficher des informations supplémentaires … + Dernière chose ! + Paramètres Diaspora* Réseau social distribué et décentralisé. Postez, partagez, aimez, créez des communautés. \n @@ -194,5 +194,8 @@ Pour continuer, vous devez d\'abord installer Notes.\nVeuillez sélectionner Installer pour continuer l\'installation avec F-Droid. Notes Pour continuer, vous devez d\'abord installer Padland.\nVeuillez sélectionner Installer pour continuer l\'installation avec F-Droid. - do you want to exit? + Voulez-vous quitter? + Optimisation de la batterie + Optimisation de la batterie! + Avec cette mise à jour, l\'application peut se synchroniser avec la page de statut de Disroot. Cela signifie que vous recevrez des mises à jour en temps réel sur les problèmes, les temps d\'arrêt, la maintenance programmée et d\'autres informations publiées via https://state.disroot.org\nNous vous recommandons de désactiver l\'optimisation de la batterie et d\'autoriser l\'exécution de l\'application Disroot en arrière-plan. Si vous n\'êtes pas sûr, vous pouvez toujours changer le réglage à partir du menu de l\'application Disroot plus tard. diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 76bbd59..c0b46cc 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -78,8 +78,8 @@ Racconta ai tuoi amici e familiari di Disroot! Perché non scrivi sul tuo blog le tue esperienze? Ci farebbe molto piacere sentirti! Condividi la app Disroot web - Quasi dimenticavo - È possibile premere a lungo su ogni icona per visualizzare informazioni aggiuntive.… + Le Ultime cose! + • È possibile premere a lungo su ogni icona per visualizzare informazioni aggiuntive… \n\n• L\'applicazione può sincronizzarsi con la pagina di stato di Disroot. Questo significa che riceverai in tempo reale aggiornamenti su problemi, tempi di inattività, manutenzione programmata e altri aggiornamenti pubblicati su https://state.disroot.org\nSi consiglia di disattivare l\'ottimizzazione della batteria e consentire all\'applicazione Disroot di funzionare in background. Se non si è sicuri, è sempre possibile modificare le impostazioni dal menu dell\'applicazione Disroot in un secondo momento. Impostazioni Diaspora* Rete sociale distribuita e decentralizzata. Pubblicare, condividere, tipo, creare comunità.\n\nNome utente:\n il_tuo_nome_utente_diaspora_@pod.disroot.org\n\nPassword:\n la_tua_password_diaspora Con Etherpad scrivere articoli, comunicati stampa, liste di cose da fare, ecc. insieme ad amici, compagni di studio o colleghi, tutti che lavorano sullo stesso documento allo stesso tempo.\nNon è richiesta alcuna registrazione. @@ -157,4 +157,7 @@ Note Per continuare è necessario installare Padland.\nSelezionate installa per continuare con l\'installazione su F-Droid. Vuoi veramente uscire? + Ottimizzazione batteria + Ottimizzazione batteria! + Con questo aggiornamento l\'applicazione può sincronizzarsi con la pagina di stato di Disroot. Questo significa che riceverai in tempo reale gli aggiornamenti sui problemi, i tempi di inattività, la manutenzione programmata e altri aggiornamenti pubblicati su https://state.disroot.org\nSi consiglia di disattivare l\'ottimizzazione della batteria e consentire all\'applicazione Disroot di funzionare in background. Se non si è sicuri, è sempre possibile modificare le impostazioni dal menu dell\'applicazione Disroot in un secondo momento. diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 3247e86..0dfb177 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -79,8 +79,8 @@ Vertel je vrienden en familie over Disroot! Waarom blogt je niet over jou ervaringen? We horen graag van je! Deel de app Disroot web - Ik vergat bijna - Je kan op elk pictogram lang drukken om jou extra informatie te tonen… + De laatste paar dingen! + • Je kan op elk pictogram lang drukken om jou extra informatie te tonen…• De app kan synchroniseren met de statuspagina van Disroot. Dit betekent dat u realtime updates ontvangt over issues, downtimes, gepland onderhoud en andere zaken die gepubliceerd worden via https://state.disroot.org\nWe raden aan om de batterijoptimalisatie uit te schakelen en de Disroot app op de achtergrond te laten draaien. Als u niet zeker bent, kunt u de instelling later altijd nog wijzigen vanuit het Disroot app menu. Diaspora* Instellingen Gedistribueerd en gedecentraliseerd sociaal netwerk. Plaatsen, delen, liken, gemeenschappen creëren.\n\nGebruikersnaam:\n jou_diaspora_gebruikersnaam@pod.disroot.org\n\nWachtwoord:\n jou_diaspora_wachtwoord Met Etherpad schrijf artikelen, persberichten, to-do lijsten, etc. samen met vrienden, medestudenten of collega\'s, die allemaal op hetzelfde moment aan hetzelfde document werken.\nEr is geen registratie vereist. @@ -159,4 +159,7 @@ Notes Om verder te gaan moet u eerst Padland installeren.\nSelecteer Installeren om verder te gaan met de installatie op F-Droid. Will je de app verlaten? + Batterij optimalisatie + Batterij optimalisatie! + Met deze update kan de app synchroniseren met de statuspagina van Disroot. Dit betekent dat u realtime updates ontvangt over issues, downtime, gepland onderhoud en andere zaken die gepubliceerd worden via https://state.disroot.org\nWe raden aan om de batterijoptimalisatie uit te schakelen en de Disroot app op de achtergrond te laten draaien. Als u niet zeker bent, kunt u de instelling later altijd nog wijzigen vanuit het Disroot app menu. diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 886962e..e12d4e7 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -36,11 +36,11 @@ Definições Nextcloud Mantenha os seus dados sincronizados e seguros. Com o Nextcloud pode partilhar os seus ficheiros calendários, contactos e mais.\n\nHost:\n https://cloud.disroot.org\n\nNome de utilizador:\n O_seu_nome_de_utilizador_disroot\n\nPassword:\n a_sua_password_do_disroot. Bem Vindo - O Disroot é uma plataforma baseada nos princípios de liberdade, privacidade, federação e descentralização que fornece serviços online.\nEsta aplicação é como um Canivete Suiço para a plataforma Disroot, feito pela comunidade para a comunidade.\nSe não tem uma conta Disroot pode utilizar esta aplicação para aceder a todos os serviços do Disroot que não precisam de uma conta de utilizador:\n \ \ \ • Etherpad\n \ \ \ • Ethercalc\n \ \ \ • Private bin\n \ \ \ • Upload\n \ \ \ • Poll\n \ \ \ • Searx\n \ \ \ • Diaspora* (requer uma conta apenas para o Diaspora)\n\nA aplicação pode pedir que instale outras aplicações adicionais. Nós recomendamos vivamente que instale o F-Droid - uma loja de aplicações livres e open source - porque nem todas as aplicações podem ser encontradas na Play Store Google e o F-Droid é mais focado na privacidade (sem tracking, sem preciso criar conta de utilizador) pode descarregar o F-droid carregando no ícone F-droid.\n + O Disroot é uma plataforma baseada nos princípios de liberdade, privacidade, federação e descentralização que fornece serviços online.\nEsta aplicação é como um Canivete Suíço para a plataforma Disroot, feito pela comunidade para a comunidade.\nSe não tem uma conta Disroot pode utilizar esta aplicação para aceder a todos os serviços do Disroot que não precisam de uma conta de utilizador:\n \ \ \ • Etherpad\n \ \ \ • Ethercalc\n \ \ \ • Private bin\n \ \ \ • Upload\n \ \ \ • Poll\n \ \ \ • Searx\n \ \ \ • Diaspora* (requer uma conta apenas para o Diaspora)\n\nA aplicação pode pedir que instale outras aplicações adicionais. Nós recomendamos vivamente que instale o F-Droid - uma loja de aplicações livres e open source - porque nem todas as aplicações podem ser encontradas na Play Store Google e o F-Droid é mais focado na privacidade (sem tracking, sem preciso criar conta de utilizador) pode descarregar o F-droid carregando no ícone F-droid.\n Ajuda Licença - Defenições + Definições Licença GNU LGPLv3.0 License + Podes carregar por alguns segundos em cada ícone para aparecer informação extra… Definições do Diaspora* Rede social Distribuída e Descentralizada. Postar, partilhar, criar comunidades.\n\nUsername:\n o_seu_nome_de_utilizador_no_diaspora@pod.disroot.org\n\nPassword:\n a_sua_password_diaspora Com o Etherpad pode escrever artigos, comunicados de imprensa, listas de tarefas, etc. em conjunto com outras pessoas, amigos, colegas, todos a trabalhar no mesmo documento ao mesmo tempo.\nNão é necessário ter uma conta de utilizador para usar. @@ -157,4 +157,7 @@ Notes To continue you need to install Padland first.\nPlease select install to continue with the installatin on F-Droid. do you want to exit? + Battery optimization + Battery optimization! + With this update the app can sync with the status page of Disroot. This means you will receive realtime updates on issues, downtimes, scheduled maintenace and others published via https://state.disroot.org\nWe recommend to turn off battery optimization and allow Disroot app to run in background. If you\'re not sure, you can always change the setting from the menu of the Disroot app later. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6f614bd..d5b3a74 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -54,7 +54,7 @@ https://disroot.org * Disroot Community (Disroot): Contributors - • muppeth:\n Disroot admin\n\n • antilopa:\n Disroot admin\n\n • Massimiliano:\n Developer\n\n • Fede:\n Content contributor\n\n • Meaz:\n Content contributor\n\n • maryjane:\n Content contributor\n\n • userdebug:\n Content contributor\n\n + • muppeth:\n Disroot admin\n\n • antilopa:\n Disroot admin\n\n • Massimiliano:\n Developer\n\n • Fede:\n Content contributor\n\n • Meaz:\n Content contributor\n\n • maryjane:\n Content contributor\n\n • userdebug:\n Content contributor\n\n • jh:\n Content contributor\n\n F-Droid Third-Party Libraries ckChangelog: Apache License 2.0\n\nTaponium: GNU General Public License v3.0 @@ -78,8 +78,8 @@ Tell your friends and family about Disroot! Why don\'t you blog about your experiences? We\'d love to hear from you! Share the app Disroot web - I almost forgot - You can do a long press on each icon to show you extra information… + Last couple of things! + • By doing a long press on each icon you can get extra information… \n\n• The app can sync with the status page of Disroot. This means that you will receive realtime updates on issues, downtimes, scheduled maintenace and others published via https://state.disroot.org\nWe recommend to turn off battery optimization and allow Disroot app to run in the background. If you\'re not sure, you can always change the setting from the Disroot app menu later. Diaspora* Settings Distributed and decentralized social network. Post, share, like, create communities.\n\nUsername:\n your_diaspora_username@pod.disroot.org\n\nPassword:\n your_diaspora_password With Etherpad write articles, press releases, to-do lists, etc. together with friends, fellow students or colleagues, all working on the same document at the same time.\nNo registration is required. @@ -158,4 +158,7 @@ Notes To continue you need to install Padland first.\nPlease select install to continue with the installation on F-Droid. Do you want to exit? + Battery optimization + Battery optimization! + With this update the app can sync with the status page of Disroot. This means you will receive realtime updates on issues, downtimes, scheduled maintenace and others published via https://state.disroot.org\nWe recommend to turn off battery optimization and allow Disroot app to run in background. If you\'re not sure, you can always change the setting from the menu of the Disroot app later. diff --git a/app/src/main/res/xml/changelog_master.xml b/app/src/main/res/xml/changelog_master.xml index 291e957..628cbc1 100644 --- a/app/src/main/res/xml/changelog_master.xml +++ b/app/src/main/res/xml/changelog_master.xml @@ -1,5 +1,16 @@ + + Notifications works as a service now + Added shortcut to battery optimizations in menu + Prompt for battery optimization to give user choice on first launch + Launch status service on boot time when battery optimization is turned off + + + Notifications works on Android 8 and higher now + Added Disroot purple light notification + Updated Serbian translation + Fixed App closing when pressing go back Edited state error message