remove multiacc (it's already in the client)

This commit is contained in:
aliveoutside
2022-06-19 07:02:55 +03:00
parent 5b91699c69
commit 32b854baf8
6 changed files with 1 additions and 374 deletions
@@ -2,9 +2,6 @@ package ru.vtosters.lite.ui.fragments;
import static bruhcollective.itaysonlab.libvkx.client.LibVKXClient.isIntegrationEnabled;
import static ru.vtosters.lite.f0x1d.VTVerifications.vtverif;
import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.getCurrentAccount;
import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.withRegex;
import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.workingAccounts;
import static ru.vtosters.lite.utils.About.getBuildNumber;
import static ru.vtosters.lite.utils.About.getCommitLink;
import static ru.vtosters.lite.utils.CacheUtils.humanReadableByteCountBin;
@@ -55,7 +52,6 @@ import ru.vtosters.lite.ui.PreferencesUtil;
import ru.vtosters.lite.ui.dialogs.OTADialog;
import ru.vtosters.lite.ui.fragments.dockbar.DockBarFragment;
import ru.vtosters.lite.ui.fragments.dockbar.DockBarManager;
import ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountFragment;
import ru.vtosters.lite.ui.fragments.tgstickers.StickersFragment;
import ru.vtosters.lite.utils.CacheUtils;
import ru.vtosters.lite.utils.Globals;
@@ -81,7 +77,6 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
String interfacesumm = getValAsString("vtlinterfacesumm", shortinfo());
String proxysumm = getValAsString("vtlproxysumm", !getPrefsValue("proxy").equals("noproxy"));
String othersumm = getValAsString("vtlothersumm", vtverif());
String multiaccsumm = getMultiAccsumm();
String ssfs = getSSFSsumm();
String about = "Commit: " + getBuildNumber();
@@ -91,18 +86,11 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
if (vkme()) {
PreferencesUtil.addPreferenceDrawable(this, "", name, id, drawableFromUrl(avatarUrl), preference -> {
Context context = getContext();
Intent a2 = new Navigator(MultiAccountFragment.class).b(context);
Intent a2 = new Navigator(SettingsAccountFragment.class).b(context);
context.startActivity(a2);
return false;
});
} else {
PreferencesUtil.addPreference(this, "", Globals.getString("accounts"), multiaccsumm, "ic_user_24", preference -> {
Context context = getContext();
Intent a2 = new Navigator(MultiAccountFragment.class).b(context);
context.startActivity(a2);
return false;
});
PreferencesUtil.addPreferenceCategory(this, Globals.getString("vtsettdarktheme"));
}
@@ -391,12 +379,6 @@ public class VTSettings extends MaterialPreferenceToolbarFragment {
return Globals.getString("vtltgssumm") + ": " + TelegramStickersService.getInstance(Globals.getContext()).getPacksListReference().size();
}
public static String getMultiAccsumm() {
if(disableSettingsSumms() || workingAccounts() <= 1) return "";
return Globals.getString("vtlmultiaccsumm") + ": " + workingAccounts();
}
@Override
public int T4() {
return getIdentifier("notification_settings", "string");
@@ -1,13 +0,0 @@
package ru.vtosters.lite.ui.fragments.multiaccount;
class MultiAccountItem {
public String nickname;
public String imageUrl;
public int index;
public MultiAccountItem(String name, String imageUrl, int index) {
this.nickname = name;
this.imageUrl = imageUrl;
this.index = index;
}
}
@@ -1,182 +0,0 @@
package ru.vtosters.lite.ui.fragments.multiaccount;
import static ru.vtosters.lite.utils.Globals.convertDpToPixel;
import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Globals.getResources;
import static ru.vtosters.lite.utils.Globals.getString;
import static ru.vtosters.lite.utils.Globals.isNetworkConnected;
import static ru.vtosters.lite.utils.Globals.restartApplication;
import static ru.vtosters.lite.utils.Themes.getTextAttr;
import static ru.vtosters.lite.utils.Themes.recolorDrawable;
import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.vk.audio.AudioMessageUtils;
import com.vk.auth.api.VKAccount;
import com.vk.core.util.AppContextHolder;
import com.vk.imageloader.VKImageLoader;
import com.vk.imageloader.view.VKCircleImageView;
import com.vk.pushes.PushSubscriber;
import com.vtosters.lite.R;
import com.vtosters.lite.auth.VKAccountManager;
import com.vtosters.lite.im.ImEngineProvider;
import java.util.List;
public class MultiAccountAdapter extends RecyclerView.a<MultiAccountAdapter.MultiAccountViewHolder> {
private final List<MultiAccountItem> mAccounts = MultiAccountManager.buildList();
@Override
public MultiAccountViewHolder b(ViewGroup parent, int viewType) {
RelativeLayout layout = new RelativeLayout(parent.getContext());
layout.setPadding(
convertDpToPixel(12),
convertDpToPixel(6),
convertDpToPixel(6),
convertDpToPixel(6)
);
VKCircleImageView avatar = new VKCircleImageView(parent.getContext());
avatar.setId(1);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
convertDpToPixel(48),
convertDpToPixel(48)
);
params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
params.addRule(RelativeLayout.CENTER_VERTICAL);
layout.addView(avatar, params);
TextView nickname = new TextView(parent.getContext());
nickname.setId(2);
nickname.setPaddingRelative(
convertDpToPixel(12),
0,
0,
0
);
nickname.setEllipsize(TextUtils.TruncateAt.END);
nickname.setSingleLine(true);
nickname.setTextSize(15.0f);
nickname.setTextColor(getTextAttr());
nickname.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(-2, -2);
params1.addRule(RelativeLayout.CENTER_VERTICAL);
params1.addRule(RelativeLayout.RIGHT_OF, 1);
layout.addView(nickname, params1);
ImageButton action = new ImageButton(parent.getContext());
action.setId(3);
action.setBackgroundResource(com.vtosters.lite.R.drawable.rounded_list_selector);
Drawable drawable = recolorDrawable(getResources().getDrawable(R.drawable.ic_list_remove));
action.setImageDrawable(drawable);
RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(
convertDpToPixel(48),
convertDpToPixel(48)
);
params2.addRule(RelativeLayout.CENTER_VERTICAL);
params2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
layout.addView(action, params2);
return new MultiAccountViewHolder(layout);
}
@Override
public void a(MultiAccountViewHolder holder, int pos) {
holder.bind(pos == 0 ? null : mAccounts.get(pos - 1), pos);
}
@Override
public int au_() {
return mAccounts.size() + 1;
}
static class MultiAccountViewHolder extends RecyclerView.x {
private final RelativeLayout mContainer;
private final VKCircleImageView mAvatar;
private final TextView mNickname;
private final ImageButton mAction;
public MultiAccountViewHolder(View view) {
super(view);
mContainer = (RelativeLayout) view;
mAvatar = view.findViewById(1);
mNickname = view.findViewById(2);
mAction = view.findViewById(3);
}
public void bind(MultiAccountItem item, int pos) {
if (pos == 0) {
mNickname.setText(getString("add_another_account"));
mContainer.setOnClickListener(v -> {
MultiAccountManager.addAccount();
VKImageLoader.b();
ImEngineProvider.a().h();
AudioMessageUtils.j();
FileUtils.l();
VKAccount b = VKAccountManager.b();
PushSubscriber.a.a(b.b(), b.c());
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
prefs.edit().clear().commit();
restartApplication();
});
Drawable drawable = recolorDrawable(getResources().getDrawable(R.drawable.ic_list_add));
mAction.setImageDrawable(drawable);
mAction.setClickable(false);
} else {
mContainer.setOnClickListener(v -> {
MultiAccountManager.switchAccount(item.index);
VKImageLoader.b();
ImEngineProvider.a().h();
AudioMessageUtils.j();
FileUtils.l();
VKAccount b = VKAccountManager.b();
PushSubscriber.a.a(b.b(), b.c());
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
prefs.edit().clear().commit();
restartApplication();
});
if (isNetworkConnected())
mAvatar.a(item.imageUrl);
else
mAvatar.a(R.drawable.vkim_ic_placeholder_user_square_64dp);
mNickname.setText(item.nickname);
mAction.setOnClickListener(v -> {
MultiAccountManager.deleteAccount(item.index);
VKImageLoader.b();
ImEngineProvider.a().h();
AudioMessageUtils.j();
FileUtils.l();
VKAccount b = VKAccountManager.b();
PushSubscriber.a.a(b.b(), b.c());
AppContextHolder.a.getSharedPreferences("gcm", 0).edit().clear().apply();
SharedPreferences prefs = getContext().getSharedPreferences("stickers", Context.MODE_PRIVATE);
prefs.edit().clear().commit();
restartApplication();
});
}
}
}
}
@@ -1,43 +0,0 @@
package ru.vtosters.lite.ui.fragments.multiaccount;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.vk.core.fragments.FragmentImpl.a;
import me.grishka.appkit.fragments.ToolbarFragment;
public class MultiAccountFragment extends ToolbarFragment {
private RecyclerView mRecyclerView;
private MultiAccountAdapter mAdapter;
@Override
public View d(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle bundle) {
LinearLayout layout = new LinearLayout(n());
mRecyclerView = new RecyclerView(n());
mRecyclerView.setLayoutManager(new LinearLayoutManager(n()));
mAdapter = new MultiAccountAdapter();
mRecyclerView.setAdapter(mAdapter);
layout.addView(mRecyclerView, new LinearLayout.LayoutParams(-1, -1));
return layout;
}
@Override
public void a(View arg0, Bundle arg1) {
o_(true);
super.a(arg0, arg1);
a(getString("accounts"));
}
}
@@ -1,116 +0,0 @@
package ru.vtosters.lite.ui.fragments.multiaccount;
import static ru.vtosters.lite.utils.Globals.getContext;
import static ru.vtosters.lite.utils.Globals.getPreferences;
import android.content.Context;
import android.content.SharedPreferences;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import ru.vtosters.lite.utils.Globals;
public class MultiAccountManager {
public static void migrate() {
SharedPreferences OldPrefs = getContext().getSharedPreferences("pref_account_manager", Context.MODE_PRIVATE);
String OldPrefsValue = OldPrefs.getString("key_vk_account", "");
SharedPreferences NewPrefs = getContext().getSharedPreferences("pref_account_manager0", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = NewPrefs.edit();
editor.putString("key_vk_account", OldPrefsValue);
editor.commit();
}
public static void migrationRestart() {
SharedPreferences prefs = getPreferences();
if (prefs.getBoolean("multiaccount_restart", true)) {
prefs.edit().putBoolean("multiaccount_restart", false).commit();
Globals.restartApplication();
}
}
public static SharedPreferences getCurrentAccount() {
int account = getPreferences().getInt("account", 0);
return getContext().getSharedPreferences("pref_account_manager" + (account != 0 ? account : ""), Context.MODE_PRIVATE);
}
public static int getAccountPrefsCount() {
File[] prefs = new File(getContext().getFilesDir().getParent(), "shared_prefs")
.listFiles((dir, name) -> {
return name.matches("pref_account_manager\\d+\\.xml");
});
return prefs != null ? prefs.length : 0;
}
public static String withRegex(String base, String regex, String def) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(base);
if (matcher.find()) {
return matcher.group(1);
}
return def;
}
public static List<MultiAccountItem> buildList() {
List<MultiAccountItem> list = new ArrayList<>();
for (int i = 0; i <= workingAccounts(); i++) {
SharedPreferences prefs = getContext().getSharedPreferences("pref_account_manager" + i, Context.MODE_PRIVATE);
String keyVKAccount = prefs.getString("key_vk_account", "");
if (!keyVKAccount.isEmpty()) {
String name = withRegex(keyVKAccount, ".*\"name\":\\{.*?:\"(.*?)\"\\}.*", "");
String avatarUrl = withRegex(keyVKAccount, ".*\"photo\":\\{.*?:\"(.*?)\"\\}.*", "https://vk.com/images/camera_200.png")
.replace("\\/", "/");
list.add(new MultiAccountItem(
name, avatarUrl, i
));
}
}
return list;
}
public static int workingAccounts() {
int count = 0;
for (int i = 0; i <= getAccountPrefsCount(); i++) {
SharedPreferences prefs = getContext().getSharedPreferences("pref_account_manager" + i, Context.MODE_PRIVATE);
String keyVKAccount = prefs.getString("key_vk_account", "");
if (!keyVKAccount.isEmpty()) {
++count;
}
}
return count;
}
public static boolean switchAccount(int i) {
int account = getPreferences().getInt("account", 0);
if (account == i) return false;
getPreferences().edit().putInt("account", i).commit();
return true;
}
public static void addAccount() {
getPreferences().edit().putInt("account", workingAccounts() + 1).commit();
}
public static void deleteAccount(int i) {
int account = getPreferences().getInt("account", 0);
SharedPreferences prefs = getContext().getSharedPreferences("pref_account_manager" + i, Context.MODE_PRIVATE);
prefs.edit().clear().commit();
File file = new File(new File(getContext().getFilesDir().getParent(), "shared_prefs"), "pref_account_manager" + i);
if (file.exists()) file.delete();
if (account == i && getAccountPrefsCount() > 0) {
List<MultiAccountItem> accounts = buildList();
if (accounts.size() > 0)
switchAccount(buildList().get(0).index);
else {
getContext().getSharedPreferences("pref_account_manager", Context.MODE_PRIVATE)
.edit().clear().commit();
Globals.getPreferences().edit().putBoolean("multiaccount_restart", true).commit();
}
}
}
}
@@ -4,7 +4,6 @@ import static android.os.Build.VERSION;
import static java.lang.Long.MAX_VALUE;
import static ru.vtosters.lite.f0x1d.VTVerifications.hasPrometheus;
import static ru.vtosters.lite.f0x1d.VTVerifications.isVerified;
import static ru.vtosters.lite.ui.fragments.multiaccount.MultiAccountManager.migrate;
import static ru.vtosters.lite.utils.CacheUtils.getInstance;
import static ru.vtosters.lite.utils.DeletedMessagesHandler.reloadMessagesList;
import static ru.vtosters.lite.utils.Globals.fixGapps;