• Установить linux на игровой ноутбук asus, как исправить проблему в драйверами?

    @AlexVWill
    Если есть проблема с установкой Ubuntu, то пиши лучше сюда: https://forum.ubuntu.ru/index.php?board=56.0
    В вопросе четко, кратко и понятно указать:
    - версию ОС
    - модель ноута
    - характер проблем
    - конфигурацию оборудования, с которым есть проблемы
    - что уже предпринималось для решения
    Ответ написан
  • Snap безопаснее Apt?

    @AlexVWill
    Нет, это не так. Основное отличие (которое обычному пользователю скорее всего не видно) это то, что apt как конструктор из кубиков собирает все необходимые компоненты для работы приложений (зависимости) из разных источников, в то время как snap более похож на дистрибутив, т.е. все нужное лежит в одном пакете.
    И то, и другое имеет как плюсы и минусы. Минус snap в том, что обычно он больше места требует для работы приложений.
    Ответ написан
    Комментировать
  • Как сделать пуш уведомление для определенной категории людей?

    @AlexVWill
    каждый девайс, зарегистрированный в системе push уведомлений Firebase имеет свой уникальный токен, который получается примерно как то так:

    private void getFirebaseToken() {
            FirebaseMessaging.getInstance().getToken()
                    .addOnCompleteListener(new OnCompleteListener<String>() {
                       
                        @Override
                        public void onComplete(@NonNull Task<String> task) {
                            if (task.isSuccessful()) {
                                // Get new FCM registration token
                                // Log and toast
                                fbtoken = task.getResult();
                                handleFirebaseResult();
                                //Log.d("Firebase id", fbid);
                                //Log.d("Firebase token", fbtoken);
                            }
                        }
                        private void sendRegistrationToServer() {
                            // TODO: Implement this method to send token to your app server.
                        }
                    });
        }

    По сути, все что надо - это собрать в базу данных токены тех устройств, которые соответствуют твоим условиям (например, указали при регистрации нужный пол или возраст), и дальше посылать уведомления только для них по нужному токену.
    Ответ написан
    3 комментария
  • Почему зависает приложение?

    @AlexVWill
    Нельзя делать в приложении бесконечные циклы, тем более в UI, система принимает такие приложения за зависшие (что, по сути и является) и принудительно закрывает их. Проверку лучше делать однократно, непосредственно пред исполнением нужного кода например вот так:

    boolean connected = false;
    ConnectivityManager connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
        if(connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED || 
                connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {
            //we are connected to a network
            connected = true;
        }
        else
            connected = false;
    Ответ написан
  • Как с начала загрузить список, а затем его обновлять с помощью SwipeRefreshLayout?

    @AlexVWill
    Второй случай явно неправильный, т.к. всетаки сначала должен загружаться список, а потом он должнен по свайпу обновляться. Поэтому ты ничего и не видишь, т.к. формирование списка происходит не вначале, а после срабатывания листенера setOnRefreshListener на элементе mSwipeRefreshLayout.
    Почему не работает вывод списка в первом случае - х.з., т.к. код ты скрыл (что за дурацкая привычка?), а телепаты все разъехались на Бали прочищать свои чакры.
    Но если там какой то RecyclerViever, то это работает приблизительно как то так:
    spoiler

    RecyclerView historyRecyclerView = binding.adrecyclerView;
            historyRecyclerView = historyRecyclerView.findViewById(R.id.adrecycler_view);
            HistoryViewRecycler historyView = new HistoryViewRecycler();
            historyView.initRecycler(historyRecyclerView);
    
            swipeRefreshLayout = binding.swipeRefreshLayout.findViewById(R.id.swipeRefreshLayout);
            swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    //make new recycle view on swipe refresh
                    RecyclerView newhistoryRecyclerView = binding.adrecyclerView;
                    HistoryViewRecycler newhistoryView = new HistoryViewRecycler();
                    JSONArray newhistory = new HistoryViewRecycler().updateHistory(getContext());
                    if (newhistory == null) {
                        new History().getFullHistory(getContext());
                        //Snackbar.make(getActivity().findViewById(android.R.id.content), R.string.auth_error, 3000).setDuration(5000).show();
                    }
                    newhistoryView.initRecycler(newhistoryRecyclerView);
                    swipeRefreshLayout.setRefreshing(false);
                }
            });


    Не претендую на исключительность кода, это просто для примера.
    У тебя же в коде onRefresh() никакого обновления списка нет, кроме остановки кручения индикатора... ну и с какого перепугу он должен что-то там обновлять?
    Размести тогда уж код формирования списка в обоих разделах (как бы 1+2 пример совмести) и посмотри что получится.
    Ответ написан
    1 комментарий
  • Как добавить много текста в одну Activity?

    @AlexVWill
    Либо так: https://metanit.com/java/android/9.1.php
    Либо так: https://metanit.com/java/android/3.11.php
    Если данные в виде списка повторяющихся однородных элементов бесконечной длины, то гугли RecyclerView
    Ответ написан
    Комментировать
  • Какой из текстовых редакторов Linux умеет работать по FTP?

    @AlexVWill
    А зачем заходить на сервер по ftp, когда давно придуман sshfs?
    Замепь удалённую папку как локальный том, и работай любым редактором напрямую с файлами на сервере.
    Ответ написан
    Комментировать
  • Как сделать обработку нажатия в диалоге?

    @AlexVWill
    Методом DialogInterface.OnClickListener()
    Я уже как то отвечал на похожий вопрос, посмотри код, там есть готовое решение: https://qna.habr.com/q/1105428
    И не надо скриншоты выкладывать, выкладывай лучше текст кода под спойлер.
    Ответ написан
    4 комментария
  • Что за странные страницы Битрикса?

    @AlexVWill
    В списке сохраненных страниц технологии композита непонятные страницы. Сотни страниц.

    это не список страниц, а список запросов, по идее да - кто-то брутфорсит, что неприятно, т.к. повышает загрузку на сервер, поставь Fail2ban и настрой его например при 5 неудачных запросов с какого то IPшника блокируем его на уровне iptables на час... количество таких запросов во много раз сократится...
    Ответ написан
    Комментировать
  • Чем плохие бесплатные VPN?

    @AlexVWill
    И каким образом они монетизируются?

    Спам, торговля персональными данными, реклама и пр.

    чем плохи бесплатные сервисы VPN

    ну хотя бы тем, что подмену DNS для них сделать - как два пальца, а ты и знать ничего не будешь...
    Ответ написан
    2 комментария
  • Как вывести отдельный layout в виде всплывающего окна?

    @AlexVWill
    Сначала нарисовать Layout и зазвать его policy_popup (для данного примера, ну или как тебе хочется)
    spoiler
    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ScrollView
            android:id="@+id/scrollView4"
            android:layout_width="wrap_content"
            android:layout_height="250dp"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginRight="8dp"
            android:layout_marginBottom="8dp"
            app:layout_constraintBottom_toTopOf="@+id/donotshow"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/linearLayout4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
    
                <TextView
                    android:id="@+id/policy_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:layout_marginLeft="8dp"
                    android:text="@string/policy_disclosure_ru"
                    android:textColor="#000000"
                    android:textSize="16sp"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toTopOf="parent" />
    
            </androidx.constraintlayout.widget.ConstraintLayout>
        </ScrollView>
    
        <CheckBox
            android:id="@+id/donotshow"
            android:layout_width="wrap_content"
            android:layout_height="48dp"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginRight="8dp"
            android:text="Больше не показывать"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />
    
    </androidx.constraintlayout.widget.ConstraintLayout>


    Второй data_popup
    spoiler
    <?xml version="1.0" encoding="utf-8"?>
    <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ScrollView
            android:id="@+id/scrollView4"
            android:layout_width="wrap_content"
            android:layout_height="300dp"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:layout_marginRight="8dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent">
    
            <androidx.constraintlayout.widget.ConstraintLayout
                android:id="@+id/linearLayout4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
    
                <TextView
                    android:id="@+id/data_text"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginStart="8dp"
                    android:layout_marginLeft="8dp"
                    android:text="@string/data_disclosure_ru"
                    android:textColor="#000000"
                    android:textSize="16sp"
                    app:layout_constraintBottom_toBottomOf="parent"
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent" />
            </androidx.constraintlayout.widget.ConstraintLayout>
        </ScrollView>
    
    </androidx.constraintlayout.widget.ConstraintLayout>

    Потом где то в коде Main Activity написать
    spoiler
    public void policytextshow(){
            LayoutInflater li = LayoutInflater.from(this);
            View promptsView = li.inflate(R.layout.policy_popup, null);
            //Make AlertDialog
            AlertDialog.Builder mDialogBuilder = new AlertDialog.Builder(this);
            //Настраиваем .xml для нашего AlertDialog:
            mDialogBuilder.setView(promptsView);
            //Настраиваем отображение поля для ввода текста в открытом диалоге:
            //Настраиваем сообщение в диалоговом окне:
            CheckBox hidebox = (CheckBox) promptsView.findViewById(R.id.donotshow);
            mDialogBuilder
                    .setCancelable(false)
                    .setIcon(R.drawable.shield1)
                    .setTitle("Политика информации")
                    .setPositiveButton("OK",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog,int id) {
                                    if (hidebox.isChecked()) {
                                        SharedPreferences.Editor editor = mSettings.edit();
                                        editor.putString(APP_PREFERENCES_SHOWPOLICY, "1");
                                        editor.apply();
                                    }
                                    dialog.cancel();
                                    // if policy alert dialog closed - work with contacts list
                                    contacts();
                                }
                            });
            //Создаем AlertDialog:
            AlertDialog alertDialog = mDialogBuilder.create();
            //и отображаем его:
            alertDialog.show();
    
            LayoutInflater li1 = LayoutInflater.from(this);
            View promptsView1 = li1.inflate(R.layout.data_popup, null);
            //Make AlertDialog
            AlertDialog.Builder mDialogBuilder1 = new AlertDialog.Builder(this);
            //Настраиваем .xml для нашего AlertDialog:
            mDialogBuilder1.setView(promptsView1);
            //Настраиваем отображение поля для ввода текста в открытом диалоге:
            //Настраиваем сообщение в диалоговом окне:
            mDialogBuilder1
                    .setCancelable(false)
                    .setIcon(R.drawable.shield1)
                    .setTitle("Используемые данные")
                    .setPositiveButton("OK",
                            new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog1,int id) {
                                    if (hidebox.isChecked()) {
                                        SharedPreferences.Editor editor = mSettings.edit();
                                        editor.putString(APP_PREFERENCES_SHOWPOLICY, "1");
                                        editor.apply();
                                    }
                                    dialog1.cancel();
                                }
                            });
            //Создаем AlertDialog:
            AlertDialog alertDialog1 = mDialogBuilder1.create();
            //и отображаем его:
            alertDialog1.show();
        }

    По этому коду сначала выскакивает одно сообщение, потом, при нажатии на Ок - второе, потом оно закрывается.
    Ответ написан
  • Как отключить Rst для установки убунту?

    @AlexVWill
    Не менялся ли случайно диск? Какое то странное поведение BIOS, у меня есть ноут Asus X200M, так там BIOS все показывает верно:

    spoiler
    61e347ad7b3bf422904485.jpeg

    К слову сказать, Ubuntu на нем отлично работает, глюков с оборудованием нет вообще, работает абсолютно все, и все клавиатурные макросы даже, без каких то доп. драйверов и плясок с бубном.
    Может быть попробовать сброс сделать? Save-Exit -> Restore Defaults или путем отключения автономного питания? (хотя врятли причина в этом)
    Ответ написан
    1 комментарий
  • Как обновить версию php в линуксе?

    @AlexVWill
    Есть же много инструкций на эту тему, вот например: https://eternalhost.net/base/vps-vds/obnovlenie-php
    А зачем тебе 8ка?
    Ответ написан
    1 комментарий
  • Можно ли на сайте-конструкторе сделать сайт с функционалом социальной сети?

    @AlexVWill
    Есть opensource социальная сеть, https://www.opensource-socialnetwork.org/
    Нормальная такая социалка, с постами, лайками, комментами, блекджеком и шлюхами.
    СтОит - 0, работает на PHP, ставится за полчаса.
    Большой плюс в том, что исходники есть, можно самому допиливать что угодно и как угодно.
    Ответ написан
    8 комментариев
  • Как отключить автоподключение к VPN если уже забыл как его настраивал?

    @AlexVWill
    nm-connection-editor
    Выбираешь сетевой интерфейс, на котором работает автоподключение VPN.
    Во вкладке 'General' сбрасываешь галочку с 'Automatically connect to VPN'.

    spoiler
    61cc7a11bfcb1778544425.png

    Только зачем отключать то автозагрузку, если VPN можно в любой момент выключить через Network Manager или через консоль
    sudo killall openvpn
    Ответ написан
    3 комментария
  • Как в android studio сделать чтобы пользователь мог добавлять выбранный рецепт в закладки?

    @AlexVWill
    Смотри https://developer.android.com/reference/android/co...
    Каждому рецепту должен быть присвоен свой уникальный код. Напротив рецепта, например, можно поставить звездочку "добавить в избранное", коды избранных рецептов сохранить с помощью SharedPreferences в предназначенный для этого XML файл, при открытии другого активити с "Избранным" прочитать эти коды и вывести нужные рецепты списком.
    Иной вариант: если ты собираешься хранить локально большой список рецептов в виде базы данных, где будут разные поля: название, тип, дата, и так далее, предусмотреть одно поле - favorites, и сделать все тоже, что написал выше, но в базе данных. Используй для этого SQLite
    Ответ написан
    Комментировать
  • Как в Android Studio сделать чтобы пользователь по нажатию кнопки мог добавлять свои элементы в массив?

    @AlexVWill
    C Kotlin помочь не могу, т.к. не владею, а в Java это делается путем intent.putExtra()

    Вот так передать (в одной Activity):

    public void editcontent(int position){
            Intent intent = new Intent(mContext, EditUserItemAd.class);
            intent.putExtra("adid", adid.get(position));
            intent.putExtra("image1_url", mImages1.get(position));
            intent.putExtra("image2_url", mImages2.get(position));
            intent.putExtra("image3_url", mImages3.get(position));
            intent.putExtra("short_name", shortNames.get(position));
            intent.putExtra("full_name", fullNames.get(position));
            intent.putExtra("ad_price", price.get(position));
            intent.putExtra("ad_currency", currency.get(position));
            intent.putExtra("ad_neworused", neworused.get(position));
            intent.putExtra("ad_category1", adcat_ind1.get(position));
            intent.putExtra("ad_category2", adcat_ind2.get(position));
            intent.putExtra("imagename1", Imagename1.get(position));
            intent.putExtra("imagename2", Imagename2.get(position));
            intent.putExtra("imagename3", Imagename3.get(position));
            intent.putExtra("adactivated", activated.get(position));
            mContext.startActivity(intent);
        }


    А вот так принять (в другой Activity):

    private void getIncomingIntent() throws JSONException {
            Log.d(TAG, "getIncomingIntent: checking for incoming intents.");
            if(getIntent().hasExtra("image1_url") && getIntent().hasExtra("short_name")){
                Log.d(TAG, "getIncomingIntent: found intent extras.");
                String useradid =   getIntent().getStringExtra("adid");
                String image1Url =  getIntent().getStringExtra("image1_url");
                String image2Url =  getIntent().getStringExtra("image2_url");
                String image3Url =  getIntent().getStringExtra("image3_url");
                String shortName =  getIntent().getStringExtra("short_name");
                String fullName =   getIntent().getStringExtra("full_name");
                String price =      getIntent().getStringExtra("ad_price");
                String currency =   getIntent().getStringExtra("ad_currency");
                String condition =  getIntent().getStringExtra("ad_neworused");
                String category1 =  getIntent().getStringExtra("ad_category1");
                String category2 =  getIntent().getStringExtra("ad_category2");
                String imagename1 = getIntent().getStringExtra("imagename1");
                String imagename2 = getIntent().getStringExtra("imagename2");
                String imagename3 = getIntent().getStringExtra("imagename3");
                String adactive =   getIntent().getStringExtra("adactivated");
                photopath0 = imagename1;
                photopath1 = imagename2;
                photopath2 = imagename3;
                makeItemInterface(useradid, image1Url, image2Url, image3Url, shortName, fullName, price,currency,condition, category1,category2, adactive);
            }
        }
    Ответ написан
    Комментировать
  • Как настроить VPN PPTP (LINUX) чтобы не отрубался интернет?

    @AlexVWill
    настроить маршрутизацию вручную, чтобы default с более высоким приоритетом при подключенном VPN был не сетевой интерфейс VPN, а роутера...
    подключи VPN и покажи
    ip route
    а потом то же, но без vpn
    Ответ написан