Add account deletion action
This commit is contained in:
parent
db0d689f10
commit
a9fc9799fc
@ -3,19 +3,28 @@ package com.readrops.app.activities;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import androidx.databinding.DataBindingUtil;
|
import androidx.databinding.DataBindingUtil;
|
||||||
|
import androidx.lifecycle.ViewModelProviders;
|
||||||
|
|
||||||
|
import com.afollestad.materialdialogs.MaterialDialog;
|
||||||
import com.readrops.app.R;
|
import com.readrops.app.R;
|
||||||
import com.readrops.app.database.entities.Account;
|
import com.readrops.app.database.entities.Account;
|
||||||
import com.readrops.app.databinding.ActivityAccountSettingsBinding;
|
import com.readrops.app.databinding.ActivityAccountSettingsBinding;
|
||||||
|
import com.readrops.app.viewmodels.AccountViewModel;
|
||||||
|
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
|
import io.reactivex.observers.DisposableCompletableObserver;
|
||||||
|
import io.reactivex.schedulers.Schedulers;
|
||||||
|
|
||||||
public class AccountSettingsActivity extends AppCompatActivity {
|
public class AccountSettingsActivity extends AppCompatActivity {
|
||||||
|
|
||||||
public static final String ACCOUNT = "ACCOUNT";
|
public static final String ACCOUNT = "ACCOUNT";
|
||||||
|
|
||||||
private ActivityAccountSettingsBinding binding;
|
private ActivityAccountSettingsBinding binding;
|
||||||
|
private AccountViewModel viewModel;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -26,6 +35,8 @@ public class AccountSettingsActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
setTitle(account.getAccountName());
|
setTitle(account.getAccountName());
|
||||||
|
|
||||||
|
viewModel = ViewModelProviders.of(this).get(AccountViewModel.class);
|
||||||
|
|
||||||
binding.accountSettingsFeeds.setOnClickListener(v -> {
|
binding.accountSettingsFeeds.setOnClickListener(v -> {
|
||||||
Intent intent = new Intent(getApplication(), ManageFeedsFoldersActivity.class);
|
Intent intent = new Intent(getApplication(), ManageFeedsFoldersActivity.class);
|
||||||
intent.putExtra(ManageFeedsFoldersActivity.ACCOUNT, account);
|
intent.putExtra(ManageFeedsFoldersActivity.ACCOUNT, account);
|
||||||
@ -40,6 +51,31 @@ public class AccountSettingsActivity extends AppCompatActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
binding.accountSettingsDeleteAccount.setOnClickListener(v -> deleteAccount(account));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void deleteAccount(Account account) {
|
||||||
|
new MaterialDialog.Builder(this)
|
||||||
|
.title(R.string.delete_account_question)
|
||||||
|
.positiveText(R.string.validate)
|
||||||
|
.negativeText(R.string.cancel)
|
||||||
|
.onPositive(((dialog, which) -> viewModel.delete(account)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe(new DisposableCompletableObserver() {
|
||||||
|
@Override
|
||||||
|
public void onComplete() {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onError(Throwable e) {
|
||||||
|
Toast.makeText(AccountSettingsActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
})))
|
||||||
|
.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -46,6 +46,7 @@ import com.readrops.app.utils.SharedPreferencesManager;
|
|||||||
import com.readrops.app.viewmodels.MainViewModel;
|
import com.readrops.app.viewmodels.MainViewModel;
|
||||||
import com.readrops.app.views.MainItemListAdapter;
|
import com.readrops.app.views.MainItemListAdapter;
|
||||||
|
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -137,58 +138,58 @@ public class MainActivity extends AppCompatActivity implements SwipeRefreshLayou
|
|||||||
});
|
});
|
||||||
|
|
||||||
drawerManager.setHeaderListener((view, profile, current) -> {
|
drawerManager.setHeaderListener((view, profile, current) -> {
|
||||||
if (!current) {
|
if (!current) {
|
||||||
int id = (int) profile.getIdentifier();
|
int id = (int) profile.getIdentifier();
|
||||||
|
|
||||||
switch (id) {
|
switch (id) {
|
||||||
case DrawerManager.ADD_ACCOUNT_ID:
|
case DrawerManager.ADD_ACCOUNT_ID:
|
||||||
Intent intent = new Intent(this, AccountTypeListActivity.class);
|
Intent intent = new Intent(this, AccountTypeListActivity.class);
|
||||||
intent.putExtra("fromMainActivity", true);
|
intent.putExtra("fromMainActivity", true);
|
||||||
startActivityForResult(intent, ADD_ACCOUNT_REQUEST);
|
startActivityForResult(intent, ADD_ACCOUNT_REQUEST);
|
||||||
break;
|
break;
|
||||||
case DrawerManager.ACCOUNT_SETTINGS_ID:
|
case DrawerManager.ACCOUNT_SETTINGS_ID:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (!updating) {
|
if (!updating) {
|
||||||
viewModel.setCurrentAccount(id);
|
viewModel.setCurrentAccount(id);
|
||||||
updateDrawerFeeds();
|
updateDrawerFeeds();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
} else {
|
|
||||||
Intent intent = new Intent(this, AccountSettingsActivity.class);
|
|
||||||
intent.putExtra(AccountSettingsActivity.ACCOUNT, viewModel.getCurrentAccount());
|
|
||||||
startActivity(intent);
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
return true;
|
Intent intent = new Intent(this, AccountSettingsActivity.class);
|
||||||
});
|
intent.putExtra(AccountSettingsActivity.ACCOUNT, viewModel.getCurrentAccount());
|
||||||
|
startActivity(intent);
|
||||||
Account currentAccount = getIntent().getParcelableExtra(ACCOUNT_KEY);
|
|
||||||
|
|
||||||
if (currentAccount != null) { // first account created
|
|
||||||
List<Account> accounts = new ArrayList<>();
|
|
||||||
accounts.add(currentAccount);
|
|
||||||
|
|
||||||
viewModel.setAccounts(accounts);
|
|
||||||
|
|
||||||
drawer = drawerManager.buildDrawer(accounts);
|
|
||||||
|
|
||||||
if (!viewModel.isAccountLocal()) {
|
|
||||||
refreshLayout.setRefreshing(true);
|
|
||||||
onRefresh();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} else { // last current account
|
return true;
|
||||||
viewModel.getAllAccounts().observe(this, accounts -> {
|
});
|
||||||
if (viewModel.getCurrentAccount() == null) {
|
|
||||||
viewModel.setAccounts(accounts);
|
|
||||||
|
|
||||||
drawer = drawerManager.buildDrawer(accounts);
|
Account currentAccount = getIntent().getParcelableExtra(MainActivity.ACCOUNT_KEY);
|
||||||
updateDrawerFeeds();
|
WeakReference<Account> accountWeakReference = new WeakReference<>(currentAccount);
|
||||||
}
|
|
||||||
});
|
viewModel.getAllAccounts().observe(this, accounts -> {
|
||||||
}
|
viewModel.setAccounts(accounts);
|
||||||
|
|
||||||
|
if (drawer == null) {
|
||||||
|
drawer = drawerManager.buildDrawer(accounts);
|
||||||
|
updateDrawerFeeds();
|
||||||
|
} else if (accounts.size() < drawerManager.getNumberOfProfiles() && accounts.size() > 0) {
|
||||||
|
drawerManager.updateHeader(accounts);
|
||||||
|
updateDrawerFeeds();
|
||||||
|
} else if (accounts.size() == 0) {
|
||||||
|
Intent intent = new Intent(this, AccountTypeListActivity.class);
|
||||||
|
startActivity(intent);
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (accountWeakReference.get() != null && !(accountWeakReference.get().getAccountType() == Account.AccountType.LOCAL)) {
|
||||||
|
refreshLayout.setRefreshing(true);
|
||||||
|
onRefresh();
|
||||||
|
accountWeakReference.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleDrawerClick(IDrawerItem drawerItem) {
|
private void handleDrawerClick(IDrawerItem drawerItem) {
|
||||||
@ -502,7 +503,7 @@ public class MainActivity extends AppCompatActivity implements SwipeRefreshLayou
|
|||||||
}
|
}
|
||||||
|
|
||||||
drawerManager.resetItems();
|
drawerManager.resetItems();
|
||||||
drawerManager.addAccount(newAccount);
|
drawerManager.addAccount(newAccount, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -576,7 +577,6 @@ public class MainActivity extends AppCompatActivity implements SwipeRefreshLayou
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
getMenuInflater().inflate(R.menu.item_list_menu, menu);
|
getMenuInflater().inflate(R.menu.item_list_menu, menu);
|
||||||
|
@ -2,6 +2,7 @@ package com.readrops.app.database.dao;
|
|||||||
|
|
||||||
import androidx.lifecycle.LiveData;
|
import androidx.lifecycle.LiveData;
|
||||||
import androidx.room.Dao;
|
import androidx.room.Dao;
|
||||||
|
import androidx.room.Delete;
|
||||||
import androidx.room.Insert;
|
import androidx.room.Insert;
|
||||||
import androidx.room.Query;
|
import androidx.room.Query;
|
||||||
import androidx.room.Update;
|
import androidx.room.Update;
|
||||||
@ -28,6 +29,9 @@ public interface AccountDao {
|
|||||||
@Update
|
@Update
|
||||||
void update(Account account);
|
void update(Account account);
|
||||||
|
|
||||||
|
@Delete
|
||||||
|
void delete(Account account);
|
||||||
|
|
||||||
@Query("Update Account set last_modified = :lastModified Where id = :accountId")
|
@Query("Update Account set last_modified = :lastModified Where id = :accountId")
|
||||||
void updateLastModified(int accountId, long lastModified);
|
void updateLastModified(int accountId, long lastModified);
|
||||||
|
|
||||||
|
@ -4,6 +4,7 @@ import android.os.Parcel;
|
|||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
import androidx.annotation.DrawableRes;
|
import androidx.annotation.DrawableRes;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.StringRes;
|
import androidx.annotation.StringRes;
|
||||||
import androidx.room.ColumnInfo;
|
import androidx.room.ColumnInfo;
|
||||||
import androidx.room.Entity;
|
import androidx.room.Entity;
|
||||||
@ -149,7 +150,7 @@ public class Account implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String getLoginKey() {
|
public String getLoginKey() {
|
||||||
return accountType.name() + "_login_" + id ;
|
return accountType.name() + "_login_" + id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getPasswordKey() {
|
public String getPasswordKey() {
|
||||||
@ -180,8 +181,10 @@ public class Account implements Parcelable {
|
|||||||
FEEDLY(R.drawable.ic_feedly, R.string.feedly),
|
FEEDLY(R.drawable.ic_feedly, R.string.feedly),
|
||||||
FRESHRSS(R.drawable.ic_freshrss, R.string.freshrss);
|
FRESHRSS(R.drawable.ic_freshrss, R.string.freshrss);
|
||||||
|
|
||||||
private @DrawableRes int iconRes;
|
private @DrawableRes
|
||||||
private @StringRes int name;
|
int iconRes;
|
||||||
|
private @StringRes
|
||||||
|
int name;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeToParcel(Parcel dest, int flags) {
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
@ -205,11 +208,13 @@ public class Account implements Parcelable {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public @DrawableRes int getIconRes() {
|
public @DrawableRes
|
||||||
|
int getIconRes() {
|
||||||
return iconRes;
|
return iconRes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public @StringRes int getName() {
|
public @StringRes
|
||||||
|
int getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,4 +227,14 @@ public class Account implements Parcelable {
|
|||||||
public Credentials toCredentials() {
|
public Credentials toCredentials() {
|
||||||
return new Credentials(login, password, url);
|
return new Credentials(login, password, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(@Nullable Object obj) {
|
||||||
|
if (obj == null)
|
||||||
|
return false;
|
||||||
|
else if (!(obj instanceof Account))
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
return this.id == ((Account) obj).getId();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -212,11 +212,33 @@ public class DrawerManager {
|
|||||||
drawer.addItem(new DividerDrawerItem());
|
drawer.addItem(new DividerDrawerItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addAccount(Account account) {
|
public void addAccount(Account account, boolean currentProfile) {
|
||||||
ProfileDrawerItem profileItem = createProfileItem(account);
|
ProfileDrawerItem profileItem = createProfileItem(account);
|
||||||
|
|
||||||
header.addProfiles(profileItem);
|
header.addProfiles(profileItem);
|
||||||
header.setActiveProfile(profileItem.getIdentifier());
|
|
||||||
|
if (currentProfile)
|
||||||
|
header.setActiveProfile(profileItem.getIdentifier());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateHeader(List<Account> accounts) {
|
||||||
|
header.clear();
|
||||||
|
|
||||||
|
for (Account account : accounts) {
|
||||||
|
addAccount(account, account.isCurrentAccount());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNumberOfProfiles() {
|
||||||
|
List<IProfile> profiles = header.getProfiles();
|
||||||
|
|
||||||
|
int number = 0;
|
||||||
|
for (IProfile profile : profiles) {
|
||||||
|
if (profile instanceof ProfileDrawerItem)
|
||||||
|
number++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return number;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resetItems() {
|
public void resetItems() {
|
||||||
|
@ -44,6 +44,13 @@ public class AccountViewModel extends AndroidViewModel {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Completable delete(Account account) {
|
||||||
|
return Completable.create(emitter -> {
|
||||||
|
database.accountDao().delete(account);
|
||||||
|
emitter.onComplete();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public Single<Integer> getAccountCountByAccountType(int accountTypeCode) {
|
public Single<Integer> getAccountCountByAccountType(int accountTypeCode) {
|
||||||
return Single.create(emitter -> emitter.onSuccess(database.accountDao().getAccountCountByType(accountTypeCode)));
|
return Single.create(emitter -> emitter.onSuccess(database.accountDao().getAccountCountByType(accountTypeCode)));
|
||||||
}
|
}
|
||||||
|
@ -218,15 +218,24 @@ public class MainViewModel extends AndroidViewModel {
|
|||||||
public void setAccounts(List<Account> accounts) {
|
public void setAccounts(List<Account> accounts) {
|
||||||
this.accounts = accounts;
|
this.accounts = accounts;
|
||||||
|
|
||||||
|
boolean currentAccountExists = false;
|
||||||
|
|
||||||
for (Account account1 : accounts) {
|
for (Account account1 : accounts) {
|
||||||
if (account1.isCurrentAccount()) {
|
if (account1.isCurrentAccount()) {
|
||||||
currentAccount = account1;
|
currentAccount = account1;
|
||||||
|
currentAccountExists = true;
|
||||||
|
|
||||||
setRepository(currentAccount.getAccountType());
|
setRepository(currentAccount.getAccountType());
|
||||||
queryBuilder.setAccountId(currentAccount.getId());
|
queryBuilder.setAccountId(currentAccount.getId());
|
||||||
buildPagedList();
|
buildPagedList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!currentAccountExists && accounts.size() > 0) {
|
||||||
|
setCurrentAccount(accounts.get(0));
|
||||||
|
accounts.get(0).setCurrentAccount(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAccountLocal() {
|
public boolean isAccountLocal() {
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="1dp"
|
android:layout_height="0.5dp"
|
||||||
android:background="@drawable/cell_separator"
|
android:background="@drawable/cell_separator"
|
||||||
app:layout_constraintBottom_toTopOf="@id/account_settings_account"
|
app:layout_constraintBottom_toTopOf="@id/account_settings_account"
|
||||||
app:layout_constraintTop_toBottomOf="@id/account_settings_feeds" />
|
app:layout_constraintTop_toBottomOf="@id/account_settings_feeds" />
|
||||||
@ -49,6 +49,29 @@
|
|||||||
android:text="@string/account" />
|
android:text="@string/account" />
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0.5dp"
|
||||||
|
android:background="@drawable/cell_separator"
|
||||||
|
app:layout_constraintBottom_toTopOf="@id/account_settings_delete_account"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/account_settings_account" />
|
||||||
|
|
||||||
|
<RelativeLayout
|
||||||
|
android:id="@+id/account_settings_delete_account"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:background="?android:attr/selectableItemBackground"
|
||||||
|
android:padding="10dp"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/account_settings_account">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
style="@style/TextAppearance.AppCompat.Subhead"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:text="@string/delete_account" />
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
||||||
</layout>
|
</layout>
|
@ -66,5 +66,7 @@
|
|||||||
<string name="feeds">Flux</string>
|
<string name="feeds">Flux</string>
|
||||||
<string name="edit_folder">Modifier le dossier</string>
|
<string name="edit_folder">Modifier le dossier</string>
|
||||||
<string name="delete_folder">Supprimer le dossier ?</string>
|
<string name="delete_folder">Supprimer le dossier ?</string>
|
||||||
|
<string name="delete_account">Supprimer le compte</string>
|
||||||
|
<string name="delete_account_question">Supprimer le compte ?</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
@ -71,4 +71,6 @@
|
|||||||
<string name="feeds">Feeds</string>
|
<string name="feeds">Feeds</string>
|
||||||
<string name="edit_folder">Edit folder</string>
|
<string name="edit_folder">Edit folder</string>
|
||||||
<string name="delete_folder">Delete folder ?</string>
|
<string name="delete_folder">Delete folder ?</string>
|
||||||
|
<string name="delete_account">Delete account</string>
|
||||||
|
<string name="delete_account_question">Delete account ?</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user