package dev.ukanth.ufirewall.preferences; import android.content.Intent; import android.os.Bundle; import android.preference.Preference; import android.preference.PreferenceFragment; import android.widget.Toast; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileChannel; import java.util.Arrays; import java.util.List; import dev.ukanth.ufirewall.R; import dev.ukanth.ufirewall.activity.ProfileActivity; import dev.ukanth.ufirewall.util.G; public class MultiProfilePreferenceFragment extends PreferenceFragment { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Load the preferences from an XML resource addPreferencesFromResource(R.xml.profiles_preferences); Preference button = (Preference)findPreference("manage_profiles"); button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { //code for what you want it to do startActivity(new Intent(getActivity(), ProfileActivity.class)); return true; } }); Preference migrate = (Preference) findPreference("migrate_profile"); if(!G.isMigrated()) { migrate.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { @Override public boolean onPreferenceClick(Preference preference) { migrateProfiles(); return true; } }); } else { migrate.setEnabled(false); } } private void migrateProfiles() { try{ //making sure profiles are enabled and not migrated if(!G.isMigrated()) { //first check if they have additional profiles List<String> additionalProfiles = G.getAdditionalProfiles(); int count = 4; int index = 0; if(additionalProfiles != null && additionalProfiles.size() > 0) { File dir = new File(getActivity().getFilesDir().getParent() + "/shared_prefs/"); String[] children = dir.list(); Arrays.sort(children); for (int i = 0; i < children.length; i++) { //String profName = ; // clear each of the prefrances if(children[i].replace(".xml", "").equals("AFWallProfile" + count)) { File src = new File(dir, children[i]); File dest = new File(dir,additionalProfiles.get(index) + ".xml"); copy(src,dest); src.delete(); //new File(dir, children[i]).renameTo(new File(dir,additionalProfiles.get(index++))); count = count + 1; index = index + 1; } } G.isMigrated(true); Toast.makeText(getActivity(),"Successfully migrated the profiles.",Toast.LENGTH_LONG).show(); } }else { Toast.makeText(getActivity(),"You have already migrated the profiles",Toast.LENGTH_LONG).show(); } } catch (Exception e) { Toast.makeText(getActivity(),"Unable to migrate the profiles. Please clear the data and reconfigure it",Toast.LENGTH_LONG).show(); G.isMigrated(false); } } public void copy(File src, File dst) throws IOException { FileInputStream inStream = new FileInputStream(src); FileOutputStream outStream = new FileOutputStream(dst); FileChannel inChannel = inStream.getChannel(); FileChannel outChannel = outStream.getChannel(); inChannel.transferTo(0, inChannel.size(), outChannel); inStream.close(); outStream.close(); } }