use of de.Maxr1998.xposed.maxlock.ui.SettingsActivity in project MaxLock by Maxr1998.
the class MaxLockPreferenceFragment method onStart.
@Override
public void onStart() {
super.onStart();
setTitle();
if (screen == Screen.MAIN) {
findPreference(Common.ABOUT).setTitle(getName() + " " + BuildConfig.VERSION_NAME);
if (prefs.getBoolean(Common.DONATED, false)) {
Preference donate = findPreference(Common.DONATE);
donate.setTitle(R.string.pref_donate_thanks_for_donation);
donate.setSummary(R.string.pref_donate_again_on_pro_summary);
Preference pro = findPreference(Common.ENABLE_PRO);
pro.setEnabled(false);
pro.setSummary("");
if (!prefs.getBoolean(Common.ENABLE_PRO, false)) {
prefs.edit().putBoolean(Common.ENABLE_PRO, true).putBoolean(Common.ENABLE_LOGGING, true).apply();
}
}
if (((SettingsActivity) getActivity()).isDeviceAdminActive()) {
Preference protectOrUninstall = findPreference(Common.UNINSTALL);
protectOrUninstall.setTitle(R.string.pref_uninstall);
protectOrUninstall.setSummary("");
}
}
// Show Snackbars if no password and/or packages set up
if (screen == Screen.MAIN && isFirstPane()) {
@StringRes int stringId = 0;
Fragment fragment = null;
if (prefs.getString(Common.LOCKING_TYPE, "").equals("")) {
stringId = R.string.sb_no_locking_type;
fragment = Screen.TYPE.getScreen();
} else if (!new File(Util.dataDir(getContext()) + "shared_prefs" + File.separator + Common.PREFS_APPS + ".xml").exists()) {
stringId = R.string.sb_no_locked_apps;
fragment = new AppListFragment();
}
if (stringId != 0 && fragment != null) {
final Fragment copyFragment = fragment;
snackCache = Snackbar.make(getActivity().findViewById(android.R.id.content), stringId, Snackbar.LENGTH_INDEFINITE).setAction(R.string.sb_action_setup, v -> launchFragment(this, copyFragment, true));
snackCache.show();
}
}
}
use of de.Maxr1998.xposed.maxlock.ui.SettingsActivity in project MaxLock by Maxr1998.
the class MaxLockPreferenceFragment method onPreferenceTreeClick.
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
if (preference.getKey() == null) {
return false;
}
switch(screen) {
case MAIN:
switch(preference.getKey()) {
case Common.ML_IMPLEMENTATION:
AlertDialog implementation = new AlertDialog.Builder(getContext()).setTitle(preference.getTitle()).setView(MLImplementation.createImplementationDialog(getContext())).setNegativeButton(android.R.string.ok, null).setOnDismissListener(dialog -> updateImplementationStatus()).create();
implementation.show();
return true;
case Common.LOCKING_TYPE_SETTINGS:
launchFragment(this, Screen.TYPE.getScreen(), true);
return true;
case Common.LOCKING_UI_SETTINGS:
launchFragment(this, Screen.UI.getScreen(), true);
return true;
case Common.LOCKING_OPTIONS:
launchFragment(this, Screen.OPTIONS.getScreen(), true);
return true;
case Common.IMOD_OPTIONS:
launchFragment(this, Screen.IMOD.getScreen(), true);
return true;
case Common.CHOOSE_APPS:
launchFragment(this, new AppListFragment(), true);
return true;
case Common.HIDE_APP_FROM_LAUNCHER:
TwoStatePreference hideApp = (TwoStatePreference) preference;
if (hideApp.isChecked()) {
Toast.makeText(getActivity(), R.string.reboot_required, Toast.LENGTH_SHORT).show();
ComponentName componentName = new ComponentName(getActivity(), "de.Maxr1998.xposed.maxlock.Main");
getActivity().getPackageManager().setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
} else {
ComponentName componentName = new ComponentName(getActivity(), "de.Maxr1998.xposed.maxlock.Main");
getActivity().getPackageManager().setComponentEnabledSetting(componentName, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
}
return true;
case Common.USE_DARK_STYLE:
case Common.USE_AMOLED_BLACK:
case Common.ENABLE_PRO:
getActivity().recreate();
return true;
case Common.ABOUT:
launchFragment(this, Screen.ABOUT.getScreen(), true);
return true;
case Common.DONATE:
startActivity(new Intent(getActivity(), DonateActivity.class));
return true;
case Common.UNINSTALL:
if (!((SettingsActivity) getActivity()).isDeviceAdminActive()) {
Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, ((SettingsActivity) getActivity()).deviceAdmin);
startActivity(intent);
} else {
((SettingsActivity) getActivity()).getDevicePolicyManager().removeActiveAdmin(((SettingsActivity) getActivity()).deviceAdmin);
preference.setTitle(R.string.pref_prevent_uninstall);
preference.setSummary(R.string.pref_prevent_uninstall_summary);
Intent uninstall = new Intent(Intent.ACTION_DELETE);
uninstall.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
uninstall.setData(Uri.parse("package:de.Maxr1998.xposed.maxlock"));
startActivity(uninstall);
}
return true;
case Common.SEND_FEEDBACK:
File tempDirectory = new File(getActivity().getCacheDir(), "feedback-cache");
try {
// Obtain data
FileUtils.copyDirectoryToDirectory(new File(Util.dataDir(getActivity()), "shared_prefs"), tempDirectory);
FileUtils.writeStringToFile(new File(tempDirectory, "device-info.txt"), "App Version: " + BuildConfig.VERSION_NAME + "\n\n" + "Device: " + Build.MANUFACTURER + " " + Build.MODEL + " (" + Build.PRODUCT + ")\n" + "API: " + SDK_INT + ", Fingerprint: " + Build.FINGERPRINT, Charset.forName("UTF-8"));
Process process = Runtime.getRuntime().exec("logcat -d");
FileUtils.copyInputStreamToFile(process.getInputStream(), new File(tempDirectory, "logcat.txt"));
try {
String xposedDir = SDK_INT >= Build.VERSION_CODES.N ? "/data/user_de/0/" + Common.XPOSED_PACKAGE_NAME : getActivity().getPackageManager().getApplicationInfo(Common.XPOSED_PACKAGE_NAME, 0).dataDir;
File xposedLog = new File(xposedDir + "/log", "error.log");
if (xposedLog.exists())
FileUtils.copyFileToDirectory(xposedLog, tempDirectory);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
// Create zip
File zipFile = new File(getActivity().getCacheDir() + File.separator + "export", "report.zip");
zipFile.getParentFile().mkdir();
FileUtils.deleteQuietly(zipFile);
ZipOutputStream stream = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipFile)));
Util.writeDirectoryToZip(tempDirectory, stream);
stream.close();
FileUtils.deleteQuietly(tempDirectory);
Util.checkForStoragePermission(this, BUG_REPORT_STORAGE_PERMISSION_REQUEST_CODE, R.string.dialog_storage_permission_bug_report);
} catch (IOException e) {
e.printStackTrace();
}
return true;
}
break;
case TYPE:
switch(preference.getKey()) {
case Common.LOCKING_TYPE_PASSWORD:
Util.setPassword(getActivity(), null);
return true;
case Common.LOCKING_TYPE_PIN:
LockSetupFragment lsp = new LockSetupFragment();
Bundle b1 = new Bundle(1);
b1.putString(Common.LOCKING_TYPE, Common.LOCKING_TYPE_PIN);
lsp.setArguments(b1);
launchFragment(this, lsp, false);
return true;
case Common.LOCKING_TYPE_KNOCK_CODE:
LockSetupFragment lsk = new LockSetupFragment();
Bundle b2 = new Bundle(1);
b2.putString(Common.LOCKING_TYPE, Common.LOCKING_TYPE_KNOCK_CODE);
lsk.setArguments(b2);
launchFragment(this, lsk, false);
return true;
case Common.LOCKING_TYPE_PATTERN:
Intent intent = new Intent(LockPatternActivity.ACTION_CREATE_PATTERN, null, getActivity(), LockPatternActivity.class);
startActivityForResult(intent, KUtil.getPatternCode(-1));
return true;
}
break;
case OPTIONS:
switch(preference.getKey()) {
case Common.VIEW_LOGS:
launchFragment(this, new LogViewerFragment(), false);
return true;
}
break;
case ABOUT:
switch(preference.getKey()) {
case Common.SHOW_CHANGELOG:
showChangelog();
return true;
case Common.VISIT_WEBSITE:
CustomTabsIntent devWebsite = new CustomTabsIntent.Builder(((SettingsActivity) getActivity()).getSession()).setShowTitle(true).enableUrlBarHiding().setToolbarColor(Color.parseColor("#ffc107")).build();
devWebsite.launchUrl(getActivity(), Common.MAXR1998_URI);
return true;
case Common.TECHNOSPARKS_PROFILE:
CustomTabsIntent technosparksSite = new CustomTabsIntent.Builder(((SettingsActivity) getActivity()).getSession()).setShowTitle(true).enableUrlBarHiding().setToolbarColor(Color.parseColor("#6d993f")).build();
technosparksSite.launchUrl(getActivity(), Common.TECHNO_SPARKS_URI);
return true;
}
break;
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
}
use of de.Maxr1998.xposed.maxlock.ui.SettingsActivity in project MaxLock by Maxr1998.
the class MaxLockPreferenceFragment method launchFragment.
public static void launchFragment(@NonNull Fragment fragment, @NonNull Fragment replacement, boolean fromRoot) {
FragmentManager manager = fragment.getFragmentManager();
if (fromRoot) {
manager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
FragmentTransaction transaction = manager.beginTransaction();
if (manager.getBackStackEntryCount() > 0 || !((SettingsActivity) fragment.getActivity()).inLandscape())
transaction.setCustomAnimations(R.anim.fragment_in, 0, R.anim.fragment_pop_in, R.anim.fragment_pop_out);
transaction.replace(R.id.fragment_container, replacement).addToBackStack(null).commit();
if (fromRoot && ((MaxLockPreferenceFragment) fragment).isFirstPane())
SettingsActivity.showMultipaneIfInLandscape((SettingsActivity) fragment.getActivity());
}
use of de.Maxr1998.xposed.maxlock.ui.SettingsActivity in project MaxLock by Maxr1998.
the class AppListFragment method onRequestPermissionsResult.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (grantResults.length == 0 || grantResults[0] == PackageManager.PERMISSION_DENIED) {
return;
}
final String prefsAppsName = Common.PREFS_APPS + ".xml";
final String prefsPerAppName = Common.PREFS_KEYS_PER_APP + ".xml";
final File prefsAppsFile = new File(Util.dataDir(getActivity()) + "shared_prefs/" + prefsAppsName);
final File prefsPerAppFile = new File(Util.dataDir(getActivity()) + "shared_prefs/" + prefsPerAppName);
switch(requestCode) {
case BACKUP_STORAGE_PERMISSION_REQUEST_CODE:
String currentBackupDirPath = Common.BACKUP_DIR + new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss", Locale.getDefault()).format(new Date(System.currentTimeMillis())) + File.separator;
backupFile(prefsAppsFile, new File(currentBackupDirPath));
backupFile(prefsPerAppFile, new File(currentBackupDirPath));
if (new File(currentBackupDirPath).exists() && new File(currentBackupDirPath + prefsAppsName).exists())
Toast.makeText(getActivity(), R.string.toast_backup_success, Toast.LENGTH_SHORT).show();
break;
case RESTORE_STORAGE_PERMISSION_REQUEST_CODE:
File backupDir = new File(Common.BACKUP_DIR);
// noinspection ResultOfMethodCallIgnored
backupDir.mkdirs();
List<String> list = new ArrayList<>(Arrays.asList(backupDir.list()));
restoreAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, list);
AlertDialog restoreDialog = new AlertDialog.Builder(getActivity()).setTitle(R.string.dialog_text_restore_list).setNegativeButton(android.R.string.cancel, null).setAdapter(restoreAdapter, (dialogInterface, i) -> {
File restorePackagesFile = new File(Common.BACKUP_DIR + restoreAdapter.getItem(i) + File.separator + prefsAppsName);
File restorePerAppFile = new File(Common.BACKUP_DIR + restoreAdapter.getItem(i) + File.separator + prefsPerAppName);
try {
if (restorePackagesFile.exists()) {
FileUtils.deleteQuietly(prefsAppsFile);
FileUtils.copyFile(restorePackagesFile, prefsAppsFile);
}
if (restorePerAppFile.exists()) {
FileUtils.deleteQuietly(prefsPerAppFile);
FileUtils.copyFile(restorePerAppFile, prefsPerAppFile);
}
} catch (IOException e) {
Toast.makeText(getActivity(), R.string.toast_no_files_to_restore, Toast.LENGTH_SHORT).show();
}
getActivity().getSharedPreferences(Common.PREFS_APPS, Context.MODE_MULTI_PROCESS);
getActivity().getSharedPreferences(Common.PREFS_KEYS_PER_APP, Context.MODE_MULTI_PROCESS);
Toast.makeText(getActivity(), R.string.toast_restore_success, Toast.LENGTH_SHORT).show();
((SettingsActivity) getActivity()).restart();
}).show();
restoreDialog.getListView().setOnItemLongClickListener((adapterView, view, i, l) -> {
try {
FileUtils.deleteDirectory(new File(Common.BACKUP_DIR + restoreAdapter.getItem(i)));
restoreAdapter.remove(restoreAdapter.getItem(i));
restoreAdapter.notifyDataSetChanged();
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
});
break;
}
}
use of de.Maxr1998.xposed.maxlock.ui.SettingsActivity in project MaxLock by Maxr1998.
the class SettingsActivity method showMultipaneIfInLandscape.
public static void showMultipaneIfInLandscape(SettingsActivity activity) {
if (activity.secondFragmentContainer != null) {
activity.secondFragmentContainer.setVisibility(View.VISIBLE);
FragmentManager manager = activity.getSupportFragmentManager();
Fragment secondPane = manager.findFragmentByTag(TAG_PREFERENCE_FRAGMENT_SECOND_PANE);
if (secondPane == null) {
secondPane = MaxLockPreferenceFragment.Screen.MAIN.getScreen();
}
if (!secondPane.isAdded())
manager.beginTransaction().replace(R.id.second_fragment_container, secondPane, TAG_PREFERENCE_FRAGMENT_SECOND_PANE).commit();
}
}
Aggregations