Made reconnect to the network without need restart app

This commit is contained in:
ChronosX88 2019-04-29 19:39:29 +04:00
parent 1192ee3e9e
commit 6181665938
9 changed files with 129 additions and 28 deletions

View File

@ -61,7 +61,4 @@ dependencies {
} }
repositories { repositories {
mavenCentral() mavenCentral()
}
configurations {
all*.exclude group: 'com.google.guava', module:'listenablefuture'
} }

View File

@ -54,7 +54,10 @@ interface CoreContracts {
fun onDestroy() fun onDestroy()
} }
interface IMainViewContract// interface IMainViewContract {
fun showSnackbar(message: String)
fun showProgressBar(state: Boolean)
}
// -----ChatActivity----- // -----ChatActivity-----

View File

@ -1,24 +0,0 @@
package io.github.chronosx88.influence.presenters;
import io.github.chronosx88.influence.contracts.CoreContracts;
import io.github.chronosx88.influence.logic.MainLogic;
public class MainPresenter implements CoreContracts.IMainPresenterContract {
private CoreContracts.IMainLogicContract logic;
private CoreContracts.IMainViewContract view;
public MainPresenter(CoreContracts.IMainViewContract view) {
this.view = view;
logic = new MainLogic();
}
@Override
public void initPeer() {
logic.initPeer();
}
@Override
public void onDestroy() {
logic.shutdownPeer();
}
}

View File

@ -0,0 +1,23 @@
package io.github.chronosx88.influence.presenters
import io.github.chronosx88.influence.R
import io.github.chronosx88.influence.contracts.CoreContracts
import io.github.chronosx88.influence.helpers.AppHelper
import io.github.chronosx88.influence.logic.MainLogic
class MainPresenter(private val view: CoreContracts.IMainViewContract) : CoreContracts.IMainPresenterContract {
private val logic: CoreContracts.IMainLogicContract = MainLogic()
override fun initPeer() {
if (AppHelper.getPeerDHT() == null) {
logic.initPeer()
} else {
view.showSnackbar(AppHelper.getContext().getString(R.string.node_already_running))
view.showProgressBar(false)
}
}
override fun onDestroy() {
logic.shutdownPeer()
}
}

View File

@ -2,16 +2,23 @@ package io.github.chronosx88.influence.views;
import android.app.ProgressDialog; import android.app.ProgressDialog;
import android.os.Bundle; import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast; import android.widget.Toast;
import com.google.android.material.bottomnavigation.BottomNavigationView; import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.snackbar.Snackbar;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction; import androidx.fragment.app.FragmentTransaction;
import org.jetbrains.annotations.NotNull;
import io.github.chronosx88.influence.R; import io.github.chronosx88.influence.R;
import io.github.chronosx88.influence.contracts.CoreContracts; import io.github.chronosx88.influence.contracts.CoreContracts;
import io.github.chronosx88.influence.contracts.observer.IObserver; import io.github.chronosx88.influence.contracts.observer.IObserver;
@ -130,4 +137,47 @@ public class MainActivity extends AppCompatActivity implements IObserver, CoreCo
} }
} }
} }
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_actionbar_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId() == R.id.action_reconnect_network) {
progressDialog.show();
presenter.initPeer();
}
return true;
}
@Override
public void showSnackbar(@NotNull String message) {
Snackbar.make(getRootView(), message, Snackbar.LENGTH_LONG)
.show();
}
@Override
public void showProgressBar(boolean state) {
if(state) {
progressDialog.show();
} else {
progressDialog.dismiss();
}
}
private View getRootView() {
final ViewGroup contentViewGroup = findViewById(android.R.id.content);
View rootView = null;
if(contentViewGroup != null)
rootView = contentViewGroup.getChildAt(0);
if(rootView == null)
rootView = getWindow().getDecorView().getRootView();
return rootView;
}
} }

View File

@ -0,0 +1,22 @@
<!--
~ Copyright (C) 2019 ChronosX88
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M12,6v3l4,-4 -4,-4v3c-4.42,0 -8,3.58 -8,8 0,1.57 0.46,3.03 1.24,4.26L6.7,14.8c-0.45,-0.83 -0.7,-1.79 -0.7,-2.8 0,-3.31 2.69,-6 6,-6zM18.76,7.74L17.3,9.2c0.44,0.84 0.7,1.79 0.7,2.8 0,3.31 -2.69,6 -6,6v-3l-4,4 4,4v-3c4.42,0 8,-3.58 8,-8 0,-1.57 -0.46,-3.03 -1.24,-4.26z"/>
</vector>

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2019 ChronosX88
~
~ This program is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ This program is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with this program. If not, see <https://www.gnu.org/licenses/>.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_reconnect_network"
app:showAsAction="always"
android:icon="@drawable/ic_autorenew_white_24dp"
android:title="@string/reconnect_network"/>
</menu>

View File

@ -7,4 +7,6 @@
<string name="cancel">Отмена</string> <string name="cancel">Отмена</string>
<string name="username_settings">Ваше имя пользователя</string> <string name="username_settings">Ваше имя пользователя</string>
<string name="username_hint">Имя пользователя</string> <string name="username_hint">Имя пользователя</string>
<string name="reconnect_network">Переподключиться к сети</string>
<string name="node_already_running">Узел уже запущен</string>
</resources> </resources>

View File

@ -6,4 +6,6 @@
<string name="cancel">Cancel</string> <string name="cancel">Cancel</string>
<string name="username_settings">Your username</string> <string name="username_settings">Your username</string>
<string name="username_hint">Username</string> <string name="username_hint">Username</string>
<string name="reconnect_network">Reconnect to the network</string>
<string name="node_already_running">Node already running</string>
</resources> </resources>