mirror of
https://github.com/topjohnwu/Magisk.git
synced 2025-02-20 07:48:29 +00:00
Rename Topic -> Event
This commit is contained in:
parent
a199b0ace1
commit
8ac3aaf36c
@ -24,7 +24,6 @@ import com.topjohnwu.magisk.fragments.ModulesFragment;
|
|||||||
import com.topjohnwu.magisk.fragments.ReposFragment;
|
import com.topjohnwu.magisk.fragments.ReposFragment;
|
||||||
import com.topjohnwu.magisk.fragments.SettingsFragment;
|
import com.topjohnwu.magisk.fragments.SettingsFragment;
|
||||||
import com.topjohnwu.magisk.fragments.SuperuserFragment;
|
import com.topjohnwu.magisk.fragments.SuperuserFragment;
|
||||||
import com.topjohnwu.magisk.utils.Topic;
|
|
||||||
import com.topjohnwu.magisk.utils.Utils;
|
import com.topjohnwu.magisk.utils.Utils;
|
||||||
import com.topjohnwu.net.Networking;
|
import com.topjohnwu.net.Networking;
|
||||||
import com.topjohnwu.superuser.Shell;
|
import com.topjohnwu.superuser.Shell;
|
||||||
@ -32,7 +31,7 @@ import com.topjohnwu.superuser.Shell;
|
|||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
|
|
||||||
public class MainActivity extends BaseActivity
|
public class MainActivity extends BaseActivity
|
||||||
implements NavigationView.OnNavigationItemSelectedListener, Topic.Subscriber {
|
implements NavigationView.OnNavigationItemSelectedListener {
|
||||||
|
|
||||||
private final Handler mDrawerHandler = new Handler();
|
private final Handler mDrawerHandler = new Handler();
|
||||||
private int mDrawerItem;
|
private int mDrawerItem;
|
||||||
@ -116,11 +115,6 @@ public class MainActivity extends BaseActivity
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPublish(int topic, Object[] result) {
|
|
||||||
recreate();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void checkHideSection() {
|
public void checkHideSection() {
|
||||||
Menu menu = navigationView.getMenu();
|
Menu menu = navigationView.getMenu();
|
||||||
menu.findItem(R.id.magiskhide).setVisible(Shell.rootAccess() &&
|
menu.findItem(R.id.magiskhide).setVisible(Shell.rootAccess() &&
|
||||||
|
@ -25,7 +25,7 @@ import com.topjohnwu.magisk.Config;
|
|||||||
import com.topjohnwu.magisk.R;
|
import com.topjohnwu.magisk.R;
|
||||||
import com.topjohnwu.magisk.uicomponents.ArrowExpandable;
|
import com.topjohnwu.magisk.uicomponents.ArrowExpandable;
|
||||||
import com.topjohnwu.magisk.uicomponents.Expandable;
|
import com.topjohnwu.magisk.uicomponents.Expandable;
|
||||||
import com.topjohnwu.magisk.utils.Topic;
|
import com.topjohnwu.magisk.utils.Event;
|
||||||
import com.topjohnwu.magisk.utils.Utils;
|
import com.topjohnwu.magisk.utils.Utils;
|
||||||
import com.topjohnwu.superuser.Shell;
|
import com.topjohnwu.superuser.Shell;
|
||||||
import com.topjohnwu.superuser.internal.UiThreadHandler;
|
import com.topjohnwu.superuser.internal.UiThreadHandler;
|
||||||
@ -257,7 +257,7 @@ public class ApplicationAdapter extends SectionedAdapter
|
|||||||
}).filter(Objects::nonNull).sorted()
|
}).filter(Objects::nonNull).sorted()
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
Topic.publish(false, Topic.MAGISK_HIDE_DONE);
|
Event.trigger(false, Event.MAGISK_HIDE_DONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
// True if not system app or user already hidden it
|
// True if not system app or user already hidden it
|
||||||
|
@ -22,10 +22,10 @@ import com.topjohnwu.magisk.App;
|
|||||||
import com.topjohnwu.magisk.Config;
|
import com.topjohnwu.magisk.Config;
|
||||||
import com.topjohnwu.magisk.Const;
|
import com.topjohnwu.magisk.Const;
|
||||||
import com.topjohnwu.magisk.R;
|
import com.topjohnwu.magisk.R;
|
||||||
|
import com.topjohnwu.magisk.utils.Event;
|
||||||
import com.topjohnwu.magisk.utils.LocaleManager;
|
import com.topjohnwu.magisk.utils.LocaleManager;
|
||||||
import com.topjohnwu.magisk.utils.Topic;
|
|
||||||
|
|
||||||
public abstract class BaseActivity extends AppCompatActivity implements Topic.AutoSubscriber {
|
public abstract class BaseActivity extends AppCompatActivity implements Event.AutoListener {
|
||||||
|
|
||||||
public static final String INTENT_PERM = "perm_dialog";
|
public static final String INTENT_PERM = "perm_dialog";
|
||||||
private static Runnable grantCallback;
|
private static Runnable grantCallback;
|
||||||
@ -40,12 +40,12 @@ public abstract class BaseActivity extends AppCompatActivity implements Topic.Au
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getSubscribedTopics() {
|
public int[] getListeningEvents() {
|
||||||
return EMPTY_INT_ARRAY;
|
return EMPTY_INT_ARRAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPublish(int topic, Object[] result) {}
|
public void onEvent(int event) {}
|
||||||
|
|
||||||
@StyleRes
|
@StyleRes
|
||||||
public int getDarkTheme() {
|
public int getDarkTheme() {
|
||||||
@ -59,7 +59,7 @@ public abstract class BaseActivity extends AppCompatActivity implements Topic.Au
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
Topic.subscribe(this);
|
Event.register(this);
|
||||||
if (getDarkTheme() != -1 && (boolean) Config.get(Config.Key.DARK_THEME)) {
|
if (getDarkTheme() != -1 && (boolean) Config.get(Config.Key.DARK_THEME)) {
|
||||||
setTheme(getDarkTheme());
|
setTheme(getDarkTheme());
|
||||||
}
|
}
|
||||||
@ -71,7 +71,7 @@ public abstract class BaseActivity extends AppCompatActivity implements Topic.Au
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onDestroy() {
|
protected void onDestroy() {
|
||||||
Topic.unsubscribe(this);
|
Event.unregister(this);
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,11 +5,11 @@ import android.content.Intent;
|
|||||||
import androidx.fragment.app.Fragment;
|
import androidx.fragment.app.Fragment;
|
||||||
|
|
||||||
import com.topjohnwu.magisk.App;
|
import com.topjohnwu.magisk.App;
|
||||||
import com.topjohnwu.magisk.utils.Topic;
|
import com.topjohnwu.magisk.utils.Event;
|
||||||
|
|
||||||
import butterknife.Unbinder;
|
import butterknife.Unbinder;
|
||||||
|
|
||||||
public abstract class BaseFragment extends Fragment implements Topic.AutoSubscriber {
|
public abstract class BaseFragment extends Fragment implements Event.AutoListener {
|
||||||
|
|
||||||
public App app = App.self;
|
public App app = App.self;
|
||||||
protected Unbinder unbinder = null;
|
protected Unbinder unbinder = null;
|
||||||
@ -17,12 +17,12 @@ public abstract class BaseFragment extends Fragment implements Topic.AutoSubscri
|
|||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
Topic.subscribe(this);
|
Event.register(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPause() {
|
public void onPause() {
|
||||||
Topic.unsubscribe(this);
|
Event.unregister(this);
|
||||||
super.onPause();
|
super.onPause();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,10 +47,10 @@ public abstract class BaseFragment extends Fragment implements Topic.AutoSubscri
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getSubscribedTopics() {
|
public int[] getListeningEvents() {
|
||||||
return BaseActivity.EMPTY_INT_ARRAY;
|
return BaseActivity.EMPTY_INT_ARRAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPublish(int topic, Object[] result) {}
|
public void onEvent(int event) {}
|
||||||
}
|
}
|
||||||
|
@ -18,10 +18,10 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
|
|
||||||
import com.topjohnwu.magisk.App;
|
import com.topjohnwu.magisk.App;
|
||||||
import com.topjohnwu.magisk.R;
|
import com.topjohnwu.magisk.R;
|
||||||
import com.topjohnwu.magisk.utils.Topic;
|
import com.topjohnwu.magisk.utils.Event;
|
||||||
|
|
||||||
public abstract class BasePreferenceFragment extends PreferenceFragmentCompat
|
public abstract class BasePreferenceFragment extends PreferenceFragmentCompat
|
||||||
implements SharedPreferences.OnSharedPreferenceChangeListener, Topic.AutoSubscriber {
|
implements SharedPreferences.OnSharedPreferenceChangeListener, Event.AutoListener {
|
||||||
|
|
||||||
public App app = App.self;
|
public App app = App.self;
|
||||||
|
|
||||||
@ -29,19 +29,19 @@ public abstract class BasePreferenceFragment extends PreferenceFragmentCompat
|
|||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
View v = super.onCreateView(inflater, container, savedInstanceState);
|
View v = super.onCreateView(inflater, container, savedInstanceState);
|
||||||
app.prefs.registerOnSharedPreferenceChangeListener(this);
|
app.prefs.registerOnSharedPreferenceChangeListener(this);
|
||||||
Topic.subscribe(this);
|
Event.register(this);
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDestroyView() {
|
public void onDestroyView() {
|
||||||
app.prefs.unregisterOnSharedPreferenceChangeListener(this);
|
app.prefs.unregisterOnSharedPreferenceChangeListener(this);
|
||||||
Topic.unsubscribe(this);
|
Event.unregister(this);
|
||||||
super.onDestroyView();
|
super.onDestroyView();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getSubscribedTopics() {
|
public int[] getListeningEvents() {
|
||||||
return BaseActivity.EMPTY_INT_ARRAY;
|
return BaseActivity.EMPTY_INT_ARRAY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ import com.topjohnwu.magisk.uicomponents.MarkDownWindow;
|
|||||||
import com.topjohnwu.magisk.uicomponents.SafetyNet;
|
import com.topjohnwu.magisk.uicomponents.SafetyNet;
|
||||||
import com.topjohnwu.magisk.uicomponents.UpdateCardHolder;
|
import com.topjohnwu.magisk.uicomponents.UpdateCardHolder;
|
||||||
import com.topjohnwu.magisk.utils.AppUtils;
|
import com.topjohnwu.magisk.utils.AppUtils;
|
||||||
import com.topjohnwu.magisk.utils.Topic;
|
import com.topjohnwu.magisk.utils.Event;
|
||||||
import com.topjohnwu.net.Networking;
|
import com.topjohnwu.net.Networking;
|
||||||
import com.topjohnwu.superuser.Shell;
|
import com.topjohnwu.superuser.Shell;
|
||||||
|
|
||||||
@ -48,8 +48,7 @@ import butterknife.BindColor;
|
|||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.OnClick;
|
import butterknife.OnClick;
|
||||||
|
|
||||||
public class MagiskFragment extends BaseFragment
|
public class MagiskFragment extends BaseFragment implements SwipeRefreshLayout.OnRefreshListener {
|
||||||
implements SwipeRefreshLayout.OnRefreshListener, Topic.Subscriber {
|
|
||||||
|
|
||||||
private static boolean shownDialog = false;
|
private static boolean shownDialog = false;
|
||||||
|
|
||||||
@ -195,7 +194,7 @@ public class MagiskFragment extends BaseFragment
|
|||||||
Config.loadMagiskInfo();
|
Config.loadMagiskInfo();
|
||||||
updateUI();
|
updateUI();
|
||||||
|
|
||||||
Topic.reset(getSubscribedTopics());
|
Event.reset(this);
|
||||||
Config.remoteMagiskVersionString = null;
|
Config.remoteMagiskVersionString = null;
|
||||||
Config.remoteMagiskVersionCode = -1;
|
Config.remoteMagiskVersionCode = -1;
|
||||||
|
|
||||||
@ -208,12 +207,12 @@ public class MagiskFragment extends BaseFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getSubscribedTopics() {
|
public int[] getListeningEvents() {
|
||||||
return new int[] {Topic.UPDATE_CHECK_DONE};
|
return new int[] {Event.UPDATE_CHECK_DONE};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPublish(int topic, Object[] result) {
|
public void onEvent(int event) {
|
||||||
updateCheckUI();
|
updateCheckUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,11 +18,11 @@ import com.topjohnwu.magisk.Config;
|
|||||||
import com.topjohnwu.magisk.R;
|
import com.topjohnwu.magisk.R;
|
||||||
import com.topjohnwu.magisk.adapters.ApplicationAdapter;
|
import com.topjohnwu.magisk.adapters.ApplicationAdapter;
|
||||||
import com.topjohnwu.magisk.components.BaseFragment;
|
import com.topjohnwu.magisk.components.BaseFragment;
|
||||||
import com.topjohnwu.magisk.utils.Topic;
|
import com.topjohnwu.magisk.utils.Event;
|
||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
|
|
||||||
public class MagiskHideFragment extends BaseFragment implements Topic.Subscriber {
|
public class MagiskHideFragment extends BaseFragment {
|
||||||
|
|
||||||
@BindView(R.id.swipeRefreshLayout) SwipeRefreshLayout mSwipeRefreshLayout;
|
@BindView(R.id.swipeRefreshLayout) SwipeRefreshLayout mSwipeRefreshLayout;
|
||||||
@BindView(R.id.recyclerView) RecyclerView recyclerView;
|
@BindView(R.id.recyclerView) RecyclerView recyclerView;
|
||||||
@ -89,12 +89,12 @@ public class MagiskHideFragment extends BaseFragment implements Topic.Subscriber
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getSubscribedTopics() {
|
public int[] getListeningEvents() {
|
||||||
return new int[] {Topic.MAGISK_HIDE_DONE};
|
return new int[] {Event.MAGISK_HIDE_DONE};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPublish(int topic, Object[] result) {
|
public void onEvent(int event) {
|
||||||
mSwipeRefreshLayout.setRefreshing(false);
|
mSwipeRefreshLayout.setRefreshing(false);
|
||||||
adapter.filter(search.getQuery().toString());
|
adapter.filter(search.getQuery().toString());
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ import com.topjohnwu.magisk.R;
|
|||||||
import com.topjohnwu.magisk.adapters.ModulesAdapter;
|
import com.topjohnwu.magisk.adapters.ModulesAdapter;
|
||||||
import com.topjohnwu.magisk.components.BaseFragment;
|
import com.topjohnwu.magisk.components.BaseFragment;
|
||||||
import com.topjohnwu.magisk.container.Module;
|
import com.topjohnwu.magisk.container.Module;
|
||||||
import com.topjohnwu.magisk.utils.Topic;
|
import com.topjohnwu.magisk.utils.Event;
|
||||||
import com.topjohnwu.magisk.utils.Utils;
|
import com.topjohnwu.magisk.utils.Utils;
|
||||||
import com.topjohnwu.superuser.Shell;
|
import com.topjohnwu.superuser.Shell;
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ import java.util.Map;
|
|||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
import butterknife.OnClick;
|
import butterknife.OnClick;
|
||||||
|
|
||||||
public class ModulesFragment extends BaseFragment implements Topic.Subscriber {
|
public class ModulesFragment extends BaseFragment {
|
||||||
|
|
||||||
@BindView(R.id.swipeRefreshLayout) SwipeRefreshLayout mSwipeRefreshLayout;
|
@BindView(R.id.swipeRefreshLayout) SwipeRefreshLayout mSwipeRefreshLayout;
|
||||||
@BindView(R.id.recyclerView) RecyclerView recyclerView;
|
@BindView(R.id.recyclerView) RecyclerView recyclerView;
|
||||||
@ -82,13 +82,13 @@ public class ModulesFragment extends BaseFragment implements Topic.Subscriber {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getSubscribedTopics() {
|
public int[] getListeningEvents() {
|
||||||
return new int[] {Topic.MODULE_LOAD_DONE};
|
return new int[] {Event.MODULE_LOAD_DONE};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPublish(int topic, Object[] result) {
|
public void onEvent(int event) {
|
||||||
updateUI((Map<String, Module>) result[0]);
|
updateUI(Event.getResult(event));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -20,15 +20,12 @@ import com.topjohnwu.magisk.Config;
|
|||||||
import com.topjohnwu.magisk.R;
|
import com.topjohnwu.magisk.R;
|
||||||
import com.topjohnwu.magisk.adapters.ReposAdapter;
|
import com.topjohnwu.magisk.adapters.ReposAdapter;
|
||||||
import com.topjohnwu.magisk.components.BaseFragment;
|
import com.topjohnwu.magisk.components.BaseFragment;
|
||||||
import com.topjohnwu.magisk.container.Module;
|
|
||||||
import com.topjohnwu.magisk.tasks.UpdateRepos;
|
import com.topjohnwu.magisk.tasks.UpdateRepos;
|
||||||
import com.topjohnwu.magisk.utils.Topic;
|
import com.topjohnwu.magisk.utils.Event;
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import butterknife.BindView;
|
import butterknife.BindView;
|
||||||
|
|
||||||
public class ReposFragment extends BaseFragment implements Topic.Subscriber {
|
public class ReposFragment extends BaseFragment {
|
||||||
|
|
||||||
@BindView(R.id.recyclerView) RecyclerView recyclerView;
|
@BindView(R.id.recyclerView) RecyclerView recyclerView;
|
||||||
@BindView(R.id.empty_rv) TextView emptyRv;
|
@BindView(R.id.empty_rv) TextView emptyRv;
|
||||||
@ -59,23 +56,23 @@ public class ReposFragment extends BaseFragment implements Topic.Subscriber {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getSubscribedTopics() {
|
public int[] getListeningEvents() {
|
||||||
return new int[] {Topic.MODULE_LOAD_DONE, Topic.REPO_LOAD_DONE};
|
return new int[] {Event.MODULE_LOAD_DONE, Event.REPO_LOAD_DONE};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPublish(int topic, Object[] result) {
|
public void onEvent(int event) {
|
||||||
switch (topic) {
|
switch (event) {
|
||||||
case Topic.MODULE_LOAD_DONE:
|
case Event.MODULE_LOAD_DONE:
|
||||||
adapter = new ReposAdapter(app.repoDB, (Map<String, Module>) result[0]);
|
adapter = new ReposAdapter(app.repoDB, Event.getResult(event));
|
||||||
recyclerView.setAdapter(adapter);
|
recyclerView.setAdapter(adapter);
|
||||||
break;
|
break;
|
||||||
case Topic.REPO_LOAD_DONE:
|
case Event.REPO_LOAD_DONE:
|
||||||
if (adapter != null)
|
if (adapter != null)
|
||||||
adapter.notifyDBChanged();
|
adapter.notifyDBChanged();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (Topic.isPublished(this)) {
|
if (Event.isTriggered(this)) {
|
||||||
mSwipeRefreshLayout.setRefreshing(false);
|
mSwipeRefreshLayout.setRefreshing(false);
|
||||||
boolean empty = adapter.getItemCount() == 0;
|
boolean empty = adapter.getItemCount() == 0;
|
||||||
recyclerView.setVisibility(empty ? View.GONE : View.VISIBLE);
|
recyclerView.setVisibility(empty ? View.GONE : View.VISIBLE);
|
||||||
|
@ -24,10 +24,10 @@ import com.topjohnwu.magisk.dialogs.FingerprintAuthDialog;
|
|||||||
import com.topjohnwu.magisk.tasks.CheckUpdates;
|
import com.topjohnwu.magisk.tasks.CheckUpdates;
|
||||||
import com.topjohnwu.magisk.utils.AppUtils;
|
import com.topjohnwu.magisk.utils.AppUtils;
|
||||||
import com.topjohnwu.magisk.utils.DownloadApp;
|
import com.topjohnwu.magisk.utils.DownloadApp;
|
||||||
|
import com.topjohnwu.magisk.utils.Event;
|
||||||
import com.topjohnwu.magisk.utils.FingerprintHelper;
|
import com.topjohnwu.magisk.utils.FingerprintHelper;
|
||||||
import com.topjohnwu.magisk.utils.LocaleManager;
|
import com.topjohnwu.magisk.utils.LocaleManager;
|
||||||
import com.topjohnwu.magisk.utils.PatchAPK;
|
import com.topjohnwu.magisk.utils.PatchAPK;
|
||||||
import com.topjohnwu.magisk.utils.Topic;
|
|
||||||
import com.topjohnwu.magisk.utils.Utils;
|
import com.topjohnwu.magisk.utils.Utils;
|
||||||
import com.topjohnwu.net.Networking;
|
import com.topjohnwu.net.Networking;
|
||||||
import com.topjohnwu.superuser.Shell;
|
import com.topjohnwu.superuser.Shell;
|
||||||
@ -36,7 +36,7 @@ import java.io.IOException;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
public class SettingsFragment extends BasePreferenceFragment implements Topic.Subscriber {
|
public class SettingsFragment extends BasePreferenceFragment {
|
||||||
|
|
||||||
private ListPreference updateChannel, autoRes, suNotification,
|
private ListPreference updateChannel, autoRes, suNotification,
|
||||||
requestTimeout, rootConfig, multiuserConfig, nsConfig;
|
requestTimeout, rootConfig, multiuserConfig, nsConfig;
|
||||||
@ -288,12 +288,12 @@ public class SettingsFragment extends BasePreferenceFragment implements Topic.Su
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPublish(int topic, Object[] result) {
|
public void onEvent(int event) {
|
||||||
setLocalePreference((ListPreference) findPreference(Config.Key.LOCALE));
|
setLocalePreference((ListPreference) findPreference(Config.Key.LOCALE));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int[] getSubscribedTopics() {
|
public int[] getListeningEvents() {
|
||||||
return new int[] {Topic.LOCALE_FETCH_DONE};
|
return new int[] {Event.LOCALE_FETCH_DONE};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,7 @@ import android.os.SystemClock;
|
|||||||
|
|
||||||
import com.topjohnwu.magisk.Config;
|
import com.topjohnwu.magisk.Config;
|
||||||
import com.topjohnwu.magisk.Const;
|
import com.topjohnwu.magisk.Const;
|
||||||
import com.topjohnwu.magisk.utils.Topic;
|
import com.topjohnwu.magisk.utils.Event;
|
||||||
import com.topjohnwu.net.Networking;
|
import com.topjohnwu.net.Networking;
|
||||||
import com.topjohnwu.net.Request;
|
import com.topjohnwu.net.Request;
|
||||||
import com.topjohnwu.net.ResponseListener;
|
import com.topjohnwu.net.ResponseListener;
|
||||||
@ -104,7 +104,7 @@ public class CheckUpdates {
|
|||||||
JSONObject uninstaller = getJson(json, "uninstaller");
|
JSONObject uninstaller = getJson(json, "uninstaller");
|
||||||
Config.uninstallerLink = getString(uninstaller, "link", null);
|
Config.uninstallerLink = getString(uninstaller, "link", null);
|
||||||
|
|
||||||
UiThreadHandler.handler.postAtTime(() -> Topic.publish(Topic.UPDATE_CHECK_DONE),
|
UiThreadHandler.handler.postAtTime(() -> Event.trigger(Event.UPDATE_CHECK_DONE),
|
||||||
start + 1000 /* Add artificial delay to let UI behave correctly */);
|
start + 1000 /* Add artificial delay to let UI behave correctly */);
|
||||||
|
|
||||||
if (cb != null)
|
if (cb != null)
|
||||||
|
@ -7,8 +7,8 @@ import com.topjohnwu.magisk.App;
|
|||||||
import com.topjohnwu.magisk.Config;
|
import com.topjohnwu.magisk.Config;
|
||||||
import com.topjohnwu.magisk.Const;
|
import com.topjohnwu.magisk.Const;
|
||||||
import com.topjohnwu.magisk.container.Repo;
|
import com.topjohnwu.magisk.container.Repo;
|
||||||
|
import com.topjohnwu.magisk.utils.Event;
|
||||||
import com.topjohnwu.magisk.utils.Logger;
|
import com.topjohnwu.magisk.utils.Logger;
|
||||||
import com.topjohnwu.magisk.utils.Topic;
|
|
||||||
import com.topjohnwu.magisk.utils.Utils;
|
import com.topjohnwu.magisk.utils.Utils;
|
||||||
import com.topjohnwu.net.Networking;
|
import com.topjohnwu.net.Networking;
|
||||||
import com.topjohnwu.net.Request;
|
import com.topjohnwu.net.Request;
|
||||||
@ -155,7 +155,7 @@ public class UpdateRepos {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void exec(boolean force) {
|
public void exec(boolean force) {
|
||||||
Topic.reset(Topic.REPO_LOAD_DONE);
|
Event.reset(Event.REPO_LOAD_DONE);
|
||||||
App.THREAD_POOL.execute(() -> {
|
App.THREAD_POOL.execute(() -> {
|
||||||
cached = Collections.synchronizedSet(app.repoDB.getRepoIDSet());
|
cached = Collections.synchronizedSet(app.repoDB.getRepoIDSet());
|
||||||
moduleQueue = new ConcurrentLinkedQueue<>();
|
moduleQueue = new ConcurrentLinkedQueue<>();
|
||||||
@ -166,7 +166,7 @@ public class UpdateRepos {
|
|||||||
} else if (force) {
|
} else if (force) {
|
||||||
fullReload();
|
fullReload();
|
||||||
}
|
}
|
||||||
Topic.publish(Topic.REPO_LOAD_DONE);
|
Event.trigger(Event.REPO_LOAD_DONE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
123
app/src/main/java/com/topjohnwu/magisk/utils/Event.java
Normal file
123
app/src/main/java/com/topjohnwu/magisk/utils/Event.java
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
package com.topjohnwu.magisk.utils;
|
||||||
|
|
||||||
|
import androidx.annotation.IntDef;
|
||||||
|
import androidx.collection.ArraySet;
|
||||||
|
|
||||||
|
import com.topjohnwu.superuser.internal.UiThreadHandler;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public class Event {
|
||||||
|
|
||||||
|
public static final int MAGISK_HIDE_DONE = 0;
|
||||||
|
public static final int MODULE_LOAD_DONE = 1;
|
||||||
|
public static final int REPO_LOAD_DONE = 2;
|
||||||
|
public static final int UPDATE_CHECK_DONE = 3;
|
||||||
|
public static final int LOCALE_FETCH_DONE = 4;
|
||||||
|
|
||||||
|
@IntDef({MAGISK_HIDE_DONE, MODULE_LOAD_DONE, REPO_LOAD_DONE,
|
||||||
|
UPDATE_CHECK_DONE, LOCALE_FETCH_DONE})
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
public @interface EventID {}
|
||||||
|
|
||||||
|
// We will not dynamically add topics, so use arrays instead of hash tables
|
||||||
|
private static Store[] eventList = new Store[5];
|
||||||
|
|
||||||
|
public static void register(Listener listener, @EventID int... events) {
|
||||||
|
for (int event : events) {
|
||||||
|
if (eventList[event] == null)
|
||||||
|
eventList[event] = new Store();
|
||||||
|
eventList[event].listeners.add(listener);
|
||||||
|
if (eventList[event].triggered) {
|
||||||
|
listener.onEvent(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void register(AutoListener listener) {
|
||||||
|
register(listener, listener.getListeningEvents());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void unregister(Listener listener, @EventID int... events) {
|
||||||
|
for (int event : events) {
|
||||||
|
if (eventList[event] == null)
|
||||||
|
continue;
|
||||||
|
eventList[event].listeners.remove(listener);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void unregister(AutoListener listener) {
|
||||||
|
unregister(listener, listener.getListeningEvents());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void trigger(@EventID int event) {
|
||||||
|
trigger(true, event, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void trigger(@EventID int event, Object result) {
|
||||||
|
trigger(true, event, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void trigger(boolean perm, @EventID int event) {
|
||||||
|
trigger(perm, event, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void trigger(boolean perm, @EventID int event, Object result) {
|
||||||
|
if (eventList[event] == null)
|
||||||
|
eventList[event] = new Store();
|
||||||
|
if (perm) {
|
||||||
|
eventList[event].result = result;
|
||||||
|
eventList[event].triggered = true;
|
||||||
|
}
|
||||||
|
for (Listener sub : eventList[event].listeners) {
|
||||||
|
UiThreadHandler.run(() -> sub.onEvent(event));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void reset(@EventID int event) {
|
||||||
|
if (eventList[event] == null)
|
||||||
|
return;
|
||||||
|
eventList[event].triggered = false;
|
||||||
|
eventList[event].result = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void reset(AutoListener listener) {
|
||||||
|
for (int event : listener.getListeningEvents())
|
||||||
|
reset(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isTriggered(@EventID int event) {
|
||||||
|
if (eventList[event] == null)
|
||||||
|
return false;
|
||||||
|
return eventList[event].triggered;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isTriggered(AutoListener listener) {
|
||||||
|
for (int event : listener.getListeningEvents()) {
|
||||||
|
if (!isTriggered(event))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> T getResult(@EventID int event) {
|
||||||
|
return (T) eventList[event].result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class Store {
|
||||||
|
boolean triggered = false;
|
||||||
|
Set<Listener> listeners = new ArraySet<>();
|
||||||
|
Object result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface Listener {
|
||||||
|
void onEvent(int event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface AutoListener extends Listener {
|
||||||
|
@EventID
|
||||||
|
int[] getListeningEvents();
|
||||||
|
}
|
||||||
|
}
|
@ -141,7 +141,7 @@ public class LocaleManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Collections.sort(locales, (a, b) -> a.getDisplayName(a).compareTo(b.getDisplayName(b)));
|
Collections.sort(locales, (a, b) -> a.getDisplayName(a).compareTo(b.getDisplayName(b)));
|
||||||
Topic.publish(Topic.LOCALE_FETCH_DONE);
|
Event.trigger(Event.LOCALE_FETCH_DONE);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,108 +0,0 @@
|
|||||||
package com.topjohnwu.magisk.utils;
|
|
||||||
|
|
||||||
import androidx.annotation.IntDef;
|
|
||||||
|
|
||||||
import com.topjohnwu.superuser.internal.UiThreadHandler;
|
|
||||||
|
|
||||||
import java.lang.annotation.Retention;
|
|
||||||
import java.lang.annotation.RetentionPolicy;
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public class Topic {
|
|
||||||
|
|
||||||
public static final int MAGISK_HIDE_DONE = 0;
|
|
||||||
public static final int MODULE_LOAD_DONE = 1;
|
|
||||||
public static final int REPO_LOAD_DONE = 2;
|
|
||||||
public static final int UPDATE_CHECK_DONE = 3;
|
|
||||||
public static final int LOCALE_FETCH_DONE = 4;
|
|
||||||
|
|
||||||
@IntDef({MAGISK_HIDE_DONE, MODULE_LOAD_DONE, REPO_LOAD_DONE,
|
|
||||||
UPDATE_CHECK_DONE, LOCALE_FETCH_DONE})
|
|
||||||
@Retention(RetentionPolicy.SOURCE)
|
|
||||||
public @interface TopicID {}
|
|
||||||
|
|
||||||
// We will not dynamically add topics, so use arrays instead of hash tables
|
|
||||||
private static Store[] topicList = new Store[5];
|
|
||||||
|
|
||||||
public static void subscribe(Subscriber sub, @TopicID int... topics) {
|
|
||||||
for (int topic : topics) {
|
|
||||||
if (topicList[topic] == null)
|
|
||||||
topicList[topic] = new Store();
|
|
||||||
topicList[topic].subscribers.add(sub);
|
|
||||||
if (topicList[topic].published) {
|
|
||||||
sub.onPublish(topic, topicList[topic].results);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void subscribe(AutoSubscriber sub) {
|
|
||||||
subscribe(sub, sub.getSubscribedTopics());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void unsubscribe(Subscriber sub, @TopicID int... topics) {
|
|
||||||
for (int topic : topics) {
|
|
||||||
if (topicList[topic] == null)
|
|
||||||
continue;
|
|
||||||
topicList[topic].subscribers.remove(sub);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void unsubscribe(AutoSubscriber sub) {
|
|
||||||
unsubscribe(sub, sub.getSubscribedTopics());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void publish(@TopicID int topic, Object... results) {
|
|
||||||
publish(true, topic, results);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void publish(boolean persist, @TopicID int topic, Object... results) {
|
|
||||||
if (topicList[topic] == null)
|
|
||||||
topicList[topic] = new Store();
|
|
||||||
if (persist) {
|
|
||||||
topicList[topic].results = results;
|
|
||||||
topicList[topic].published = true;
|
|
||||||
}
|
|
||||||
for (Subscriber sub : topicList[topic].subscribers) {
|
|
||||||
UiThreadHandler.run(() -> sub.onPublish(topic, results));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void reset(@TopicID int... topics) {
|
|
||||||
for (int topic : topics) {
|
|
||||||
if (topicList[topic] == null)
|
|
||||||
continue;
|
|
||||||
topicList[topic].published = false;
|
|
||||||
topicList[topic].results = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isPublished(@TopicID int... topics) {
|
|
||||||
for (int topic : topics) {
|
|
||||||
if (topicList[topic] == null)
|
|
||||||
return false;
|
|
||||||
if (!topicList[topic].published)
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isPublished(AutoSubscriber sub) {
|
|
||||||
return isPublished(sub.getSubscribedTopics());
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class Store {
|
|
||||||
boolean published = false;
|
|
||||||
Set<Subscriber> subscribers = new HashSet<>();
|
|
||||||
Object[] results;
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface Subscriber {
|
|
||||||
void onPublish(int topic, Object[] result);
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface AutoSubscriber extends Subscriber {
|
|
||||||
@TopicID
|
|
||||||
int[] getSubscribedTopics();
|
|
||||||
}
|
|
||||||
}
|
|
@ -95,7 +95,7 @@ public class Utils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void loadModules() {
|
public static void loadModules() {
|
||||||
Topic.reset(Topic.MODULE_LOAD_DONE);
|
Event.reset(Event.MODULE_LOAD_DONE);
|
||||||
App.THREAD_POOL.execute(() -> {
|
App.THREAD_POOL.execute(() -> {
|
||||||
Map<String, Module> moduleMap = new ValueSortedMap<>();
|
Map<String, Module> moduleMap = new ValueSortedMap<>();
|
||||||
SuFile path = new SuFile(Const.MAGISK_PATH);
|
SuFile path = new SuFile(Const.MAGISK_PATH);
|
||||||
@ -106,7 +106,7 @@ public class Utils {
|
|||||||
Module module = new Module(Const.MAGISK_PATH + "/" + file.getName());
|
Module module = new Module(Const.MAGISK_PATH + "/" + file.getName());
|
||||||
moduleMap.put(module.getId(), module);
|
moduleMap.put(module.getId(), module);
|
||||||
}
|
}
|
||||||
Topic.publish(Topic.MODULE_LOAD_DONE, moduleMap);
|
Event.trigger(Event.MODULE_LOAD_DONE, moduleMap);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user