/
nea
/
androidGroupBuilder
Обзор
Документация
Войти
/
nea
/
androidGroupBuilder
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/src/main/java/com/ea/groupbuilder/BuildActivity.java
484 строки
20 KB
ea
Группа Автоморфизмов отлажено 23_04_2026
23 апр 2026, 17:08
23 апр 2026, 17:08
4513276
Код
Авторство
О чём код?
package com.ea.groupbuilder; import android.content.Intent; import android.content.pm.ActivityInfo; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ProgressBar; import android.widget.Spinner; public class BuildActivity extends AppCompatActivity { // implements InputIntInterface { public ProgressBar loadingPB; private final static String TAG = "GRUGRA_BUILD"; private EditText outTxt; private DbHelper dbH; private mAplication mApp; public substitutionS classSubs; private int ySn, // > 0 - Sn сохранена yAuto, // > 0 - автомор построены yObraz, // > 0 - образы найдены ySyl; // > 0 - образы сил подгрупп найдены @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.activity_build); mApp = (mAplication) getApplication(); dbH = mApp.dbH; // mApp.whatRun = 0; mApp.activityBuild = this; DbHelper.err = ""; if (dbH == null) { Log.d(TAG, "BuildActivity dbH= null"); finish(); return; } else dbH.f_setVidGr(0, false); classSubs = mApp.classSubs; loadingPB = findViewById(R.id.idPBLoading); loadingPB.setIndeterminate(false); outTxt = findViewById(R.id.editTextTextMultiLine); outTxt.setCursorVisible(false); /* if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) Log.d(TAG, "BuildActivity PID= "+ Process.myPid() + " getProcessName =" + Application.getProcessName()); else Log.d(TAG, "BuildActivity PID= "+ Process.myPid()); */ if (mApp.kakBuildid) { f_putProt("Построение группы " + mApp.groupName); myExecutor.went(0); invalidateOptionsMenu(); } else f_putProt("Для группы " + mApp.groupName + " выберите нужное в меню"); dbH.f_getParm(1, 0, 0); // DbHelper.faktSubsLen - степень группы // Source - https://stackoverflow.com/q getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); ySn = dbH.f_testFn() ? 1 : 0; yAuto = dbH.f_getCount("select _id as ccc from params where parm = 'Автоморфизмы';"); yObraz = dbH.f_getCount("select _id as ccc from charac_cykls;"); ySyl = dbH.f_getCount("select _id as ccc from charac_sylow;"); if (!mApp.kakBuildid) { // просмотр существующей группы f_putProt("\nГруппа Sn " + (ySn > 0 ? "сохранена" : "не сохранена") + "\n"); f_putProt("Группа автооморфизмов " + (yAuto > 0 ? "построена" : "не построена") + "\n"); f_putProt("Образы автооморфизмов " + (yObraz > 0 ? "найдены" : "не найдены") + "\n"); f_putProt("Образы силовских подгрупп " + (ySyl > 0 ? "найдены" : "не найдены") + "\n"); } } @Override protected void onResume() { super.onResume(); } void f_addit() { // вложить группу постановками на своем множестве - регулярное представление dbH.f_addition(); } void f_look() { // открывает окно просмотра результатов Intent intent = new Intent(this, dbViewActivity.class); intent.putExtra("ru.kak", "auto"); // Убираем заголовок // Intent.requestWindowFeature( Window.FEATURE_NO_TITLE); startActivity(intent); } void f_build_graph(int kak) { DbHelper.kakGraphBuild = kak; // Построение графа Кэли, kak = 1 - по итерациям, 2 - по классам, 3 - по силовским подгруппам Intent intent = new Intent(this, kelyActivity.class); startActivity(intent); } void f_build_canvas() { // построение диаграммы CanvasActivity Intent intent = new Intent(this, PrimeActivity.class); startActivity(intent); } void f_build_normal() { // нормальные подгруппы Intent intent = new Intent(this, NormalSubgrActivity.class); startActivity(intent); } public void f_putProt(String ctpoka) { // вывод строки в протокол new Thread(() -> { runOnUiThread(() -> { outTxt.append("\n" + ctpoka); }); }).start(); } public Spinner spinnerGorA; // задает выбор группы: "Группа G" или A public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_buildactivity, menu); // создание меню из xml MenuItem menuItemGorA = menu.findItem(R.id.menu_spinner); spinnerGorA = (Spinner) menuItemGorA.getActionView(); // Создаём адаптер из массива в strings.xml ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource (mApp.activityBuild, R.array.what_is_group, android.R.layout.simple_spinner_item); // Устанавливаем стиль для выпадающего списка adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // Применяем адаптер к Spinner spinnerGorA.setAdapter(adapter); // Обработчик выбора элемента spinnerGorA.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // Получаем выбранный элемент String selectedItem = parent.getItemAtPosition(position).toString(); // Показываем Toast с выбранным элементом /* mApp.putProt("Выбрано: " + selectedItem); <item>Группа G</item> <item>Автоморфизмы</item> */ int snFlg = 0; mApp.tableNameEnd = "_a"; if (selectedItem.equals("Группа G")) mApp.tableNameEnd = ""; // выбранная группа: "_n" - Sn, "_a" - автоморфизмы, "" - G else if (selectedItem.equals("Группа Sn")) { mApp.tableNameEnd = "_n"; snFlg = 1; } dbH.f_getParm(0, 0, snFlg); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); return super.onCreateOptionsMenu(menu); } public void onLowMemory() { super.onLowMemory(); f_putProt("Мало оперативной памяти"); } // для построения автоморфизмов: public boolean onPrepareOptionsMenu(Menu menu) { // изменить меню // группа автом сохранена? if (yAuto == 0) { spinnerGorA.setSelection(0); spinnerGorA.setEnabled(false); } else { spinnerGorA.setEnabled(true); } MenuItem itemDpRas = menu.findItem(R.id.action_grupp_vec), // Доп расчеты itemCanc = menu.findItem(R.id.action_cancel), itemForResearch = menu.findItem(R.id.action_for_research), itemDopAuto = menu.findItem(R.id.action_d_auto), itemDopSyl = menu.findItem(R.id.action_sylov_auto), itemKomm = menu.findItem(R.id.action_row_kom), itemKely3 = menu.findItem(R.id.action_graph3), itemKely1 = menu.findItem(R.id.action_graph1), itemKely2 = menu.findItem(R.id.action_graph2), itemKely4 = menu.findItem(R.id.action_graph4), itemKely5 = menu.findItem(R.id.action_graph5), itemKely6 = menu.findItem(R.id.action_graph6), itemKely7 = menu.findItem(R.id.action_graph7), itemCanvas = menu.findItem(R.id.action_canvas), itemNormal = menu.findItem(R.id.action_normal), itemBack = menu.findItem(R.id.action_back), itemAddit = menu.findItem(R.id.action_addit_grupp), itemPe = menu.findItem(R.id.action_grupp_pe), itemRn = menu.findItem(R.id.action_grupp_dim), itemVec = menu.findItem(R.id.action_grupp_vec), // Доп расчеты itemLook = menu.findItem(R.id.action_look); itemForResearch.setEnabled(false); if (itemCanc != null) { if (DbHelper.solvableGroup == 0) itemKomm.setEnabled(true); switch (mApp.whatRun) { // состояние работы: 0 - не известно, -1 - cancel, 1 - идет расчет, 2 - расчет выполнен (или был сделан раньше) case -1: // -1 - cancel itemKely1.setEnabled(false); itemKely2.setEnabled(false); itemKely3.setEnabled(false); itemKely4.setEnabled(false); itemKely5.setEnabled(false); itemKely6.setEnabled(false); itemKely7.setEnabled(false); itemCanvas.setEnabled(false); itemNormal.setEnabled(false); itemLook.setEnabled(false); itemPe.setEnabled(false); itemRn.setEnabled(false); itemVec.setEnabled(false); itemKomm.setEnabled(false); itemCanc.setEnabled(true); itemAddit.setEnabled(false); itemBack.setEnabled(false); itemDopAuto.setEnabled(false); itemDopSyl.setEnabled(false); break; case 1: // 1 - идет расчет itemCanc.setEnabled(true); itemKely1.setEnabled(false); itemKely2.setEnabled(false); itemKely3.setEnabled(false); itemKely4.setEnabled(false); itemKely5.setEnabled(false); itemKely6.setEnabled(false); itemKely7.setEnabled(false); itemCanvas.setEnabled(false); itemNormal.setEnabled(false); itemAddit.setEnabled(false); itemLook.setEnabled(false); itemPe.setEnabled(false); itemRn.setEnabled(false); itemVec.setEnabled(false); itemKomm.setEnabled(false); itemBack.setEnabled(false); itemDopAuto.setEnabled(false); itemDopSyl.setEnabled(false); break; case 2: // 2 - расчет выполнен (или был сделан раньше) itemCanc.setEnabled(false); itemAddit.setEnabled(mApp.kakBuildid); itemKely1.setEnabled(true); itemKely2.setEnabled(true); itemKely3.setEnabled(true); itemKely4.setEnabled(true); itemKely5.setEnabled(true); itemKely6.setEnabled(true); itemKely7.setEnabled(true); itemCanvas.setEnabled(true); itemNormal.setEnabled(true); itemLook.setEnabled(true); itemPe.setEnabled(true); itemRn.setEnabled(true); // itemVec.setEnabled(DbHelper.faktSubsLen > 2); itemVec.setEnabled(true); itemKomm.setEnabled(true); itemBack.setEnabled(true); itemDopAuto.setEnabled(true); itemDopSyl.setEnabled(true); itemForResearch.setEnabled( mApp.groupIndex == 0 && DbHelper.faktSnLen > 0); // доступно только при рачсете для Sn break; default: itemForResearch.setEnabled( mApp.groupIndex == 0 && DbHelper.faktSnLen > 0); // доступно только при рачсете для Sn itemCanc.setEnabled(false); itemAddit.setEnabled(false); itemKely1.setEnabled(true); itemKely2.setEnabled(true); itemKely3.setEnabled(true); itemKely4.setEnabled(true); itemKely5.setEnabled(true); itemKely6.setEnabled(true); itemKely7.setEnabled(true); itemCanvas.setEnabled(true); itemNormal.setEnabled(true); itemLook.setEnabled(true); itemPe.setEnabled(true); itemRn.setEnabled(DbHelper.faktSubsLen > 2); // itemVec.setEnabled(DbHelper.faktSubsLen > 2); itemVec.setEnabled(true); itemKomm.setEnabled(false); itemBack.setEnabled(true); } if (yAuto > 0) { itemDopAuto.setEnabled(true); // Образы itemDopSyl.setEnabled(true); // Образы силов под-пп } else { itemDopAuto.setEnabled(false); // Образы itemDopSyl.setEnabled(false); // Образы силов под-пп } if (DbHelper.solvableGroup != 0) itemKomm.setEnabled(false); } itemDpRas.setEnabled(mApp.tableNameEnd.equals("")); // Log.e(TAG, "onPrepareOptionsMenu 2 itemAddit=" + itemAddit.isEnabled() + " DbHelper.mApp.whatRun="+ mApp.whatRun ); return true; } public boolean onOptionsItemSelected(MenuItem item) { Intent intent; classGenDop classDop = new classGenDop(mApp, dbH); switch (item.getItemId()) { case R.id.action_for_research: // сохранить для исследования группу Sn myExecutor.went(6); invalidateOptionsMenu(); // f_addit(); break; case R.id.action_addit_grupp: // Вложить методом Кэли (регулярное представление) myExecutor.went(4); invalidateOptionsMenu(); // f_addit(); break; case R.id.action_row_kom: // искать След коммутант myExecutor.went(5); invalidateOptionsMenu(); // break; case R.id.action_create_help: intent = new Intent(BuildActivity.this, helpActivity.class); startActivity(intent); break; case R.id.action_graph2: // Построение графа Кэли по итерациям f_build_graph(1); break; case R.id.action_graph3: // Построение графа Кэли по силовским подгруппам f_build_graph(3); break; case R.id.action_graph1: // Построение графа Кэли по классам f_build_graph(2); break; case R.id.action_graph4: // Построение графа Кэли по P f_build_graph(4); break; case R.id.action_graph5: // Построение графа Кэли по порядку жл-та f_build_graph(5); break; case R.id.action_graph6: // Построение графа Кэли по цикл типу f_build_graph(6); break; case R.id.action_graph7: // Построение графа Кэли четные и нечетные f_build_graph(7); break; case R.id.action_canvas: // Построение Иерархия P подгрупп f_build_canvas(); break; case R.id.action_normal: // Построение Схема нормальных подгрупп f_build_normal(); break; case R.id.action_look: // Просмотр результатов f_look(); break; case R.id.action_cancel: // прекратить расчет dbH.mApp.whatRun = -1; // работа прервана myExecutor.cancel(); dbH.mApp.putProt("РАСЧЕТ БУДЕТ ПРЕРВАН!"); finish(); break; case R.id.action_grupp_dim: // Группа в Rn intent = new Intent(this, RnActivity.class); startActivity(intent); break; case R.id.action_d1: // Покомпонентная сумма dbH.f_setVidGr(0, true); classSylow clSylow = new classSylow(); clSylow.init(mApp, dbH, 0); clSylow.f_createTabCorrection(false, 1); if (dbH.f_testFn()) clSylow.f_createTabCorrection(true, 1); else clSylow.f_createTabCorrection(true, 2); break; case R.id.action_d2: // НОК порядков эл-тов группы dbH.f_setVidGr(0, true); classDop.f_nodDop(); break; case R.id.action_d0: // Транзитивность dbH.f_setVidGr(0, true); if (classDop.f_transDop() == 0) mApp.putProt("Группа транзитивна"); else mApp.putProt("Группа интранзитивна"); break; case R.id.action_d_auto: // Образы Автоморфизмов dbH.f_setVidGr(0, true); item.setEnabled(true); invalidateOptionsMenu(); myExecutor.went(8); // classDop.f_autoGroupDp() и т д invalidateOptionsMenu(); break; case R.id.action_sylov_auto: // Образы силов под-пп dbH.f_setVidGr(0, true); item.setEnabled(true); invalidateOptionsMenu(); myExecutor.went(9); // classDop.f_autoSylovDp() invalidateOptionsMenu(); break; case R.id.action_dall: // Автоморфизмы Посторить Все dbH.f_setVidGr(0, true); item.setEnabled(true); invalidateOptionsMenu(); myExecutor.went(7); // classDop.f_perebor(); invalidateOptionsMenu(); break; case R.id.action_grupp_pe: // Основные подгруппы только для G if (mApp.tableNameEnd.equals("_a")) f_putProt("\nРеализовано только для G\n"); else { intent = new Intent(this, GrupActivity.class); startActivity(intent); } break; case R.id.action_back: // Венуться к заданию образующих finish(); break; } invalidateOptionsMenu(); return super.onOptionsItemSelected(item); } @Override protected void onStart() { super.onStart(); mApp.activityBuild = this; } @Override protected void onDestroy() { super.onDestroy(); mApp.activityBuild = null; } // построение группы по p-подгруппам } //----------------------------