From d83033e983487068a8905c1330124da9fdab14be Mon Sep 17 00:00:00 2001 From: gdlbo <41114720+gdlbo@users.noreply.github.com> Date: Sat, 10 Sep 2022 23:49:32 +0300 Subject: [PATCH] contacts hack --- .../lite/ui/fragments/OtherFragment.java | 6 ++ .../ru/vtosters/lite/utils/ContactsUtils.java | 95 +++++++++++++++++++ smali/res/xml/preferences_other.xml | 6 ++ 3 files changed, 107 insertions(+) create mode 100644 app/src/main/java/ru/vtosters/lite/utils/ContactsUtils.java diff --git a/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java b/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java index 350c1b84c..3172997c0 100644 --- a/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java +++ b/app/src/main/java/ru/vtosters/lite/ui/fragments/OtherFragment.java @@ -11,6 +11,7 @@ import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken; import static ru.vtosters.lite.utils.AndroidUtils.dp2px; import static ru.vtosters.lite.utils.AndroidUtils.getDefaultPrefs; import static ru.vtosters.lite.utils.AndroidUtils.getIdentifier; +import static ru.vtosters.lite.utils.ContactsUtils.setContactsSync; import static ru.vtosters.lite.utils.LifecycleUtils.restartApplication; import static ru.vtosters.lite.utils.ThemesUtils.getTextAttr; @@ -94,6 +95,11 @@ public class OtherFragment extends MaterialPreferenceToolbarFragment { return true; }); + findPreference("contacts_sync").setOnPreferenceChangeListener((preference, o) -> { + setContactsSync((boolean) o); + return true; + }); + var pref = getDefaultPrefs().getString("autoclearcache", "Default"); switch (pref) { case "Default": diff --git a/app/src/main/java/ru/vtosters/lite/utils/ContactsUtils.java b/app/src/main/java/ru/vtosters/lite/utils/ContactsUtils.java new file mode 100644 index 000000000..f2cb5e3b6 --- /dev/null +++ b/app/src/main/java/ru/vtosters/lite/utils/ContactsUtils.java @@ -0,0 +1,95 @@ +package ru.vtosters.lite.utils; +import static ru.vtosters.lite.net.Request.makeRequest; +import static ru.vtosters.lite.proxy.ProxyUtils.getApi; +import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken; +import static ru.vtosters.lite.utils.AndroidUtils.dp2px; +import static ru.vtosters.lite.utils.AndroidUtils.edit; +import static ru.vtosters.lite.utils.AndroidUtils.getPreferences; +import static ru.vtosters.lite.utils.AndroidUtils.sendToast; +import static ru.vtosters.lite.utils.LifecycleUtils.restartApplicationWithTimer; + +import android.annotation.SuppressLint; +import android.app.ProgressDialog; +import android.content.ContentResolver; +import android.content.Context; +import android.database.Cursor; +import android.provider.ContactsContract; +import android.util.Log; +import android.widget.LinearLayout; +import android.widget.SeekBar; +import android.widget.Toast; + +import com.vk.core.dialogs.alert.VkAlertDialog; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.HashMap; +import java.util.Map; + +public class ContactsUtils{ + + @SuppressLint("Range") + private static String getAllContacts(){ + Map contactsmap = new HashMap<>(); + + ContentResolver contentResolver = AndroidUtils.getGlobalContext().getContentResolver(); + Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); + if (cursor.getCount() > 0) { + while(cursor.moveToNext()) { + + int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))); + if (hasPhoneNumber > 0) { + String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); + String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); + Cursor phoneCursor = contentResolver.query( + ContactsContract.CommonDataKinds.Phone.CONTENT_URI, + null, + ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] {id}, + null); + if (phoneCursor != null) { + if (phoneCursor.moveToNext()) { + String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); + contactsmap.put(phoneNumber, name); + phoneCursor.close(); + } + } + } + } + } + + cursor.close(); + + return contactsmap.toString(); + } + + public static void setContactsSync(boolean enabled){ + makeRequest("https://" + getApi() + "/method/account.setInfo?" + "?name=im_user_name_type&value=" + (enabled ? "contacts" : "vk") + "&https=1&v=5.99&access_token=" + getUserToken(), + response -> { + try { + JSONObject mainJson = new JSONObject(response); + Log.d("ContactsUtils", "Result: " + mainJson + ", enabled sync: " + enabled); + } catch (JSONException e) { + Log.d("ContactsUtils", e.getMessage()); + sendToast("Ошибка установки контактов"); + } + }); + } + + public static void dialog(Context context, String response) { + VkAlertDialog.Builder builder = new VkAlertDialog.Builder(context); + builder.setTitle("Синхронизация контактов"); + builder.setMessage("Статус синхронизации: " + response); + builder.setCancelable(true); + builder.setNegativeButton(AndroidUtils.getString("cancel"), null); + builder.setPositiveButton("Включить", (dialog, which) -> { + setContactsSync(true); + }); + builder.setNeutralButton("Отключить", (dialog, which) -> { + setContactsSync(false); + }); + + builder.show(); + } +} diff --git a/smali/res/xml/preferences_other.xml b/smali/res/xml/preferences_other.xml index f5c2a833f..806d924a5 100644 --- a/smali/res/xml/preferences_other.xml +++ b/smali/res/xml/preferences_other.xml @@ -1,5 +1,11 @@ + + +