0) {
- selectedPath = Uri.fromFile(new File(storageValues[0]));
- }
-
- String label;
-
- if (selectedPath.toString().startsWith("file://")) {
- // Simple path
- label = selectedPath.getPath();
- } else {
- // Uri TODO: Add a nice readable label
- label = selectedPath.getPath();
- }
-
- mPrefExportPath.setSummary(label);
- }
-
- /**
- * Returns from a result activity
- * @param requestCode The request code
- * @param resultCode The result code
- * @param data The data
- */
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
-
- // Result is ok
- if (resultCode == RESULT_OK) {
- // Export path was changed
- if (requestCode == REQUEST_EXPORT_PATH) {
- // TODO
- Uri uri = data.getData();
-
- Logger.getInstance().logInfo("Uri", uri.toString());
-
- // Saves the permission
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP ) {
- getContentResolver().takePersistableUriPermission(uri,
- Intent.FLAG_GRANT_READ_URI_PERMISSION |
- Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
- }
-
- mSettings.setUri(PlayMusicExporterSettings.PREF_EXPORT_URI, uri);
-
- // Update the label
- updatePrefExportPath();
- }
- }
- }
-}
\ No newline at end of file
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/actionmode/ActionModeTitle.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/actionmode/ActionModeTitle.java
similarity index 94%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/actionmode/ActionModeTitle.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/actionmode/ActionModeTitle.java
index 692e112..13d1093 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/actionmode/ActionModeTitle.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/actionmode/ActionModeTitle.java
@@ -20,7 +20,7 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.actionmode;
+package re.jcg.playmusicexporter.actionmode;
import android.content.Context;
import android.support.v7.view.ActionMode;
@@ -28,11 +28,11 @@ import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
-import de.arcus.playmusicexporter2.R;
-import de.arcus.playmusicexporter2.activities.MusicContainerListActivity;
-import de.arcus.playmusicexporter2.activities.MusicTrackListActivity;
-import de.arcus.playmusicexporter2.fragments.MusicTrackListFragment;
-import de.arcus.playmusicexporter2.items.SelectedTrackList;
+import re.jcg.playmusicexporter.R;
+import re.jcg.playmusicexporter.activities.MusicContainerListActivity;
+import re.jcg.playmusicexporter.activities.MusicTrackListActivity;
+import re.jcg.playmusicexporter.fragments.MusicTrackListFragment;
+import re.jcg.playmusicexporter.items.SelectedTrackList;
/**
* Action mode for selected tracks
diff --git a/playmusicexporter/src/main/java/re/jcg/playmusicexporter/activities/AppCompatPreferenceActivity.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/activities/AppCompatPreferenceActivity.java
new file mode 100644
index 0000000..3953943
--- /dev/null
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/activities/AppCompatPreferenceActivity.java
@@ -0,0 +1,109 @@
+package re.jcg.playmusicexporter.activities;
+
+import android.content.res.Configuration;
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+import android.support.annotation.LayoutRes;
+import android.support.annotation.Nullable;
+import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatDelegate;
+import android.support.v7.widget.Toolbar;
+import android.view.MenuInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls
+ * to be used with AppCompat.
+ */
+public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
+
+ private AppCompatDelegate mDelegate;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ getDelegate().installViewFactory();
+ getDelegate().onCreate(savedInstanceState);
+ super.onCreate(savedInstanceState);
+ }
+
+ @Override
+ protected void onPostCreate(Bundle savedInstanceState) {
+ super.onPostCreate(savedInstanceState);
+ getDelegate().onPostCreate(savedInstanceState);
+ }
+
+ public ActionBar getSupportActionBar() {
+ return getDelegate().getSupportActionBar();
+ }
+
+ public void setSupportActionBar(@Nullable Toolbar toolbar) {
+ getDelegate().setSupportActionBar(toolbar);
+ }
+
+ @Override
+ public MenuInflater getMenuInflater() {
+ return getDelegate().getMenuInflater();
+ }
+
+ @Override
+ public void setContentView(@LayoutRes int layoutResID) {
+ getDelegate().setContentView(layoutResID);
+ }
+
+ @Override
+ public void setContentView(View view) {
+ getDelegate().setContentView(view);
+ }
+
+ @Override
+ public void setContentView(View view, ViewGroup.LayoutParams params) {
+ getDelegate().setContentView(view, params);
+ }
+
+ @Override
+ public void addContentView(View view, ViewGroup.LayoutParams params) {
+ getDelegate().addContentView(view, params);
+ }
+
+ @Override
+ protected void onPostResume() {
+ super.onPostResume();
+ getDelegate().onPostResume();
+ }
+
+ @Override
+ protected void onTitleChanged(CharSequence title, int color) {
+ super.onTitleChanged(title, color);
+ getDelegate().setTitle(title);
+ }
+
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ super.onConfigurationChanged(newConfig);
+ getDelegate().onConfigurationChanged(newConfig);
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ getDelegate().onStop();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ getDelegate().onDestroy();
+ }
+
+ public void invalidateOptionsMenu() {
+ getDelegate().invalidateOptionsMenu();
+ }
+
+ private AppCompatDelegate getDelegate() {
+ if (mDelegate == null) {
+ mDelegate = AppCompatDelegate.create(this, null);
+ }
+ return mDelegate;
+ }
+}
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicContainerListActivity.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/activities/MusicContainerListActivity.java
similarity index 96%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicContainerListActivity.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/activities/MusicContainerListActivity.java
index 192ee42..33dcf65 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicContainerListActivity.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/activities/MusicContainerListActivity.java
@@ -20,7 +20,7 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.activities;
+package re.jcg.playmusicexporter.activities;
import android.Manifest;
import android.content.DialogInterface;
@@ -44,11 +44,11 @@ import android.widget.EditText;
import de.arcus.framework.logger.Logger;
import de.arcus.framework.crashhandler.CrashHandler;
-import de.arcus.playmusicexporter2.R;
-import de.arcus.playmusicexporter2.fragments.MusicTrackListFragment;
-import de.arcus.playmusicexporter2.fragments.MusicContainerListFragment;
-import de.arcus.playmusicexporter2.fragments.NavigationDrawerFragment;
-import de.arcus.playmusicexporter2.items.SelectedTrackList;
+import re.jcg.playmusicexporter.R;
+import re.jcg.playmusicexporter.fragments.MusicTrackListFragment;
+import re.jcg.playmusicexporter.fragments.MusicContainerListFragment;
+import re.jcg.playmusicexporter.fragments.NavigationDrawerFragment;
+import re.jcg.playmusicexporter.items.SelectedTrackList;
import de.arcus.playmusiclib.PlayMusicManager;
import de.arcus.playmusiclib.datasources.AlbumDataSource;
import de.arcus.playmusiclib.datasources.ArtistDataSource;
@@ -106,7 +106,7 @@ public class MusicContainerListActivity extends AppCompatActivity
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_track_list);
- // Adds the crash handler to this class
+ //Adds the crash handler to this class
CrashHandler.addCrashHandler(this);
Logger.getInstance().logVerbose("Activity", "onCreate(" + this.getLocalClassName() + ")");
@@ -186,7 +186,6 @@ public class MusicContainerListActivity extends AppCompatActivity
builder.show();
}
- return;
}
}
}
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicTrackListActivity.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/activities/MusicTrackListActivity.java
similarity index 96%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicTrackListActivity.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/activities/MusicTrackListActivity.java
index bbc9f2f..df4d2e2 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/activities/MusicTrackListActivity.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/activities/MusicTrackListActivity.java
@@ -20,7 +20,7 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.activities;
+package re.jcg.playmusicexporter.activities;
import android.content.Intent;
import android.os.Bundle;
@@ -30,9 +30,9 @@ import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import de.arcus.framework.crashhandler.CrashHandler;
-import de.arcus.playmusicexporter2.R;
-import de.arcus.playmusicexporter2.fragments.MusicTrackListFragment;
-import de.arcus.playmusicexporter2.items.SelectedTrackList;
+import re.jcg.playmusicexporter.R;
+import re.jcg.playmusicexporter.fragments.MusicTrackListFragment;
+import re.jcg.playmusicexporter.items.SelectedTrackList;
import de.arcus.playmusiclib.PlayMusicManager;
import de.arcus.playmusiclib.items.MusicTrackList;
diff --git a/playmusicexporter/src/main/java/re/jcg/playmusicexporter/activities/SettingsActivity.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/activities/SettingsActivity.java
new file mode 100644
index 0000000..cc10bfa
--- /dev/null
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/activities/SettingsActivity.java
@@ -0,0 +1,276 @@
+package re.jcg.playmusicexporter.activities;
+
+
+import android.annotation.TargetApi;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Configuration;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Bundle;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+import android.support.v7.app.ActionBar;
+import android.preference.PreferenceFragment;
+import android.preference.PreferenceManager;
+import android.preference.RingtonePreference;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.MenuItem;
+import android.support.v4.app.NavUtils;
+
+import re.jcg.playmusicexporter.R;
+import re.jcg.playmusicexporter.services.ExportAllService;
+
+import java.util.List;
+
+import static android.os.Build.VERSION_CODES.LOLLIPOP;
+
+/**
+ * A {@link PreferenceActivity} that presents a set of application settings. On
+ * handset devices, settings are presented as a single list. On tablets,
+ * settings are split by category, with category headers shown to the left of
+ * the list of settings.
+ *
+ * See
+ * Android Design: Settings for design guidelines and the Settings
+ * API Guide for more information on developing a Settings UI.
+ */
+public class SettingsActivity extends AppCompatPreferenceActivity {
+ private static final String TAG = "MusicExporter_Settings";
+ private static final int OPEN_DOCUMENT_TREE_REQUEST_CODE = 0;
+ /**
+ * A preference value change listener that updates the preference's summary
+ * to reflect its new value.
+ */
+ private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object value) {
+ String stringValue = value.toString();
+
+ if (preference instanceof ListPreference) {
+ // For list preferences, look up the correct display value in
+ // the preference's 'entries' list.
+ ListPreference listPreference = (ListPreference) preference;
+ int index = listPreference.findIndexOfValue(stringValue);
+
+ // Set the summary to reflect the new value.
+ preference.setSummary(
+ index >= 0
+ ? listPreference.getEntries()[index]
+ : null);
+
+ } else {
+ // For all other preferences, set the summary to the value's
+ // simple string representation.
+ preference.setSummary(stringValue);
+ }
+
+ return true;
+ }
+ };
+
+ /**
+ * Helper method to determine if the device has an extra-large screen. For
+ * example, 10" tablets are extra-large.
+ */
+ private static boolean isXLargeTablet(Context context) {
+ return (context.getResources().getConfiguration().screenLayout
+ & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_XLARGE;
+ }
+
+ /**
+ * Binds a preference's summary to its value. More specifically, when the
+ * preference's value is changed, its summary (line of text below the
+ * preference title) is updated to reflect the value. The summary is also
+ * immediately updated upon calling this method. The exact display format is
+ * dependent on the type of preference.
+ *
+ * @see #sBindPreferenceSummaryToValueListener
+ */
+ private static void bindPreferenceSummaryToValue(Preference preference) {
+ // Set the listener to watch for value changes.
+ preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
+
+ // Trigger the listener immediately with the preference's
+ // current value.
+ sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
+ PreferenceManager
+ .getDefaultSharedPreferences(preference.getContext())
+ .getString(preference.getKey(), ""));
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setupActionBar();
+ }
+
+ /**
+ * Set up the {@link android.app.ActionBar}, if the API is available.
+ */
+ private void setupActionBar() {
+ ActionBar actionBar = getSupportActionBar();
+ if (actionBar != null) {
+ // Show the Up button in the action bar.
+ actionBar.setDisplayHomeAsUpEnabled(true);
+ }
+ }
+
+ @Override
+ public boolean onMenuItemSelected(int featureId, MenuItem item) {
+ int id = item.getItemId();
+ if (id == android.R.id.home) {
+ if (!super.onMenuItemSelected(featureId, item)) {
+ NavUtils.navigateUpFromSameTask(this);
+ }
+ return true;
+ }
+ return super.onMenuItemSelected(featureId, item);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean onIsMultiPane() {
+ return isXLargeTablet(this);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ @TargetApi(Build.VERSION_CODES.HONEYCOMB)
+ public void onBuildHeaders(List target) {
+ loadHeadersFromResource(R.xml.pref_headers, target);
+ }
+
+ /**
+ * This method stops fragment injection in malicious applications.
+ * Make sure to deny any unknown fragments here.
+ */
+ protected boolean isValidFragment(String fragmentName) {
+ return PreferenceFragment.class.getName().equals(fragmentName)
+ || ExportPreferenceFragment.class.getName().equals(fragmentName)
+ || AutomationPreferenceFragment.class.getName().equals(fragmentName)
+ || AboutPreferenceFragment.class.getName().equals(fragmentName)
+ || DebugPreferenceFragment.class.getName().equals(fragmentName);
+ }
+
+ public static class ExportPreferenceFragment extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.pref_export);
+ setHasOptionsMenu(true);
+
+
+ findPreference("preference_export_path").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ startActivityForResult(new Intent("android.intent.action.OPEN_DOCUMENT_TREE"), OPEN_DOCUMENT_TREE_REQUEST_CODE);
+ return true;
+ }
+ });
+ }
+
+ public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
+ switch (requestCode) {
+ case OPEN_DOCUMENT_TREE_REQUEST_CODE:
+ if (resultCode == RESULT_OK) {
+ Uri treeUri = resultData.getData();
+ PreferenceManager.getDefaultSharedPreferences(getActivity()).edit().putString("preference_export_tree_uri", treeUri.toString()).apply();
+ getActivity().getContentResolver().takePersistableUriPermission(treeUri,
+ Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+ Log.i(TAG, "Selected " + treeUri.toString());
+ }
+ break;
+ default:
+ Log.i(TAG, "Received activityResult with unknown requestCode");
+
+ }
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ int id = item.getItemId();
+ if (id == android.R.id.home) {
+ startActivity(new Intent(getActivity(), SettingsActivity.class));
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+ public static class AutomationPreferenceFragment extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.pref_automation);
+ setHasOptionsMenu(true);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ int id = item.getItemId();
+ if (id == android.R.id.home) {
+ startActivity(new Intent(getActivity(), SettingsActivity.class));
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+ public static class AboutPreferenceFragment extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.pref_about);
+ setHasOptionsMenu(true);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ int id = item.getItemId();
+ if (id == android.R.id.home) {
+ startActivity(new Intent(getActivity(), SettingsActivity.class));
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+ public static class DebugPreferenceFragment extends PreferenceFragment {
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.pref_debug);
+ setHasOptionsMenu(true);
+
+ findPreference("debug_trigger_export_all").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ Log.i(TAG, "Debug Trigger Export All Click registered.");
+ ExportAllService.startExport(getActivity());
+ return true;
+ }
+ });
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ int id = item.getItemId();
+ if (id == android.R.id.home) {
+ startActivity(new Intent(getActivity(), SettingsActivity.class));
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+}
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/adapter/MusicContainerListAdapter.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/adapter/MusicContainerListAdapter.java
similarity index 95%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/adapter/MusicContainerListAdapter.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/adapter/MusicContainerListAdapter.java
index 74194fe..ecab4f4 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/adapter/MusicContainerListAdapter.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/adapter/MusicContainerListAdapter.java
@@ -20,7 +20,7 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.adapter;
+package re.jcg.playmusicexporter.adapter;
import android.content.Context;
import android.view.LayoutInflater;
@@ -32,8 +32,8 @@ import android.widget.TextView;
import java.util.List;
-import de.arcus.playmusicexporter2.R;
-import de.arcus.playmusicexporter2.utils.ArtworkViewLoader;
+import re.jcg.playmusicexporter.R;
+import re.jcg.playmusicexporter.utils.ArtworkViewLoader;
import de.arcus.playmusiclib.items.MusicTrackList;
/**
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/adapter/MusicTrackListAdapter.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/adapter/MusicTrackListAdapter.java
similarity index 95%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/adapter/MusicTrackListAdapter.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/adapter/MusicTrackListAdapter.java
index 4a59267..2501e0d 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/adapter/MusicTrackListAdapter.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/adapter/MusicTrackListAdapter.java
@@ -20,7 +20,7 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.adapter;
+package re.jcg.playmusicexporter.adapter;
import android.content.Context;
import android.support.v4.content.ContextCompat;
@@ -34,10 +34,10 @@ import android.widget.TextView;
import java.util.List;
-import de.arcus.playmusicexporter2.R;
-import de.arcus.playmusicexporter2.items.SelectedTrack;
-import de.arcus.playmusicexporter2.items.SelectedTrackList;
-import de.arcus.playmusicexporter2.utils.ArtworkViewLoader;
+import re.jcg.playmusicexporter.R;
+import re.jcg.playmusicexporter.items.SelectedTrack;
+import re.jcg.playmusicexporter.items.SelectedTrackList;
+import re.jcg.playmusicexporter.utils.ArtworkViewLoader;
import de.arcus.playmusiclib.items.MusicTrack;
/**
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicContainerListFragment.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/fragments/MusicContainerListFragment.java
similarity index 95%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicContainerListFragment.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/fragments/MusicContainerListFragment.java
index a206d66..fcc971f 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicContainerListFragment.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/fragments/MusicContainerListFragment.java
@@ -20,9 +20,9 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.fragments;
+package re.jcg.playmusicexporter.fragments;
-import android.app.Activity;
+import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.View;
@@ -32,7 +32,7 @@ import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
-import de.arcus.playmusicexporter2.adapter.MusicContainerListAdapter;
+import re.jcg.playmusicexporter.adapter.MusicContainerListAdapter;
import de.arcus.playmusiclib.items.MusicTrackList;
/**
@@ -145,17 +145,17 @@ public class MusicContainerListFragment extends ListFragment {
setActivatedPosition(savedInstanceState.getInt(STATE_ACTIVATED_POSITION));
}
}
-
+// DEPRECATED
@Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
+ public void onAttach(Context context) {
+ super.onAttach(context);
// Activities containing this fragment must implement its callbacks.
- if (!(activity instanceof Callbacks)) {
+ if (!(context instanceof Callbacks)) {
throw new IllegalStateException("Activity must implement fragment's callbacks.");
}
- mCallbacks = (Callbacks) activity;
+ mCallbacks = (Callbacks) context;
}
@Override
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicTrackListFragment.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/fragments/MusicTrackListFragment.java
similarity index 89%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicTrackListFragment.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/fragments/MusicTrackListFragment.java
index 10ee4be..6c04823 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/MusicTrackListFragment.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/fragments/MusicTrackListFragment.java
@@ -20,10 +20,12 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.fragments;
+package re.jcg.playmusicexporter.fragments;
+import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
+import android.preference.PreferenceManager;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.text.TextUtils;
@@ -36,15 +38,15 @@ import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
-import de.arcus.playmusicexporter2.R;
-import de.arcus.playmusicexporter2.activities.MusicContainerListActivity;
-import de.arcus.playmusicexporter2.activities.MusicTrackListActivity;
-import de.arcus.playmusicexporter2.adapter.MusicTrackListAdapter;
-import de.arcus.playmusicexporter2.items.SelectedTrack;
-import de.arcus.playmusicexporter2.items.SelectedTrackList;
-import de.arcus.playmusicexporter2.settings.PlayMusicExporterSettings;
-import de.arcus.playmusicexporter2.utils.ArtworkViewLoader;
-import de.arcus.playmusicexporter2.utils.MusicPathBuilder;
+import re.jcg.playmusicexporter.R;
+import re.jcg.playmusicexporter.activities.MusicContainerListActivity;
+import re.jcg.playmusicexporter.activities.MusicTrackListActivity;
+import re.jcg.playmusicexporter.adapter.MusicTrackListAdapter;
+import re.jcg.playmusicexporter.items.SelectedTrack;
+import re.jcg.playmusicexporter.items.SelectedTrackList;
+import re.jcg.playmusicexporter.settings.PlayMusicExporterSettings;
+import re.jcg.playmusicexporter.utils.ArtworkViewLoader;
+import re.jcg.playmusicexporter.utils.MusicPathBuilder;
import de.arcus.playmusiclib.PlayMusicManager;
import de.arcus.playmusiclib.items.MusicTrack;
import de.arcus.playmusiclib.items.MusicTrackList;
@@ -241,23 +243,21 @@ public class MusicTrackListFragment extends Fragment {
// Track is available
if (musicTrack.isOfflineAvailable()) {
- // Gets the settings
- PlayMusicExporterSettings settings = new PlayMusicExporterSettings(getActivity());
+ SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
// Default structure
- String pathStructure = "{album-artist} - {title}.mp3";
+ String pathStructure = preferences.getString("preference_structure_alba", "{album-artist}/{album}/{disc=CD $}/{no=$$.} {title}.mp3");
// Track is exported from a group (playlist or artist)
- if (!TextUtils.isEmpty(musicTrack.getContainerName()))
- {
- pathStructure = "{group}/{album-artist} - {title}.mp3";
+ if (!TextUtils.isEmpty(musicTrack.getContainerName())) {
+ pathStructure = preferences.getString("preference_structure_groups", "{group}/{group-no=$$.} {artist} - {title}.mp3");
}
// Build the path
String path = MusicPathBuilder.Build(musicTrack, pathStructure);
// Gets the root uri
- Uri uri = settings.getUri(PlayMusicExporterSettings.PREF_EXPORT_URI, Uri.EMPTY);
+ Uri uri = Uri.parse(preferences.getString("preference_export_tree_uri", Uri.EMPTY.toString()));
// Prevent the closing
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/NavigationDrawerFragment.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/fragments/NavigationDrawerFragment.java
similarity index 98%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/NavigationDrawerFragment.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/fragments/NavigationDrawerFragment.java
index 01ada8d..c9f16da 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/fragments/NavigationDrawerFragment.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/fragments/NavigationDrawerFragment.java
@@ -20,7 +20,7 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.fragments;
+package re.jcg.playmusicexporter.fragments;
import android.app.Activity;
import android.content.Intent;
@@ -42,9 +42,9 @@ import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
-import de.arcus.playmusicexporter2.R;
-import de.arcus.playmusicexporter2.activities.SettingsActivity;
-import de.arcus.playmusicexporter2.settings.PlayMusicExporterSettings;
+import re.jcg.playmusicexporter.R;
+import re.jcg.playmusicexporter.activities.SettingsActivity;
+import re.jcg.playmusicexporter.settings.PlayMusicExporterSettings;
/**
* Fragment used for managing interactions for and presentation of a navigation drawer.
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/items/SelectedTrack.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/items/SelectedTrack.java
similarity index 95%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/items/SelectedTrack.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/items/SelectedTrack.java
index fd5c665..63b74b6 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/items/SelectedTrack.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/items/SelectedTrack.java
@@ -20,13 +20,13 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.items;
+package re.jcg.playmusicexporter.items;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
-import de.arcus.playmusicexporter2.services.ExportService;
+import re.jcg.playmusicexporter.services.ExportService;
/**
* The selected track
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/items/SelectedTrackList.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/items/SelectedTrackList.java
similarity index 94%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/items/SelectedTrackList.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/items/SelectedTrackList.java
index 63373c0..4615c6d 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/items/SelectedTrackList.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/items/SelectedTrackList.java
@@ -20,14 +20,14 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.items;
+package re.jcg.playmusicexporter.items;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.view.ActionMode;
import de.arcus.framework.utils.SelectionList;
-import de.arcus.playmusicexporter2.R;
-import de.arcus.playmusicexporter2.actionmode.ActionModeTitle;
+import re.jcg.playmusicexporter.R;
+import re.jcg.playmusicexporter.actionmode.ActionModeTitle;
/**
* The selection manager for music tracks
diff --git a/playmusicexporter/src/main/java/re/jcg/playmusicexporter/services/ExportAllJob.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/services/ExportAllJob.java
new file mode 100644
index 0000000..abe15db
--- /dev/null
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/services/ExportAllJob.java
@@ -0,0 +1,60 @@
+package re.jcg.playmusicexporter.services;
+
+import android.app.job.JobInfo;
+import android.app.job.JobParameters;
+import android.app.job.JobScheduler;
+import android.app.job.JobService;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Build;
+import android.preference.PreferenceManager;
+import android.support.annotation.RequiresApi;
+import android.util.Log;
+
+public class ExportAllJob extends JobService {
+ public static final String TAG = "AutoGPME_ExportJob";
+
+
+ public static void scheduleExport(final Context pContext) {
+ SharedPreferences lPreferences = PreferenceManager.getDefaultSharedPreferences(pContext);
+ lPreferences.registerOnSharedPreferenceChangeListener(new SharedPreferences.OnSharedPreferenceChangeListener() {
+ @Override
+ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
+ scheduleExport(pContext);
+ Log.i(TAG, "Preference changed: " + key);
+ }
+ });
+
+ long lInterval = Long.parseLong(lPreferences.getString("settings_export_frequency", "86400000"));
+ boolean lRequireUnmeteredNetwork = lPreferences.getBoolean("settings_export_", false);
+ boolean lRequireCharging = lPreferences.getBoolean("settings", true);
+
+ JobScheduler lJobScheduler = (JobScheduler) pContext.getSystemService(JOB_SCHEDULER_SERVICE);
+ if (lInterval == -1) {
+ lJobScheduler.cancel(42);
+ } else {
+ ComponentName lComponentName = new ComponentName(pContext, ExportAllJob.class);
+ JobInfo.Builder lBuilder = new JobInfo.Builder(42, lComponentName);
+ lBuilder.setPeriodic(lInterval);
+ lBuilder.setPersisted(true);
+ if (lRequireUnmeteredNetwork)
+ lBuilder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED);
+ lBuilder.setRequiresCharging(lRequireCharging);
+ lJobScheduler.schedule(lBuilder.build());
+ }
+ }
+
+ @Override
+ public boolean onStartJob(JobParameters params) {
+ Log.i(TAG, "Started Job: " + params.toString());
+ ExportAllService.startExport(this);
+ return true;
+ }
+
+ @Override
+ public boolean onStopJob(JobParameters params) {
+ Log.i(TAG, "Stopped Job: " + params.toString());
+ return true;
+ }
+}
diff --git a/playmusicexporter/src/main/java/re/jcg/playmusicexporter/services/ExportAllService.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/services/ExportAllService.java
new file mode 100644
index 0000000..28794ff
--- /dev/null
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/services/ExportAllService.java
@@ -0,0 +1,103 @@
+package re.jcg.playmusicexporter.services;
+
+import android.app.IntentService;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.net.Uri;
+import android.preference.PreferenceManager;
+import android.support.v4.provider.DocumentFile;
+import android.util.Log;
+
+import java.util.List;
+
+import re.jcg.playmusicexporter.utils.MusicPathBuilder;
+import de.arcus.playmusiclib.PlayMusicManager;
+import de.arcus.playmusiclib.datasources.AlbumDataSource;
+import de.arcus.playmusiclib.exceptions.CouldNotOpenDatabaseException;
+import de.arcus.playmusiclib.exceptions.NoSuperUserException;
+import de.arcus.playmusiclib.exceptions.PlayMusicNotFoundException;
+import de.arcus.playmusiclib.items.Album;
+import de.arcus.playmusiclib.items.MusicTrack;
+
+
+public class ExportAllService extends IntentService {
+ public static final String TAG = "AutoGPME_ExportService";
+ public static final String ACTION_EXPORT = "re.jcg.playmusicexporter.action.EXPORT";
+ public static final String ACTION_SET_EXPORT_JOB = "re.jcg.playmusicexporter.action.SET_EXPORT_JOB";
+
+ public static void startExport(Context pContext) {
+ Intent lIntent = new Intent(pContext, ExportAllService.class);
+ lIntent.setAction(ACTION_EXPORT);
+ pContext.startService(lIntent);
+ Log.i(TAG, "Intent sent!");
+ }
+
+ public ExportAllService() {
+ super("AutoGPME-ExportService");
+ }
+
+ protected void onHandleIntent(Intent intent) {
+ Log.i(TAG, "Received intent: " + intent.getAction());
+ switch (intent.getAction()) {
+ case ACTION_EXPORT:
+ export();
+ break;
+ case ACTION_SET_EXPORT_JOB:
+ ExportAllJob.scheduleExport(this);
+ break;
+ }
+ }
+
+ private void export() {
+ SharedPreferences lPreferences = PreferenceManager.getDefaultSharedPreferences(this);
+ PlayMusicManager lPlayMusicManager = new PlayMusicManager(this);
+
+ try {
+ lPlayMusicManager.startUp();
+ } catch (PlayMusicNotFoundException | NoSuperUserException | CouldNotOpenDatabaseException e) {
+ e.printStackTrace();
+ }
+ String lStringUri = lPreferences.getString("preference_export_tree_uri", null);
+ String lExportStructure = lPreferences.getString("preference_structure_alba", "{album-artist}/{album}/{disc=CD $}/{no=$$.} {title}.mp3");
+ Log.i(TAG, lStringUri);
+ Uri lUri = Uri.parse(lStringUri);
+ AlbumDataSource lAlbumDataSource = new AlbumDataSource(lPlayMusicManager);
+ lAlbumDataSource.setOfflineOnly(true);
+ List lAlba = lAlbumDataSource.getAll();
+ for (Album lAlbum : lAlba) {
+ for (MusicTrack lTrack : lAlbum.getMusicTrackList()) {
+ if (lTrack.isOfflineAvailable()) {
+ String lPath = MusicPathBuilder.Build(lTrack, lExportStructure);
+ if (!isAlreadyThere(lUri, lPath)) {
+ if (lPlayMusicManager.exportMusicTrack(lTrack, lUri, lPath)) {
+ Log.i(TAG, "Exported Music Track: " + getStringForTrack(lTrack));
+ } else {
+ Log.i(TAG, "Failed to export Music Track: " + getStringForTrack(lTrack));
+ }
+ } else {
+ Log.i(TAG, lPath + " already exists.");
+ }
+ }
+ }
+ }
+ }
+
+ private boolean isAlreadyThere(Uri pUri, String pPath) {
+ DocumentFile lDocumentFile = DocumentFile.fromTreeUri(this, pUri);
+ for (String lDisplayName: pPath.split("/")) {
+ if (lDocumentFile.findFile(lDisplayName) != null) {
+ lDocumentFile = lDocumentFile.findFile(lDisplayName);
+ } else {
+ Log.i(TAG, pPath + " does not exist yet.");
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private String getStringForTrack(MusicTrack pTrack) {
+ return pTrack.getAlbumArtist() + " - " + pTrack.getAlbum() + " - " + pTrack.getTitle();
+ }
+}
+
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/services/ExportService.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/services/ExportService.java
similarity index 98%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/services/ExportService.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/services/ExportService.java
index 4ccdbfc..9e10e90 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/services/ExportService.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/services/ExportService.java
@@ -20,7 +20,7 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.services;
+package re.jcg.playmusicexporter.services;
import android.app.IntentService;
import android.app.Notification;
@@ -31,7 +31,7 @@ import android.os.Bundle;
import android.support.v4.app.NotificationCompat;
import de.arcus.framework.logger.Logger;
-import de.arcus.playmusicexporter2.R;
+import re.jcg.playmusicexporter.R;
import de.arcus.playmusiclib.PlayMusicManager;
import de.arcus.playmusiclib.datasources.MusicTrackDataSource;
import de.arcus.playmusiclib.items.MusicTrack;
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/settings/PlayMusicExporterSettings.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/settings/PlayMusicExporterSettings.java
similarity index 58%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/settings/PlayMusicExporterSettings.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/settings/PlayMusicExporterSettings.java
index 9820a81..020d0fb 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/settings/PlayMusicExporterSettings.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/settings/PlayMusicExporterSettings.java
@@ -20,54 +20,73 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.settings;
+package re.jcg.playmusicexporter.settings;
import android.content.Context;
import android.net.Uri;
import android.os.Environment;
import de.arcus.framework.settings.AppSettings;
+import re.jcg.playmusicexporter.R;
/**
* Helper class to read and write app settings without to care about to open and close an editor
*/
public class PlayMusicExporterSettings extends AppSettings {
+ private static PlayMusicExporterSettings settings;
/**
* The default settings file
*/
public static final String DEFAULT_SETTINGS_FILENAME = "play_music_exporter";
// Preference constants
- public static final String PREF_ID3 = "pref_id3";
- public static final String PREF_ID3_ARTWORK_SIZE = "pref_id3_artwork_size";
+ private static final String PREF_ID3 = "pref_id3";
+ private static final String PREF_ID3_ARTWORK_SIZE = "pref_id3_artwork_size";
public static final String PREF_EXPORT_URI = "pref_export_uri";
- public static final String PREF_STRUCTURE_ALBUMS = "pref_structure_albums";
- public static final String PREF_STRUCTURE_GROUPS = "pref_structure_groups";
+ private static final String PREF_STRUCTURE_ALBA = "pref_structure_albua";
+ private static final String PREF_STRUCTURE_GROUPS = "pref_structure_groups";
public static final String PREF_DRAWER_LEARNED = "pref_drawer_learned";
public static final String PREF_DRAWER_SELECTED_TYPE = "pref_drawer_selected_type";
+ public PlayMusicExporterSettings(Context context) {
+ super(context);
+ }
+
/**
* Creates a new instance of PlayMusicExporterSettings that access to the default settings file
* @param context Context of the app
*/
- public PlayMusicExporterSettings(Context context) {
- super(context, DEFAULT_SETTINGS_FILENAME);
+ public static void init(Context context) {
+ settings = new PlayMusicExporterSettings(context);
// Init the default values
// ID3 settings
- if (!contains(PREF_ID3))
- setString(PREF_ID3, "id3_with_cover");
+ if (!settings.contains(PREF_ID3))
+ settings.setString(PREF_ID3, "id3_with_cover");
// ID3 artwork settings
- if (!contains(PREF_ID3_ARTWORK_SIZE))
- setInt(PREF_ID3_ARTWORK_SIZE, 512);
+ if (!settings.contains(PREF_ID3_ARTWORK_SIZE))
+ settings.setInt(PREF_ID3_ARTWORK_SIZE, 1024);
// Export path
- if (!contains(PREF_EXPORT_URI))
- setUri(PREF_EXPORT_URI, Uri.fromFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)));
+ if (!settings.contains(PREF_EXPORT_URI))
+ settings.setUri(PREF_EXPORT_URI, Uri.fromFile(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)));
+ // Alba export structure
+ if (!settings.contains(PREF_STRUCTURE_ALBA))
+ settings.setString(PREF_STRUCTURE_ALBA, context.getString(R.string.settings_export_structure_alba_default_value));
+
+ // Groups export structure
+ if (!settings.contains(PREF_STRUCTURE_GROUPS))
+ settings.setString(PREF_STRUCTURE_GROUPS, context.getString(R.string.settings_export_structure_groups_default_value));
+
+ // Drawer learned
+ if (!settings.contains(PREF_DRAWER_LEARNED))
+ settings.setBoolean(PREF_DRAWER_LEARNED, false);
+
+ //
}
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/utils/ArtworkViewLoader.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/utils/ArtworkViewLoader.java
similarity index 98%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/utils/ArtworkViewLoader.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/utils/ArtworkViewLoader.java
index 3c0e570..c4822bc 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/utils/ArtworkViewLoader.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/utils/ArtworkViewLoader.java
@@ -20,14 +20,14 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.utils;
+package re.jcg.playmusicexporter.utils;
import android.graphics.Bitmap;
import android.widget.ImageView;
import java.lang.ref.WeakReference;
-import de.arcus.playmusicexporter2.R;
+import re.jcg.playmusicexporter.R;
import de.arcus.playmusiclib.ArtworkLoader;
import de.arcus.playmusiclib.ArtworkLoaderCallback;
import de.arcus.playmusiclib.items.ArtworkEntry;
diff --git a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/utils/MusicPathBuilder.java b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/utils/MusicPathBuilder.java
similarity index 99%
rename from playmusicexporter/src/main/java/de/arcus/playmusicexporter2/utils/MusicPathBuilder.java
rename to playmusicexporter/src/main/java/re/jcg/playmusicexporter/utils/MusicPathBuilder.java
index 36ab202..d8bb18f 100644
--- a/playmusicexporter/src/main/java/de/arcus/playmusicexporter2/utils/MusicPathBuilder.java
+++ b/playmusicexporter/src/main/java/re/jcg/playmusicexporter/utils/MusicPathBuilder.java
@@ -20,7 +20,7 @@
* THE SOFTWARE.
*/
-package de.arcus.playmusicexporter2.utils;
+package re.jcg.playmusicexporter.utils;
import android.text.TextUtils;
diff --git a/playmusicexporter/src/main/res/drawable/ic_info_black_24dp.xml b/playmusicexporter/src/main/res/drawable/ic_info_black_24dp.xml
new file mode 100644
index 0000000..34b8202
--- /dev/null
+++ b/playmusicexporter/src/main/res/drawable/ic_info_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/playmusicexporter/src/main/res/drawable/ic_notifications_black_24dp.xml b/playmusicexporter/src/main/res/drawable/ic_notifications_black_24dp.xml
new file mode 100644
index 0000000..e3400cf
--- /dev/null
+++ b/playmusicexporter/src/main/res/drawable/ic_notifications_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/playmusicexporter/src/main/res/drawable/ic_sync_black_24dp.xml b/playmusicexporter/src/main/res/drawable/ic_sync_black_24dp.xml
new file mode 100644
index 0000000..5a283aa
--- /dev/null
+++ b/playmusicexporter/src/main/res/drawable/ic_sync_black_24dp.xml
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/playmusicexporter/src/main/res/layout/activity_track_list.xml b/playmusicexporter/src/main/res/layout/activity_track_list.xml
index e4a668c..c68c77c 100644
--- a/playmusicexporter/src/main/res/layout/activity_track_list.xml
+++ b/playmusicexporter/src/main/res/layout/activity_track_list.xml
@@ -33,7 +33,7 @@
diff --git a/playmusicexporter/src/main/res/layout/activity_track_twopane.xml b/playmusicexporter/src/main/res/layout/activity_track_twopane.xml
index c6159bf..d337b72 100644
--- a/playmusicexporter/src/main/res/layout/activity_track_twopane.xml
+++ b/playmusicexporter/src/main/res/layout/activity_track_twopane.xml
@@ -45,7 +45,7 @@
http://developer.android.com/training/multiscreen/screensizes.html#TaskUseAliasFilters
-->
@@ -65,6 +65,6 @@
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
- android:name="de.arcus.playmusicexporter2.fragments.NavigationDrawerFragment"
+ android:name="re.jcg.playmusicexporter.fragments.NavigationDrawerFragment"
tools:layout="@layout/fragment_navigation_drawer" />
\ No newline at end of file
diff --git a/playmusicexporter/src/main/res/values-de/array.xml b/playmusicexporter/src/main/res/values-de/array.xml
new file mode 100644
index 0000000..eb98d39
--- /dev/null
+++ b/playmusicexporter/src/main/res/values-de/array.xml
@@ -0,0 +1,11 @@
+
+
+
+ - Alle 6 Hours
+ - Alle 12 Stunden
+ - Alle Tag
+ - Alle 2 Tage
+ - Jede Woche
+ - Nie
+
+
\ No newline at end of file
diff --git a/playmusicexporter/src/main/res/values-de/strings.xml b/playmusicexporter/src/main/res/values-de/strings.xml
index b92b53f..8e7bd18 100644
--- a/playmusicexporter/src/main/res/values-de/strings.xml
+++ b/playmusicexporter/src/main/res/values-de/strings.xml
@@ -36,10 +36,7 @@
Export-Einstellungen
Extras
Dank an
- Spende über PayPal
- Unterstützt mich
Speicherort
- Verzeichnisbaum für Alben
Verzeichnisbaum für Playlists
MP3 Metadaten
Ohne Metadaten
@@ -67,4 +64,19 @@
Daten-Zugriff verweigert
Der PlayMusicExpoerter benötigt Schreibrechte auf der SD-Karte. Dies ist Teil des Marshmallow-Fix.\n\nBitte starten Sie die App neu und erlauben Sie die Berechtigung.
OK
+ Über
+ Automatisierung
+ Export
+ Über den ursprünglichen Entwickler
+ Export Speicherort
+ Metadaten
+ Spende an David Schulte via PayPal
+ Unterstützt den ursprünglichen Entwickler
+ Verzeichnisbaum für Alben
+ Setze den Verzeichnisbaum
+ Beispiel: Beatles/Help!/13. Yesterday.mp3
+ "Nutze / für einen neuen Order. Available Tags: - {album-artist} - {album} - {artist} - {title} - {disc=CD $} - {no=$$.} - {year} - {genre} "
+ Setze den Verzeichnisbaum
+ Beispiel: Great Songs/4. Beatles - Yesterday.mp3
+ Versionsnummer
\ No newline at end of file
diff --git a/playmusicexporter/src/main/res/values/array.xml b/playmusicexporter/src/main/res/values/array.xml
new file mode 100644
index 0000000..727fcb8
--- /dev/null
+++ b/playmusicexporter/src/main/res/values/array.xml
@@ -0,0 +1,43 @@
+
+
+
+ - Every 6 Hours
+ - Every 12 Hours
+ - Every Day
+ - Every 2 Days
+ - Every Week
+ - Never
+
+
+ - 2160000
+ - 43200000
+ - 86400000
+ - 172800000
+ - 604800000
+ - -1
+
+
+
+ - 128x128px
+ - 256x256px
+ - 512x512px
+ - 1024x1024px
+
+
+ - 128
+ - 256
+ - 512
+ - 1024
+
+
+
+ - @string/settings_export_id3_with_cover
+ - @string/settings_export_id3_without_cover
+ - @string/settings_export_id3_disabled
+
+
+ - id3_with_cover
+ - id3_without_cover
+ - id3_disabled
+
+
\ No newline at end of file
diff --git a/playmusicexporter/src/main/res/values/strings.xml b/playmusicexporter/src/main/res/values/strings.xml
index c48cc5c..f6761d6 100644
--- a/playmusicexporter/src/main/res/values/strings.xml
+++ b/playmusicexporter/src/main/res/values/strings.xml
@@ -1,5 +1,4 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/playmusicexporter/src/main/res/xml/pref_automation.xml b/playmusicexporter/src/main/res/xml/pref_automation.xml
new file mode 100644
index 0000000..ac93027
--- /dev/null
+++ b/playmusicexporter/src/main/res/xml/pref_automation.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/playmusicexporter/src/main/res/xml/pref_debug.xml b/playmusicexporter/src/main/res/xml/pref_debug.xml
new file mode 100644
index 0000000..ea57311
--- /dev/null
+++ b/playmusicexporter/src/main/res/xml/pref_debug.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
diff --git a/playmusicexporter/src/main/res/xml/pref_export.xml b/playmusicexporter/src/main/res/xml/pref_export.xml
new file mode 100644
index 0000000..0bc455c
--- /dev/null
+++ b/playmusicexporter/src/main/res/xml/pref_export.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/playmusicexporter/src/main/res/xml/pref_headers.xml b/playmusicexporter/src/main/res/xml/pref_headers.xml
new file mode 100644
index 0000000..3dc99ac
--- /dev/null
+++ b/playmusicexporter/src/main/res/xml/pref_headers.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/playmusicexporter/src/main/res/xml/preferences.xml b/playmusicexporter/src/main/res/xml/preferences.xml
deleted file mode 100644
index ec5cf63..0000000
--- a/playmusicexporter/src/main/res/xml/preferences.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/playmusiclib/build.gradle b/playmusiclib/build.gradle
index 4d76f90..e5b0aad 100644
--- a/playmusiclib/build.gradle
+++ b/playmusiclib/build.gradle
@@ -24,7 +24,7 @@ apply plugin: 'com.android.library'
android {
compileSdkVersion 25
- buildToolsVersion "25.0.1"
+ buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 9
diff --git a/playmusiclib/playmusiclib.iml b/playmusiclib/playmusiclib.iml
index 63f6a1c..3b7fcb2 100644
--- a/playmusiclib/playmusiclib.iml
+++ b/playmusiclib/playmusiclib.iml
@@ -12,10 +12,7 @@
-
-
- generateDebugAndroidTestSources
generateDebugSources
@@ -29,19 +26,21 @@
-
+
+
+
@@ -51,6 +50,15 @@
+
+
+
+
+
+
+
+
+
@@ -58,6 +66,7 @@
+
@@ -65,32 +74,47 @@
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
-
-
-
+
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file